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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mmc_drv.c

?? 單片機(jī)學(xué)習(xí)資料主要講述MP3開發(fā) 適合初學(xué)者進(jìn)行開發(fā)學(xué)習(xí)
?? C
字號(hào):
/*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;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人福利视频| 久久久精品综合| 国产成人精品免费视频网站| 亚洲在线中文字幕| 国产日韩精品一区二区浪潮av| 欧美无砖砖区免费| 成人黄色免费短视频| 日韩影院精彩在线| 中文字幕在线一区免费| 久久综合九色综合97_久久久| 欧美体内she精高潮| 成人av午夜电影| 国产一区二三区| 久热成人在线视频| 午夜久久久影院| 亚洲资源中文字幕| 亚洲情趣在线观看| 欧美激情综合五月色丁香| 精品国产乱码久久久久久图片 | 亚洲一区二区三区四区在线观看| 久久精品视频免费观看| 91精品国产黑色紧身裤美女| 色av成人天堂桃色av| av在线综合网| 高清在线不卡av| 老司机精品视频一区二区三区| 天堂蜜桃91精品| 午夜精品免费在线| 亚洲一区中文日韩| 亚洲午夜久久久| 亚洲精品免费在线观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 久久蜜臀中文字幕| 26uuu久久天堂性欧美| 欧美一区日本一区韩国一区| 欧美久久久久久久久久| 欧美精品少妇一区二区三区| 欧美伦理影视网| 欧美日韩三级一区二区| 欧美日韩精品一区视频| 欧美日韩黄视频| 欧美日韩精品免费| 欧美猛男gaygay网站| 69堂国产成人免费视频| 91麻豆精品国产91久久久使用方法| 欧美日韩一区中文字幕| 欧美日韩电影在线播放| 欧美一区二区三区在线电影| 欧美精品在欧美一区二区少妇| 欧美日韩你懂得| 日韩午夜三级在线| 26uuu亚洲综合色| 国产精品视频免费| 亚洲欧美日韩国产另类专区| 亚洲午夜在线电影| 日韩二区三区四区| 91在线免费视频观看| 99精品热视频| 欧美亚洲综合一区| 欧美一级欧美三级在线观看| 精品成人一区二区三区| 欧美国产一区二区在线观看| 一区二区三区不卡视频在线观看| 亚洲v日本v欧美v久久精品| 免费观看日韩电影| 国产精品一区二区久久不卡| 91丨porny丨最新| 在线成人av网站| 久久久精品黄色| 亚洲美腿欧美偷拍| 日本美女一区二区三区| 国产福利一区二区三区在线视频| 色呦呦网站一区| 日韩欧美国产1| 国产精品毛片无遮挡高清| 亚洲第一福利一区| 国产最新精品免费| 91久久精品网| 26uuu国产一区二区三区| 亚洲视频小说图片| 免费成人美女在线观看.| 成人激情图片网| 制服丝袜中文字幕亚洲| 国产精品美女久久久久久久网站| 午夜免费欧美电影| www.成人在线| 91精品国产综合久久精品| 国产精品短视频| 久久国产精品99久久人人澡| 91在线porny国产在线看| 91精品国产综合久久久久久漫画| 国产精品无圣光一区二区| 天堂蜜桃一区二区三区| 欧美疯狂做受xxxx富婆| 久久久激情视频| 午夜精品福利在线| 成人av综合在线| www激情久久| 婷婷夜色潮精品综合在线| www.视频一区| 久久久五月婷婷| 免费成人av资源网| 欧美性xxxxxxxx| 亚洲图片激情小说| 国产老妇另类xxxxx| 欧美日韩aaa| 亚洲理论在线观看| 国产成人精品免费| 日韩欧美一区在线| 午夜日韩在线电影| 91国偷自产一区二区三区成为亚洲经典| 精品成人在线观看| 日本不卡不码高清免费观看| 在线精品视频小说1| 亚洲欧美在线观看| 国产91高潮流白浆在线麻豆 | 91在线云播放| 久久久高清一区二区三区| 蜜桃在线一区二区三区| 欧美日韩激情一区二区三区| 亚洲一区二区成人在线观看| 99久久精品久久久久久清纯| 国产日韩欧美不卡| 国产宾馆实践打屁股91| 久久久亚洲精品一区二区三区 | 亚洲在线视频一区| 99re热视频精品| 国产精品午夜免费| 懂色一区二区三区免费观看| 久久久综合网站| 国产一区二区三区免费播放| 欧美成人午夜电影| 精品一区二区三区在线观看| 精品国产乱码久久久久久浪潮| 久久精品国产精品亚洲红杏| 精品国产免费一区二区三区香蕉| 久久精品国产一区二区三区免费看| 91精品午夜视频| 老汉av免费一区二区三区| 日韩欧美成人午夜| 久久精品国产精品亚洲综合| 亚洲日本乱码在线观看| 97se狠狠狠综合亚洲狠狠| 亚洲欧美国产77777| 91极品美女在线| 亚洲va在线va天堂| 91精品国产色综合久久| 捆绑调教一区二区三区| 国产亚洲精品7777| av不卡免费电影| 亚洲综合色丁香婷婷六月图片| 欧美狂野另类xxxxoooo| 久久狠狠亚洲综合| 久久久久国产精品厨房| 波多野洁衣一区| 亚洲裸体xxx| 3d动漫精品啪啪| 国产精品18久久久| 亚洲日本va午夜在线电影| 欧美图区在线视频| 裸体歌舞表演一区二区| 国产精品午夜在线| 欧美日韩一级片网站| 久久国产精品99久久人人澡| 国产精品亲子乱子伦xxxx裸| 欧美亚洲国产一区在线观看网站 | 亚洲丶国产丶欧美一区二区三区| 欧美一级爆毛片| 成人一区二区三区视频在线观看| 一区二区三区在线观看国产| 欧美男女性生活在线直播观看| 精品在线一区二区三区| 中文字幕欧美一区| 91精品欧美久久久久久动漫| 国产自产v一区二区三区c| 亚洲蜜臀av乱码久久精品 | 91精品在线观看入口| 国产成人小视频| 偷拍与自拍一区| 国产精品免费久久| 久久噜噜亚洲综合| 色综合视频在线观看| 九九在线精品视频| 亚洲一级二级在线| 国产日本亚洲高清| 91精品欧美综合在线观看最新| 99久久综合99久久综合网站| 麻豆免费精品视频| 一区二区三区中文字幕电影| 久久久久久亚洲综合影院红桃| 欧美在线视频不卡| 国产很黄免费观看久久| 亚洲高清在线精品| 国产精品理论在线观看| 日韩三级中文字幕| 欧美性大战久久久| 99久久久精品| 国产成人在线视频网址| 美国av一区二区| 亚洲午夜av在线|