亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mmc_drv.c

?? 硬盤播放器制作DIY
?? C
字號:
/*C**************************************************************************
* NAME:         mmc_drv.c
*----------------------------------------------------------------------------
* Copyright (c) 2003 Atmel.
*----------------------------------------------------------------------------
* RELEASE:      snd1c-refd-nf-4_0_3      
* REVISION:     1.5     
*----------------------------------------------------------------------------
* PURPOSE:
* This file contains the MMC driver routines
*
* NOTES:
* Driver Configuration:
*   - None
* Global Variables:
*   - None
*****************************************************************************/

/*_____ I N C L U D E S ____________________________________________________*/

#include "config.h"                         /* system configuration */
#include "mmc_drv.h"                        /* mmc driver definition */


/*_____ M A C R O S ________________________________________________________*/


/*_____ D E F I N I T I O N ________________________________________________*/

static  Byte    mmc_state;
static  bit     mmc_ready;                  /* MMC in prog state */


/*_____ D E C L A R A T I O N ______________________________________________*/

void    mmc_set_prio (Byte);
void    mmc_send_cmd (Byte, Uint32, Byte);
bit     mmc_check_response (void);


/*F**************************************************************************
* NAME: mmc_set_prio
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*   Set the MMC controller priority interrupt
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS: 
* ram/xram:
* cycle:
* stack: 
* code:
*****************************************************************************/
void mmc_set_prio (Byte priority)
{
  if ((priority == 1) || (priority == 3))     /* set LSB priority bit */
  {
    IPL1 |=  MSK_ESPI;
  }
  if ((priority == 2) || (priority == 3))     /* set MSB priority bit */
  {
    IPH1 |= MSK_ESPI;
  }
}


/*F**************************************************************************
* NAME: mmc_send_cmd
*----------------------------------------------------------------------------
* PARAMS:
*   index:    command index
*   argument: argument (32 bits) of the command to send
*   response: expected response to the command to send
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*   Send a command on the bus
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   The fifo lock flag is not tested it is under firmware responsability to
*   take care of inter-command delays 
*----------------------------------------------------------------------------
* REQUIREMENTS: 
* ram/xram:
* cycle:
* stack: 
* code:
*****************************************************************************/
void mmc_send_cmd (Byte index, Uint32 argument, Byte response)
{
  MMCMD = index;
  MMCMD = ((Byte*)&argument)[0];
  MMCMD = ((Byte*)&argument)[1];
  MMCMD = ((Byte*)&argument)[2];
  MMCMD = ((Byte*)&argument)[3];

  switch (response)
  {
    case MMC_RESP_R1:
    case MMC_RESP_R4:
    case MMC_RESP_R5:
    {
      MMCON0 |= MSK_RFMT;                   /* set 48 bits response */
      MMCON0 &= ~MSK_CRCDIS;                /* set response with CRC7 */
      MMCON1 |= (MSK_CMDEN|MSK_RESPEN);
      MMCON1 &= ~(MSK_CMDEN|MSK_RESPEN);    /* send command with response */
      break;
    }
    case MMC_RESP_R2:
    {
      MMCON0 &= ~(MSK_RFMT | MSK_CRCDIS);   /* set 136 bits response with CRC7 */
      MMCON1 |= (MSK_CMDEN|MSK_RESPEN);
      MMCON1 &= ~(MSK_CMDEN|MSK_RESPEN);    /* send command with response */
      break;
    }
    case MMC_RESP_R3:
    {
      MMCON0 |= (MSK_RFMT | MSK_CRCDIS);    /* set 48 bits response without CRC7 */
      MMCON1 |= (MSK_CMDEN|MSK_RESPEN);
      MMCON1 &= ~(MSK_CMDEN|MSK_RESPEN);    /* send command with response */
      break;
    }
    case MMC_NO_RESP:
    default:
    {
      MMCON1 |= MSK_CMDEN;
      MMCON1 &= ~MSK_CMDEN;                 /* send command without response */
      break;
    }
  }
}


