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

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

?? mmc_drv.c

?? 該源碼是基于atmel公司的89C51SND1C的mp3解決方案
?? 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一区二区三区免费野_久草精品视频
亚洲a一区二区| 国产福利一区二区| 国产九色精品成人porny | 精品国产免费一区二区三区香蕉 | 欧美一区二区日韩一区二区| 欧美激情在线一区二区| 亚洲成人精品影院| 99久久99久久久精品齐齐| 日韩精品资源二区在线| 亚洲国产综合色| 91丝袜国产在线播放| 久久老女人爱爱| 日韩av电影天堂| 欧美日韩一区在线观看| 亚洲三级久久久| eeuss国产一区二区三区| 欧美xxxxx牲另类人与| 丝袜亚洲另类欧美综合| 欧美在线三级电影| 亚洲精品高清视频在线观看| 99re成人精品视频| 国产精品丝袜一区| 国产一区二区三区不卡在线观看| 欧美一二区视频| 免费在线看一区| 日韩一区二区免费视频| 视频一区视频二区中文| 欧美日韩1区2区| 亚洲1区2区3区视频| 欧美日韩国产一级片| 国产精华液一区二区三区| 日韩美女视频在线| 国产在线国偷精品免费看| 精品久久久久久综合日本欧美| 免费观看久久久4p| 日韩欧美在线影院| 国产一区二区三区电影在线观看| 久久久久久亚洲综合影院红桃| 狠狠色综合色综合网络| 久久在线观看免费| 成人午夜在线视频| 亚洲精品国产成人久久av盗摄| 91亚洲精品一区二区乱码| 亚洲精品日韩一| 欧美日韩国产一区| 国精品**一区二区三区在线蜜桃| 久久久久国产一区二区三区四区| 国产美女av一区二区三区| 国产拍欧美日韩视频二区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 不卡电影免费在线播放一区| 中文字幕亚洲一区二区av在线| 91老师片黄在线观看| 五月天一区二区三区| 精品国产污污免费网站入口 | 国产98色在线|日韩| 国产精品久久久久久久久图文区 | 不卡一区二区在线| 亚洲欧美另类综合偷拍| 欧美乱妇15p| 国产真实乱对白精彩久久| 国产精品久久久久久户外露出| 在线一区二区三区四区五区| 久久99深爱久久99精品| 国产精品免费久久久久| 欧美羞羞免费网站| 国内精品久久久久影院色| 中文字幕不卡在线播放| 欧美日韩国产不卡| 国产成人精品免费在线| 亚洲高清免费一级二级三级| 26uuu亚洲综合色| 欧美亚洲国产怡红院影院| 免费观看一级特黄欧美大片| 国产精品成人网| 日韩一区二区三区在线观看| 99在线视频精品| 久久成人免费网站| 一区二区高清在线| 久久久久久久久久久久久久久99 | 国产一区91精品张津瑜| 亚洲欧美另类在线| 国产亚洲欧洲997久久综合 | 精品99久久久久久| 欧美在线一二三四区| 国产成人av电影在线| 天堂成人免费av电影一区| 自拍偷拍亚洲欧美日韩| 久久综合资源网| 欧美日韩一区二区在线视频| 99久久精品免费看国产免费软件| 久久99精品国产麻豆不卡| 亚洲一区二区三区爽爽爽爽爽 | 久久综合久久鬼色| 欧美人体做爰大胆视频| 色综合久久久久久久久| 懂色av一区二区三区免费看| 日本不卡一二三区黄网| 图片区日韩欧美亚洲| 亚洲精品视频在线观看网站| 国产精品嫩草影院av蜜臀| 久久久久国产一区二区三区四区| 日韩一区二区在线看| 欧美精三区欧美精三区| 欧美午夜影院一区| 91蝌蚪porny| 91在线免费播放| 99国产精品久久久久久久久久 | 日韩三级免费观看| 91精品国产黑色紧身裤美女| 欧美日韩大陆在线| 欧洲精品在线观看| 欧美亚洲综合网| 色婷婷av一区| 欧美日韩综合不卡| 欧美视频一区二区三区| 欧美日韩中文一区| 在线播放日韩导航| 欧美一区二区三区电影| 精品va天堂亚洲国产| 国产女主播在线一区二区| 中日韩av电影| 亚洲三级电影网站| 亚洲精品伦理在线| 五月婷婷久久丁香| 久久se精品一区二区| 国产精品资源网| 99在线热播精品免费| 91久久免费观看| 欧美日韩国产另类不卡| 日韩三级电影网址| 国产欧美一区二区三区在线看蜜臀 | 欧美影片第一页| 7777精品伊人久久久大香线蕉的 | 欧美国产日韩亚洲一区| 亚洲欧美日韩综合aⅴ视频| 一区二区三区精密机械公司| 午夜精品久久久久| 久久爱www久久做| 99久久精品国产一区二区三区| 在线亚洲人成电影网站色www| 欧美伊人久久久久久午夜久久久久| 欧美日韩精品免费观看视频| 欧美一级日韩免费不卡| 久久久不卡网国产精品二区| 自拍偷在线精品自拍偷无码专区| 亚洲香蕉伊在人在线观| 精品亚洲porn| 91在线精品一区二区| 正在播放亚洲一区| 中文字幕巨乱亚洲| 婷婷夜色潮精品综合在线| 国产美女视频一区| 欧美视频一区在线| 久久久久97国产精华液好用吗| 一个色妞综合视频在线观看| 久久 天天综合| 在线观看网站黄不卡| 欧美精品一区二区三区蜜臀 | 精品一区二区精品| 色婷婷av一区二区三区软件| 久久久国产精华| 午夜精品成人在线| 成年人国产精品| 2023国产精华国产精品| 亚洲成人综合网站| av中文字幕一区| 精品播放一区二区| 日日夜夜免费精品| 成人黄色av电影| 精品福利一二区| 日产国产欧美视频一区精品| 日韩精品一区二区三区视频在线观看 | 一区二区三区中文字幕| 国产精品456| 欧美xxxxxxxx| 亚洲成av人在线观看| 91免费国产在线| 国产清纯在线一区二区www| 裸体一区二区三区| 在线观看91av| 天堂一区二区在线| 在线观看欧美精品| 日韩久久一区二区| 成人午夜电影网站| 日本一区二区视频在线观看| 麻豆一区二区在线| 欧美一级高清大全免费观看| 亚洲国产精品久久久男人的天堂| 99久久综合国产精品| 中文字幕乱码久久午夜不卡| 国产乱码精品一区二区三区av | 国产大陆精品国产| 精品国产伦一区二区三区免费 | 中文字幕一区二区三区色视频| 国产一区不卡视频| 国产欧美综合在线| 成人免费看的视频| 国产精品久久久久影院色老大 | av在线这里只有精品|