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

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

?? mmc_x_hw.c

?? uc/Fs 236,讓uc/os也支持多種文件系統。
?? C
字號:
/*
**********************************************************************
*                          Micrium, Inc.
*                      949 Crestview Circle
*                     Weston,  FL 33327-1848
*
*                            uC/FS
*
*             (c) Copyright 2001 - 2003, Micrium, Inc.
*                      All rights reserved.
*
***********************************************************************

----------------------------------------------------------------------
File        : mmc_x_hw.c
Purpose     : Sample MMC hardware layer for accessing MMC/SD 
              via port banging.
---------------------------END-OF-HEADER------------------------------
*/

/*********************************************************************
*
*             #include Section
*
**********************************************************************
*/

#include "fs_api.h"
#include "fs_conf.h"

#if FS_USE_MMC_DRIVER

#include "mmc.h"
#include "mmc_x_hw.h"


/*********************************************************************
*
*             #define Macros
*
**********************************************************************
*/

/*********************************************************************
*
*       Configurable macros
*
*   Please setup these macros according your hardware
*
*/

#define SPI_CS_PORT            P1 
#define SPI_CLK_PORT           P2
#define SPI_DATAOUT_PORT       P2
#define SPI_DATAIN_PORT        P4

#define SPI_CS_PIN            1 
#define SPI_CLK_PIN           3
#define SPI_DATAOUT_PIN       7
#define SPI_DATAIN_PIN        2



/*********************************************************************
*
*             #define Macros
*
*/
#define SPI_CLR_CS()          SPI_CS_PORT      &= ~(1 << SPI_CS_PIN)
#define SPI_SET_CS()          SPI_CS_PORT      |=  (1 << SPI_CS_PIN)
#define SPI_CLR_CLK()         SPI_CLK_PORT     &= ~(1 << SPI_CLK_PIN)
#define SPI_SET_CLK()         SPI_CLK_PORT     |=  (1 << SPI_CLK_PIN)
#define SPI_CLR_DATAOUT()     SPI_DATAOUT_PORT &= ~(1 << SPI_DATAOUT_PIN)
#define SPI_SET_DATAOUT()     SPI_DATAOUT_PORT |=  (1 << SPI_DATAOUT_PIN)
#define SPI_DATAIN()          (SPI_DATAIN_PORT &   (1 << SPI_DATAIN_PIN))
#define SPI_DELAY()           { int i=10L; while(i-- != 0); }
#define SPI_SETUP_PINS()


#define MMC_DEFAULTSUPPLYVOLTAGE  3300 /* in mV, example means 3.3V */
#define MMC_MAXFREQUENCY           400 /* 400 KHz                   */

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/
static volatile int _MaxFreq;


/*********************************************************************
*
*             Local functions
*
**********************************************************************
*/


static void _Init(void) {
  _MaxFreq = MMC_MAXFREQUENCY;
  SPI_SETUP_PINS();
}

/*********************************************************************
*
*             FS_MMC_HW_X_BusyLedOff
*
*  Description:
*    FS low level function. Switches the busy LED off.
*
*  Parameters:
*    Unit      - Device Index
*
*  Return value:
*    void
*/
void FS_MMC_HW_X_BusyLedOff (FS_U8 Unit) {
}

/*********************************************************************
*
*             FS_MMC_HW_X_BusyLedOn
*
*  Description:
*    FS low level function. Switches the busy LED off.
*
*  Parameters:
*    Unit      - Device Index
*
*  Return value:
*    void
*/

void FS_MMC_HW_X_BusyLedOn(FS_U8 Unit) {
}

/*********************************************************************
*
*             FS_MMC_HW_X_EnableCS
*
*  Description:
*    FS low level function. Sets the card slot active using the
*    chip select (CS) line.
*
*  Parameters:
*    Unit      - Device Index
*
*  Return value:
*    void
*/

void FS_MMC_HW_X_EnableCS   (FS_U8 Unit) {
  SPI_CLR_CS();
}

