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

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

?? sdspihal.c

?? 基于lpc2378的SD/MMC卡讀寫程序
?? C
字號:
/****************************************Copyright (c)**************************************************
**                               Guangzhou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			sdspihal.c
** Last modified Date:	2007-07-08
** Last Version:		V3.0
** Descriptions:		SD/MMC卡讀寫軟件包: 硬件抽象層 -- SPI模式
**
**
**------------------------------------------------------------------------------------------------------
** Created by:			Ming Yuan Zheng
** Created date:		2005-1-6
** Version:				V1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Ming Yuan Zheng	
** Modified date:		2007-07-08
** Version:				V3.0
** Descriptions:		1. 將SPI_Clk400k()和SPI_ClkToMax()兩函數合并為一個函數SdSpiHal_SetMCIClock()
**                      2. 多數函數名以  SdSpiHal_ 作為開頭
**						3. 增加對多卡的支持
**------------------------------------------------------------------------------------------------------
** Modified by: 
** Modified date:
** Version:	
** Descriptions: 
**
********************************************************************************************************/


#include "sdconfig.h"

#if (!SDBUS_MODE_EN)

	/***************************************************************************
		
		讀寫SD/MMC卡的SPI接口函數: SPI 初始化, SPI時鐘設置, 發送/接收字節函數	
	
	***************************************************************************/


/*******************************************************************************************************************
** 函數名稱: SD_Power()				
**
** 功能描述: 對卡先下電,再上電	
**
** 輸   入: 無
**							  	
** 輸   出: 無
**
** 返 回 值: 無
********************************************************************************************************************/
void SD_Power(void)
{
	INT32U i;

	SD_POWER_GPIO();
	SD_POWER_OUT();
	SD_POWER_OFF();								/* 關閉 SD 卡電源  turn off power of sd card */
	
	SPI_SCK_GPIO();	
	SPI_SCK_OUT();
	SPI_SCK_CLR();								/* SCK  引腳置低   set SCK to zero */
	
	SPI_MISO_GPIO();
	SPI_MISO_OUT();
	SPI_MISO_CLR();								/* MISO 引腳置低   set MISO to zero */
	
	SPI_MOSI_GPIO();		
	SPI_MOSI_OUT();
	SPI_MOSI_CLR();								/* MOSI 引腳置低   set MOSI to zero */
	
	SPI_CS_GPIO();								
   	SPI_CS_OUT();								
	SPI_CS_CLR();								/* CS 引腳置低	   set CS to zero */
		
	for(i = 0; i < 0x9000; i++);				/* 關閉電源延時    delay after turn off power of sd card */
	SD_POWER_ON();								/* 打開 SD 卡電源  turn on power of sd card */
}


/*******************************************************************************************************************
** 函數名稱: SdSpiHal_Initialize()				
**
** 功能描述: 初始化訪問卡的硬件條件		
**
** 輸   入: sd_struct *sds:  卡信息結構體, 該函數僅可使用sds->card_posnum成員用于區分卡座編號
**							  	
** 輸   出: 無
**
** 返 回 值: 0:   正確    >0:   錯誤碼, 見 sddriver.h 文件
**
** 主要工作: 1. 先給卡下電, 再給卡上電;              2. 設置訪問卡的速度小于或等于 400KHz;
** 
**           3. 初始化相關硬件寄存器為適當的狀態     4. 初始化SPI控制器
********************************************************************************************************************/
INT8U SdSpiHal_Initialize(sd_struct *sds)
{ 
	SD_Power();									/* 對卡先下電,再上電 */
	
	SPI_INIT();									/* 初始化SPI接口     */	
	
	SD_INSERT_GPIO();
	SD_INSERT_IN();								/* 檢測卡完全插入口為輸入口 */
	
	SD_WP_GPIO();								
	SD_WP_IN();									/* 寫保護檢測口為輸入口 */	
		   
   	SPI_CS_SET();								/* CS置高 */

 	SdSpiHal_SetMCIClock(sds, SD_RATE_SLOW); 	/* 設置SPI頻率小于等于400kHZ */
   
 	S0SPCR = (0x00 << 4) + (0x01 << 5);		    /* 設置SPI接口模式, MSTR = 1,CPOL = 1,CPHA = 0,LSBF=0 */

	return SD_NO_ERR;
}												