/*F**************************************************************************
* NAME: mmc_send_scmd
*----------------------------------------------------------------------------
* PARAMS:
*   index:    command index
*   response: expected response to the command to send
*
* return:
*----------------------------------------------------------------------------
* PURPOSE:
*   Send a short command on the bus
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*   The fifo lock flag is not tested it is under firmware responsability to
*   take care of inter-command delays 
*----------------------------------------------------------------------------
* REQUIREMENTS: 
* ram/xram:
* cycle:
* stack: 
* code:
*****************************************************************************/
void mmc_send_scmd (Byte index, Byte response)
{
  MMCMD = index;
  MMCMD = (Byte)MMC_NO_ARG;
  MMCMD = (Byte)MMC_NO_ARG;
  MMCMD = (Byte)MMC_NO_ARG;
  MMCMD = (Byte)MMC_NO_ARG;

  switch (response)
  {
    case MMC_RESP_R1:
    case MMC_RESP_R4:
    case MMC_RESP_R5:
    case SD_RESP_R6:
    {
      MMCON0 |= MSK_RFMT;                   /* set 48 bits response */
      MMCON0 &= ~MSK_CRCDIS;                /* set response with CRC7 */
      MMCON1 |= (MSK_CMDEN|MSK_RESPEN);
      MMCON1 &= ~(MSK_CMDEN|MSK_RESPEN);    /* send command with response */
      break;
    }
    case MMC_RESP_R2:
    {
      MMCON0 &= ~(MSK_RFMT | MSK_CRCDIS);   /* set 136 bits response with CRC7 */
      MMCON1 |= (MSK_CMDEN|MSK_RESPEN);
      MMCON1 &= ~(MSK_CMDEN|MSK_RESPEN);    /* send command with response */
      break;
    }
    case MMC_RESP_R3:
    {
      MMCON0 |= (MSK_RFMT | MSK_CRCDIS);    /* set 48 bits response without CRC7 */
      MMCON1 |= (MSK_CMDEN|MSK_RESPEN);
      MMCON1 &= ~(MSK_CMDEN|MSK_RESPEN);    /* send command with response */
      break;
    }
    case MMC_NO_RESP:
    default:
    {
      MMCON1 |= MSK_CMDEN;
      MMCON1 &= ~MSK_CMDEN;                 /* send command without response */
      break;
    }
  }
}


/*F**************************************************************************
* NAME: mmc_check_response
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*   MMC_ERR_RESP: no response or bad format received
*   MMC_RESP_OK:  response received
*----------------------------------------------------------------------------
* PURPOSE: 
*   Check command response 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
* ram/xram:
* cycle:
* stack: 
* code:
*****************************************************************************/
bit mmc_check_response (void)
{
  if (Mmc_response_received())
  { /* response received */
    if ((MMCON0 & MSK_CRCDIS) != 0)
    {                                         /* CRC7 not computed */
      if ((MMSTA & MSK_RESPFS) != 0)
      {
        return (MMC_RESP_OK);
      }
      else
      {
        return (MMC_ERR_RESP);                /* format error */
      }
    }
    else
    {                                         /* CRC7 computed */
      if ((MMSTA & (MSK_RESPFS | MSK_CRC7S)) == (MSK_RESPFS | MSK_CRC7S))
      {
        return (MMC_RESP_OK);
      }
      else
      {
        return (MMC_ERR_RESP);                /* format or CRC7 error */
      }
    }
  }
  else
  { /* no response received */
    return (MMC_ERR_RESP);
  }
}