/*********************************************************************
*
*             FS_MMC_HW_X_EnableCS
*
*  Description:
*    FS low level function. Sets the card slot inactive using the
*    chip select (CS) line.
*
*  Parameters:
*    Unit      - Device Index
*
*  Return value:
*    void
*/

void FS_MMC_HW_X_DisableCS(FS_U8 Unit) {
  SPI_SET_CS();
}

/*********************************************************************
*
*             FS_MMC_HW_X_IsWriteProtected
*
*  Description:
*    FS low level function. Returns the state of the physical write
*    protection of the SD cards.
*
*  Parameters:
*    Unit      - Device Index
*
*  Return value:
*    1                - the card is write protected
*    ==0              - the card is not write protected
*/

char FS_MMC_HW_X_IsWriteProtected(FS_U8 Unit) {
  /* If the card slot has no write switch detector, return 0 */
  return 0;
}

/*********************************************************************
*
*             FS_MMC_HW_X_SetMaxSpeed
*
*  Description:
*    FS low level function. Sets the SPI interface to a maximum frequency.
*    Make sure that you set the frequency lower or equal but never higher
*    than the given value. Recommended startup frequency is 100kHz - 400kHz.
*
*  Parameters:
*    Unit       - Device Index
*    MaxFreq           - SPI clock frequency in kHz
*
*  Return value:
*    max. frequency    - the maximum frequency set in kHz
*    ==0               - the frequency could not be set
*/

FS_U16 FS_MMC_HW_X_SetMaxSpeed(FS_U8 Unit, FS_U16 MaxFreq) {
  _Init();
  return MMC_MAXFREQUENCY;    /* We are not faster than this */
}

/*********************************************************************
*
*             FS_MMC_HW_X_SetVoltage
*
*  Description:
*    FS low level function. Be sure that your card slot si within the given
*    voltage range. Return 1 if your slot can support the required voltage,
*    and if not, return 0;
*
*  Parameters:
*    Unit      - Device Index
*    MaxFreq          - SPI clock frequency in kHz
*
*  Return value:
*    1                - the card slot supports the voltage range
*    ==0              - the card slot does not support the voltage range
*/

char FS_MMC_HW_X_SetVoltage(FS_U8 Unit, FS_U16 Vmin, FS_U16 Vmax) {
  /* voltage range check */
  char r;
  if((Vmin <= MMC_DEFAULTSUPPLYVOLTAGE) && (Vmax >= MMC_DEFAULTSUPPLYVOLTAGE)) {
    r = 1;
  } else {
    r = 0;
  }
  return r;
}

/*********************************************************************
*
*             FS_MMC_HW_X_IsPresent
*
*  Description:
*    Returns the state of the media. If you do not know the state, return
*    FS_MEDIA_STATEUNKNOWN and the higher layer will try to figure out if
*    a media is present.
*
*  Parameters:
*    Unit                 - Device Index
*
*  Return value:
*    FS_MEDIA_STATEUNKNOWN       - the state of the media is unkown
*    FS_MEDIA_ISNOTPRESENT       - no card is present
*    FS_MEDIA_ISPRESENT          - a card is present
*/

char FS_MMC_HW_X_IsPresent(FS_U8 Unit) {
  return FS_MEDIA_STATEUNKNOWN;
}

/*********************************************************************
*
*             FS_MMC_HW_X_Read
*
*  Description:
*    FS low level function. Reads a specified number of bytes from MMC
*    card to buffer.
*
*  Parameters:
*    Unit      - Device Index
*    pData            - Pointer to a data buffer
*    NumBytes         - Number of bytes
*
*  Return value:
*    void
*/

void FS_MMC_HW_X_Read (FS_U8 Unit, FS_U8 * pData, int NumBytes) {
  FS_U8 bpos;
  FS_U8 c;
  SPI_SET_DATAOUT();
  if (_MaxFreq < 100) {
    /* Slow version */
    do {
      c = 0;
      bpos = 8; /* get 8 bits */
      do {
        SPI_CLR_CLK();
        SPI_DELAY();
        c <<= 1;
        if (SPI_DATAIN()) {
          c |= 1;
        }
        SPI_SET_CLK();
        SPI_DELAY();
      } while (--bpos);
      *pData++ = c;
    } while (--NumBytes);
  } else {
    /* Faster version */
    do {
      c = 0;
      bpos = 8; /* get 8 bits */
      do {
        SPI_CLR_CLK();
        c <<= 1;
        if (SPI_DATAIN()) {
          c |= 1;
        }
        SPI_SET_CLK();
      } while (--bpos);
      *pData++ = c;
    } while (--NumBytes);
  }
}