/*******************************************************************************************************************
** 函數名稱: SdSpiHal_SetMCIClock()				
**
** 功能描述: 設置讀寫SD/MMC卡時鐘		
**
** 輸   入: sd_struct *sds  :  卡信息結構體, 該函數僅可使用sds->card_posnum成員用于區分卡座編號
**           INT32U ClockRate:	要求的時鐘速度.  取值SD_RATE_SLOW   時, 設置訪問卡速度小于 400KHz		
**			  	                                 取值SD_RATE_NORMAL 時, 設置訪問卡速度為卡的最大速度或主控器的最大速度
** 輸   出: 無
**
** 返 回 值: 0:   正確    >0:   錯誤碼, 見 sddriver.h 文件
**
** 注    意: 本函數有責任在ClockRate取不同的值時, 計算出相應的 sds->clkval 值, 必須大于0. 
**
********************************************************************************************************************/
void SdSpiHal_SetMCIClock(sd_struct *sds, INT32U ClockRate)
{
   	if (ClockRate == SD_RATE_SLOW)
	{
		S0SPCCR = 128;    							/* 設置SPI時鐘分頻值為128 */
		sds->host_clkval = Fpclk / 128;
	}
	else if (ClockRate == SD_RATE_NORMAL) 
	{
		S0SPCCR = 8;								/* 設置SPI時鐘分頻值為8 */
		sds->host_clkval = Fpclk / 8;    				
	}
}


/*******************************************************************************************************************
** 函數名稱: SdSpiHal_SendByte()				
**
** 功能描述: 通過SPI控制器發送一個字節到卡		
**
** 輸   入: sd_struct *sds  : 卡信息結構體, 該函數僅可使用sds->card_posnum成員用于區分卡座編號
**			 INT8U byte      : 發送的字節		
**           		
** 輸   出: 無
**
** 返 回 值: 無
********************************************************************************************************************/
void SdSpiHal_SendByte(sd_struct *sds, INT8U byte)
{
	INT8U temp;

	S0SPDR = byte;							/* 發送數據放入SPI數據寄存器 */
   
	while(0 == (S0SPSR & 0x80));				/* 等待SPIF置位,即等待數據發送完畢 */
												/* wait for SPIF being set, that is, wait for finishing of data being send */
 	temp = S0SPDR;
}


/*******************************************************************************************************************
** 函數名稱: SdSpiHal_RecByte()				
**
** 功能描述: 通過SPI控制器從卡接收一個字節		
**
** 輸   入: sd_struct *sds  : 卡信息結構體, 該函數僅可使用sds->card_posnum成員用于區分卡座編號
**           		
** 輸   出: 無
**
** 返 回 值: 收到的字節
********************************************************************************************************************/
INT8U SdSpiHal_RecByte(sd_struct *sds)
{
	S0SPDR = 0xFF;
   
 	while(0 == (S0SPSR & 0x80));				/* 等待SPIF置位,即等待收到數據 */
												/* wait for SPIF being set, that is, wait for being received data */
	return(S0SPDR); 							/* 讀取收到的字節 read the byte received */
}


/*******************************************************************************************************************
** 函數名稱: SdSpiHal_CSAssert()				
**
** 功能描述: 通過SPI的CS引腳選擇卡		
**
** 輸   入: sd_struct *sds  : 卡信息結構體, 該函數僅可使用sds->card_posnum成員用于區分卡座編號
**           		
** 輸   出: 無
**
** 返 回 值: 無
********************************************************************************************************************/
void SdSpiHal_CSAssert(sd_struct *sds)
{
	SPI_CS_CLR();			   					/* 片選SPI從機  select the SPI slave */  
}


/*******************************************************************************************************************
** 函數名稱: SdSpiHal_CSDeassert()				
**
** 功能描述: 通過SPI的CS引腳不選擇卡		
**
** 輸   入: sd_struct *sds  : 卡信息結構體, 該函數僅可使用sds->card_posnum成員用于區分卡座編號
**           		
** 輸   出: 無
**
** 返 回 值: 無
********************************************************************************************************************/
void SdSpiHal_CSDeassert(sd_struct *sds)
{
	SPI_CS_SET();			    				/* 不片選SPI從機  not select the SPI slave */
}