/*F**************************************************************************
* NAME: mmc_read_response
*----------------------------------------------------------------------------
* PARAMS:
*
* return:
*   4-byte argument of the response
*----------------------------------------------------------------------------
* PURPOSE: 
*   Read command argument response 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
* ram/xram:
* cycle:
* stack: 
* code:
*****************************************************************************/
Uint32 mmc_read_response (void)
{
Uint32  argument;

  ((Byte*)&argument)[0] = MMCMD;    /* dummy index read */
  ((Byte*)&argument)[0] = MMCMD;
  ((Byte*)&argument)[1] = MMCMD;
  ((Byte*)&argument)[2] = MMCMD;
  ((Byte*)&argument)[3] = MMCMD;

  return argument;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜宅男影院| 中文字幕欧美激情一区| 欧美精品一区二区三区很污很色的| 久久九九久久九九| 亚洲一区二区综合| 成人白浆超碰人人人人| 欧美日韩精品一区二区三区四区 | 亚洲一区二三区| 国产91精品精华液一区二区三区| 欧美绝品在线观看成人午夜影视| 国产欧美一二三区| 精品一区二区三区不卡| 欧美日韩精品欧美日韩精品一| 欧美国产精品一区二区| 国产精品影视在线| 91精品黄色片免费大全| 亚洲大型综合色站| 91麻豆免费看片| √…a在线天堂一区| 国产成人精品免费在线| 欧美精品一区二区三区一线天视频 | 久久精品视频一区二区| 奇米精品一区二区三区四区 | 一区二区成人在线| 国产a级毛片一区| 久久精品夜夜夜夜久久| 国产高清无密码一区二区三区| 日韩欧美视频一区| 麻豆成人久久精品二区三区小说| 欧美日韩精品一区二区在线播放 | 最近中文字幕一区二区三区| 国产激情一区二区三区四区 | 精品久久久久久久久久久久久久久| 亚洲高清视频中文字幕| 色诱亚洲精品久久久久久| 亚洲免费观看高清完整版在线| www.激情成人| 夜色激情一区二区| 日本高清视频一区二区| 亚洲国产一区在线观看| 欧美影视一区在线| 亚洲福利视频一区二区| 337p亚洲精品色噜噜噜| 日本欧美大码aⅴ在线播放| 日韩欧美视频一区| 国产精品一区三区| 国产精品久久毛片av大全日韩| 成人avav影音| 亚洲va欧美va国产va天堂影院| 欧美精品日韩综合在线| 加勒比av一区二区| 国产欧美日本一区视频| 色综合久久久久综合体桃花网| 亚洲成av人片在线观看| 精品乱码亚洲一区二区不卡| 国产精品一区久久久久| 亚洲乱码一区二区三区在线观看| 欧美无乱码久久久免费午夜一区| 午夜婷婷国产麻豆精品| 欧美精品一区在线观看| 91社区在线播放| 日韩精品国产欧美| 国产丝袜欧美中文另类| 欧美伊人久久大香线蕉综合69| 青娱乐精品视频| 中文字幕一区日韩精品欧美| 欧美日韩日本视频| 成人国产精品免费网站| 午夜精品久久久久| 欧美激情在线一区二区| 欧美日韩免费在线视频| 国产成人自拍网| 亚洲国产精品久久不卡毛片| 欧美精品一区二| 欧美日韩免费高清一区色橹橹| 国产美女一区二区| 亚洲国产一区在线观看| 日本一区二区三区在线不卡| 日本久久精品电影| 国产传媒一区在线| 午夜免费久久看| 亚洲欧洲韩国日本视频| 欧美变态tickle挠乳网站| 色综合一区二区三区| 国内精品伊人久久久久av影院| 亚洲激情综合网| 国产精品久久久久天堂| 欧美大片国产精品| 欧美日韩在线综合| 成人av资源站| 国产另类ts人妖一区二区| 日一区二区三区| 一区二区三区视频在线看| 国产日韩一级二级三级| 日韩一区二区三区电影在线观看 | 欧美日韩亚州综合| 92精品国产成人观看免费| 国产一区二区在线看| 亚洲sss视频在线视频| 《视频一区视频二区| 国产精品美女视频| 欧美激情中文字幕| 国产亚洲欧美日韩在线一区| 日韩午夜激情免费电影| 欧美精品九九99久久| 日韩天堂在线观看| 色94色欧美sute亚洲线路一ni | 日本韩国欧美国产| 91一区二区三区在线观看| 国产成人一区在线| 国产在线麻豆精品观看| 韩国精品久久久| 极品少妇xxxx精品少妇偷拍| 国内外精品视频| 黄页视频在线91| 国产福利一区二区三区在线视频| 韩国精品免费视频| 国产福利91精品一区| 国产成人午夜精品影院观看视频| 韩国一区二区视频| 国产成人综合亚洲91猫咪| 国产成人在线影院 | 欧美丝袜丝nylons| 欧美日韩精品综合在线| 4438成人网| 欧美一区中文字幕| 久久久久久99精品| 中文字幕视频一区二区三区久| 亚洲精选视频免费看| 亚洲午夜久久久久久久久久久| 性做久久久久久久免费看| 日韩福利视频网| 国产精品一品视频| 99久久综合色| 欧美性生活大片视频| 日韩三级.com| 国产精品无人区| 一个色妞综合视频在线观看| 日本vs亚洲vs韩国一区三区二区 | 久久精品99国产精品日本| 国产一区二区精品久久91| 成人免费高清在线观看| 欧美丝袜丝nylons| 久久青草欧美一区二区三区| 日韩毛片在线免费观看| 日韩制服丝袜av| 国产成人午夜高潮毛片| 欧美日本一区二区| 国产欧美日产一区| 丝袜亚洲另类欧美| 粉嫩欧美一区二区三区高清影视| 一本色道**综合亚洲精品蜜桃冫| 欧美一区二区三区免费在线看| 国产精品天干天干在线综合| 亚洲一级二级在线| 国产剧情一区二区| 欧美人与禽zozo性伦| 日本一区二区三区免费乱视频 | 中文字幕一区av| 日本视频免费一区| 色婷婷亚洲精品| 久久精品夜色噜噜亚洲aⅴ| 亚洲3atv精品一区二区三区| 东方aⅴ免费观看久久av| 欧美精品aⅴ在线视频| 日韩毛片视频在线看| 国产成人午夜电影网| 欧美一区二区人人喊爽| 一区二区视频在线| 成人av先锋影音| 欧美α欧美αv大片| 亚洲bt欧美bt精品| 日本精品一区二区三区高清 | 91精品国产麻豆国产自产在线| 国产精品系列在线| 国产麻豆欧美日韩一区| 日韩一区二区在线观看视频播放 | 国产人成亚洲第一网站在线播放| 天堂蜜桃91精品| 色综合天天视频在线观看| 国产夜色精品一区二区av| 欧美aaaaaa午夜精品| 欧美亚洲禁片免费| 亚洲区小说区图片区qvod| 国产精品18久久久久| 日韩欧美的一区二区| 日韩黄色小视频| 欧美日本一区二区三区四区| 亚洲一区影音先锋| 色老汉av一区二区三区| 日韩理论在线观看| 99在线精品视频| 亚洲视频你懂的| 99精品视频一区二区三区| 国产精品女主播在线观看| 国产精品69毛片高清亚洲| 久久久久久久久久久99999| 国内精品伊人久久久久av一坑| 2024国产精品| 激情深爱一区二区|