/*********************************************************************
*
*             FS_MMC_HW_X_Write
*
*  Description:
*    FS low level function. Writes a specified number of bytes from
*    data buffer to the MMC/SD card.
*
*  Parameters:
*    Unit      - Device Index
*    pData            - Pointer to a data buffer
*    NumBytes         - Number of bytes
*
*  Return value:
*    void
*/

void FS_MMC_HW_X_Write(FS_U8 Unit, const FS_U8 * pData, int NumBytes) {
  int i;
  FS_U8 mask;
  FS_U8 data;
  for (i = 0; i < NumBytes; i++) {
    data = pData[i];
    mask = 0x80;
    while (mask) {
      if (data & mask) {
        SPI_SET_DATAOUT();
      } else {
        SPI_CLR_DATAOUT();
      }
      SPI_CLR_CLK();
      SPI_DELAY();
      SPI_SET_CLK();
      SPI_DELAY();
      mask >>= 1;
    }
  }
  SPI_SET_DATAOUT(); /* default state of data line is high */
}

#endif /* FS_USE_MMC_DRIVER */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品二十页| 欧美电影免费提供在线观看| 国产精品久久久久久久久搜平片| 亚洲婷婷综合久久一本伊一区| 欧美美女激情18p| 在线欧美日韩精品| 亚洲欧洲成人av每日更新| 成人av在线影院| 国产精品美女久久久久久| 成人avav影音| 亚洲成人资源网| 欧美日产在线观看| 狠狠色综合色综合网络| 国产日本亚洲高清| 色综合久久综合网97色综合| 亚洲成人av资源| 久久亚洲捆绑美女| 91在线观看美女| 天堂一区二区在线| 欧美激情一区二区三区蜜桃视频| 日韩国产一区二| 久久久国产综合精品女国产盗摄| 亚洲高清免费视频| 日韩欧美中文一区| 成人免费看黄yyy456| 亚洲香蕉伊在人在线观| 精品国产伦一区二区三区免费| 一区二区三区久久久| 欧美日韩国产小视频在线观看| 国产精品乱子久久久久| 欧美精品在线观看播放| 国产美女精品在线| 亚洲免费大片在线观看| 国产精品久久午夜| 亚洲自拍偷拍网站| 欧美精品一区二区三区四区| 日本久久一区二区| 麻豆一区二区99久久久久| 国产精品毛片久久久久久| 777欧美精品| 97久久精品人人爽人人爽蜜臀 | 成人三级在线视频| 亚洲成人免费av| 国产欧美日韩卡一| 欧美日韩精品一区二区| 丁香另类激情小说| 美国精品在线观看| 精品av综合导航| 欧美日韩精品系列| 99久久99久久综合| 狠狠色丁香久久婷婷综合丁香| 日韩女优毛片在线| 在线观看精品一区| 成人性色生活片| 免费av网站大全久久| 亚洲精品乱码久久久久久黑人| 91亚洲大成网污www| 国产乱码精品1区2区3区| 亚洲一区二区三区精品在线| 国产婷婷一区二区| 精品国产91洋老外米糕| 欧美午夜一区二区三区免费大片| 欧美午夜精品免费| 91在线免费视频观看| 国产精品一线二线三线| 日韩精品乱码av一区二区| 中文字幕一区二区日韩精品绯色| 91电影在线观看| 成人午夜电影网站| 国产激情精品久久久第一区二区| 国产精品国产三级国产| 欧美剧情片在线观看| 色欧美日韩亚洲| 国产资源在线一区| 人人精品人人爱| 视频一区欧美精品| 日韩中文欧美在线| 日本午夜精品一区二区三区电影| 久久精品一二三| 精品少妇一区二区三区在线播放| 国产伦精品一区二区三区视频青涩 | 欧美一区二区三区人| 欧美日韩免费高清一区色橹橹| 美女在线一区二区| 看电视剧不卡顿的网站| 日韩高清电影一区| 蜜桃av一区二区在线观看| 美女视频黄免费的久久| 成人免费毛片片v| 亚洲欧洲日产国码二区| 最新不卡av在线| 一区二区三区四区精品在线视频| 4438x成人网最大色成网站| 欧美精品777| 欧美电影免费观看完整版| 久久精品一区二区| 久久久久国产精品厨房| 国产女人18水真多18精品一级做| 欧美日韩国产乱码电影| 91精品在线免费| 欧美精品一区二区三区久久久| av午夜一区麻豆| 91老师国产黑色丝袜在线| 欧美日韩视频在线一区二区| 欧美日韩mp4| 2023国产精华国产精品| 精品国产一区二区三区忘忧草| 在线国产亚洲欧美| 欧美一区二区三区性视频| 在线播放91灌醉迷j高跟美女| 99国产精品久久久久久久久久| 亚洲电影在线播放| 国产一区二区三区黄视频 | 欧美日韩综合在线免费观看| 欧美日韩免费电影| 一本到高清视频免费精品| 国产成人综合在线| 91蜜桃在线免费视频| 欧美一级片免费看| 国产精品成人网| 日本va欧美va瓶| 99精品欧美一区二区蜜桃免费| 激情深爱一区二区| 99久久99久久精品免费看蜜桃| 九色综合狠狠综合久久| 99精品在线免费| 日韩欧美激情一区| 亚洲乱码国产乱码精品精的特点 | 日本中文字幕不卡| 成人激情校园春色| 日韩欧美成人午夜| 亚洲精品一二三| 日韩成人免费在线| 白白色亚洲国产精品| 日韩视频免费观看高清完整版| 555夜色666亚洲国产免| 国产日韩精品一区| 日本不卡一区二区三区高清视频| 午夜av一区二区| 99精品国产99久久久久久白柏| 高清在线不卡av| 日韩欧美亚洲一区二区| 亚洲曰韩产成在线| 成人精品国产福利| 国产精品麻豆网站| 欧美精品一区二区三区久久久| 欧美日韩国产高清一区二区三区| 欧美三级一区二区| 国产三级三级三级精品8ⅰ区| 国产欧美视频在线观看| 午夜视黄欧洲亚洲| 色哟哟国产精品| 国产精品国产三级国产普通话99| 亚洲女厕所小便bbb| 豆国产96在线|亚洲| 亚洲精品在线免费观看视频| 天使萌一区二区三区免费观看| 日本不卡中文字幕| 欧美色成人综合| 亚洲人成网站在线| 丰满岳乱妇一区二区三区| 2020国产成人综合网| 久久福利资源站| 日韩一区二区三区在线观看| 依依成人精品视频| 色欧美乱欧美15图片| 一区二区在线观看免费 | 日韩欧美中文一区二区| 秋霞电影网一区二区| 色综合久久综合中文综合网| 综合自拍亚洲综合图不卡区| 成人免费观看视频| 国产精品理论片在线观看| 国产成人a级片| 国产精品丝袜一区| 成人激情文学综合网| 亚洲欧美在线另类| 在线精品视频免费播放| 精品福利在线导航| 毛片av中文字幕一区二区| 日韩午夜电影av| 精品一区二区三区免费播放| 久久综合久久综合九色| 国产成人免费av在线| 中文成人综合网| www.99精品| 亚洲欧美激情一区二区| 欧美性大战xxxxx久久久| 热久久国产精品| 精品免费一区二区三区| 国产一区不卡精品| 国产精品日韩成人| 欧美视频你懂的| 久久er99精品| 国产精品网站在线观看| 欧美又粗又大又爽| 麻豆精品一区二区综合av| 中文字幕欧美三区| 欧美日韩一区视频| 精品一区二区免费在线观看|