/*******************************************************************************************************************
** 函數名稱: SdHal_CheckCard()				
**
** 功能描述: 檢測卡是否完全插入卡座中
**
** 輸   入: sd_struct *sds:  卡信息結構體, 該函數僅可使用sds->card_posnum成員用于區分卡座編號
**	         
** 輸   出: 無
**
** 返 回 值: 1: 卡完全插入	   0: 卡沒有完全插入
********************************************************************************************************************/
INT8U SdHal_CheckCard(sd_struct *sds)
{
	if (SD_INSERT_STATUS() != 0)
		return 0;								/* 未完全插入 not insert entirely */
	else
		return 1;								/* 完全插入 insert entirely */
}


/*******************************************************************************************************************
** 函數名稱: SdHal_CheckCardWP()				
**
** 功能描述: 檢測卡寫保護
**
** 輸   入: sd_struct *sds:  卡信息結構體, 該函數僅可使用sds->card_posnum成員用于區分卡座編號
**	         
** 輸   出: 無
**
** 返 回 值: 1: 卡已寫保護	  0: 卡未寫保護
********************************************************************************************************************/
INT8U SdHal_CheckCardWP(sd_struct *sds)
{
	if (SD_WP_STATUS() != 0)
		return 1;								/* 卡寫保護 */
	else
		return 0;								/* 卡未寫保護 */
}

#endif



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线一区二区三区做爰视频网站| 午夜天堂影视香蕉久久| 日韩一级视频免费观看在线| 一本一本大道香蕉久在线精品 | 91精品国产色综合久久ai换脸| 色哦色哦哦色天天综合| 色综合久久综合| 色老头久久综合| 色素色在线综合| 欧美日韩亚洲综合一区二区三区| 在线精品视频一区二区三四| 欧美最新大片在线看 | 亚洲一区二区视频在线| 亚洲主播在线播放| 五月天精品一区二区三区| 日韩电影免费在线| 韩日精品视频一区| 国产91精品一区二区| 97精品电影院| 欧美亚洲一区三区| 日韩欧美一区二区三区在线| 精品国产乱码久久久久久影片| 欧美激情资源网| 一区二区三区成人| 日本伊人色综合网| 久久91精品久久久久久秒播| 国产成人免费高清| 欧洲生活片亚洲生活在线观看| 欧美日韩国产美女| 国产三级精品在线| 亚洲女与黑人做爰| 日韩av一二三| av一二三不卡影片| 337p亚洲精品色噜噜噜| 国产日韩欧美综合一区| 亚洲一区二区三区在线| 极品少妇一区二区| 91福利国产精品| 精品sm捆绑视频| 亚洲综合色丁香婷婷六月图片| 六月婷婷色综合| 色哟哟国产精品| 久久亚洲精品国产精品紫薇| 一区二区在线观看免费| 韩国理伦片一区二区三区在线播放 | 国产精品午夜久久| 天天综合网 天天综合色| 国产成人在线看| 91精品国产一区二区三区蜜臀 | 国产suv精品一区二区883| 色综合亚洲欧洲| 久久综合精品国产一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ四虎| 成人午夜视频在线| 日韩色在线观看| 亚洲自拍另类综合| av不卡在线播放| 久久久久久久久久久黄色| 午夜欧美在线一二页| 99视频一区二区| 久久久久久久久伊人| 日韩电影在线一区二区三区| 在线影院国内精品| 亚洲精品视频免费观看| 成人黄色电影在线| 国产欧美中文在线| 国产尤物一区二区在线| 91精品免费观看| 午夜精品久久久久久久99水蜜桃| 91欧美一区二区| 中文字幕视频一区二区三区久| 国模套图日韩精品一区二区 | 奇米影视在线99精品| 欧美性猛交xxxx乱大交退制版| 国产精品美女久久久久av爽李琼| 国产在线精品一区二区不卡了| 91麻豆精品91久久久久久清纯 | 日本欧美在线看| 欧美日本精品一区二区三区| 亚洲一卡二卡三卡四卡五卡| 色哟哟亚洲精品| 亚洲综合色噜噜狠狠| 欧美在线高清视频| 亚洲一区二区精品久久av| 91极品视觉盛宴| 性久久久久久久久| 日韩西西人体444www| 久久激情五月婷婷| 久久综合九色综合欧美亚洲| 成人一区二区三区中文字幕| 《视频一区视频二区| 91国产免费看| 天堂影院一区二区| 精品嫩草影院久久| 成人一级视频在线观看| 国产精品国产自产拍高清av王其| 色欲综合视频天天天| 午夜影视日本亚洲欧洲精品| 91精品国产综合久久精品app| 久久精品国产色蜜蜜麻豆| 久久久久综合网| 91视频免费看| 日韩影视精彩在线| 日韩精品一区国产麻豆| 国产成人av一区| 一区二区三区 在线观看视频| 欧美日韩一区中文字幕| 久久国产麻豆精品| 亚洲欧洲色图综合| 欧美最猛性xxxxx直播| 麻豆久久一区二区| 成人免费视频在线观看| 欧美少妇性性性| 国产很黄免费观看久久| 亚洲嫩草精品久久| 日韩欧美国产小视频| 91免费看`日韩一区二区| 免费观看一级特黄欧美大片| 国产精品传媒入口麻豆| 91精品国产综合久久精品图片| 成人午夜激情片| 秋霞午夜av一区二区三区| 国产精品成人一区二区艾草| 欧美sm美女调教| 欧美午夜精品久久久久久孕妇 | 国产精品日韩成人| 欧美一区日韩一区| 91在线观看下载| 国产精品一区二区久激情瑜伽| 亚洲一区在线观看网站| 亚洲国产高清在线| 欧美一区二区三区在线观看视频| 99久久精品情趣| 国模无码大尺度一区二区三区| 午夜激情一区二区三区| 亚洲精品视频在线| 国产精品人人做人人爽人人添| 日韩一区二区在线看片| 欧美三级日本三级少妇99| 99re8在线精品视频免费播放| 国产在线精品国自产拍免费| 蜜臀av一区二区三区| 日韩国产欧美在线观看| 亚洲午夜久久久久久久久久久| 中文字幕视频一区| 国产精品午夜久久| 中文字幕不卡三区| 欧美激情综合五月色丁香| 欧美精品一区二区三区在线| 欧美一区二视频| 欧美一区二区三区在线观看视频| 欧美视频一二三区| 欧美在线观看一二区| 日本丰满少妇一区二区三区| 欧美日韩国产一二三| 91在线一区二区| 91美女视频网站| 色综合久久久网| 99久免费精品视频在线观看| 成人免费高清在线观看| 不卡视频在线看| 91在线国产福利| 欧美怡红院视频| 欧美一级片在线看| 精品国偷自产国产一区| 亚洲精品一区二区三区香蕉| 久久综合久色欧美综合狠狠| 国产午夜精品一区二区三区视频| 国产日韩欧美在线一区| 中文字幕中文字幕在线一区| 亚洲视频在线观看三级| 亚洲丰满少妇videoshd| 日韩va欧美va亚洲va久久| 久草热8精品视频在线观看| 国产精品综合在线视频| 97精品视频在线观看自产线路二| 91官网在线免费观看| 91精品国产入口| 久久久久国产精品免费免费搜索| 中文字幕欧美激情一区| 亚洲靠逼com| 麻豆成人91精品二区三区| 国产成人精品一区二| 色av一区二区| 精品国产99国产精品| 国产精品福利电影一区二区三区四区| 亚洲精品一二三四区| 天堂成人国产精品一区| 国产黄色精品网站| 欧美三区在线观看| 精品剧情在线观看| 一区二区三区四区激情| 精品制服美女久久| 日本精品一区二区三区高清 | 最新不卡av在线| 麻豆精品久久久| 91在线观看高清| 国产午夜亚洲精品不卡| 亚洲韩国一区二区三区| 成人动漫一区二区|