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

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

?? 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()兩函數(shù)合并為一個函數(shù)SdSpiHal_SetMCIClock()
**                      2. 多數(shù)函數(shù)名以  SdSpiHal_ 作為開頭
**						3. 增加對多卡的支持
**------------------------------------------------------------------------------------------------------
** Modified by: 
** Modified date:
** Version:	
** Descriptions: 
**
********************************************************************************************************/


#include "sdconfig.h"

#if (!SDBUS_MODE_EN)

	/***************************************************************************
		
		讀寫SD/MMC卡的SPI接口函數(shù): SPI 初始化, SPI時鐘設(shè)置, 發(fā)送/接收字節(jié)函數(shù)	
	
	***************************************************************************/


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

	SD_POWER_GPIO();
	SD_POWER_OUT();
	SD_POWER_OFF();								/* 關(guān)閉 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++);				/* 關(guān)閉電源延時    delay after turn off power of sd card */
	SD_POWER_ON();								/* 打開 SD 卡電源  turn on power of sd card */
}


/*******************************************************************************************************************
** 函數(shù)名稱: SdSpiHal_Initialize()				
**
** 功能描述: 初始化訪問卡的硬件條件		
**
** 輸   入: sd_struct *sds:  卡信息結(jié)構(gòu)體, 該函數(shù)僅可使用sds->card_posnum成員用于區(qū)分卡座編號
**							  	
** 輸   出: 無
**
** 返 回 值: 0:   正確    >0:   錯誤碼, 見 sddriver.h 文件
**
** 主要工作: 1. 先給卡下電, 再給卡上電;              2. 設(shè)置訪問卡的速度小于或等于 400KHz;
** 
**           3. 初始化相關(guān)硬件寄存器為適當(dāng)?shù)臓顟B(tài)     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); 	/* 設(shè)置SPI頻率小于等于400kHZ */
   
 	S0SPCR = (0x00 << 4) + (0x01 << 5);		    /* 設(shè)置SPI接口模式, MSTR = 1,CPOL = 1,CPHA = 0,LSBF=0 */

	return SD_NO_ERR;
}												


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


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

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


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


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


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


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


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

#endif



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美国十次综合导航| 久久av资源网| 日本亚洲三级在线| 国产在线精品不卡| 91色视频在线| 欧美日韩精品欧美日韩精品一综合| 欧美精品久久99| 精品国产麻豆免费人成网站| 中文字幕av不卡| 亚洲一区二区3| 紧缚捆绑精品一区二区| 色伊人久久综合中文字幕| 欧美成人一区二区三区| 国产亚洲人成网站| 亚洲精品五月天| 国产制服丝袜一区| 欧美日精品一区视频| 欧美成人高清电影在线| 亚洲精品美国一| 国产精品1区2区| 精品视频全国免费看| 国产日韩欧美a| 日韩精品成人一区二区三区| 波多野结衣精品在线| 欧美一区二区三区免费大片| 国产精品色一区二区三区| 午夜精品影院在线观看| 成人免费观看视频| 日韩无一区二区| 国产精品白丝在线| 久久爱另类一区二区小说| 色偷偷久久人人79超碰人人澡| 日韩三级视频在线观看| 亚洲国产精品自拍| 99精品视频一区二区| 2019国产精品| 日韩精品电影在线| 色综合久久88色综合天天免费| 精品久久久久久久久久久院品网| 亚洲高清一区二区三区| 91在线视频观看| 日韩三级av在线播放| 亚洲乱码国产乱码精品精98午夜 | 日韩欧美成人一区二区| 中文av字幕一区| 久久国产麻豆精品| 欧美日韩在线综合| 中文字幕+乱码+中文字幕一区| 美女一区二区三区在线观看| 欧美精品色综合| 午夜av电影一区| 欧美日韩精品欧美日韩精品 | 欧美日韩一区三区四区| 亚洲免费高清视频在线| 日本道免费精品一区二区三区| 自拍偷拍国产亚洲| 91网址在线看| 中文字幕一区二区三区精华液 | 五月开心婷婷久久| 欧美色区777第一页| 午夜一区二区三区在线观看| 欧美日韩美女一区二区| 日本大胆欧美人术艺术动态| 91精品国产高清一区二区三区蜜臀| 天天综合日日夜夜精品| 91蝌蚪国产九色| 日韩美女视频一区二区| 粉嫩aⅴ一区二区三区四区| 国产亚洲欧美日韩俺去了| 北条麻妃国产九九精品视频| 一区在线播放视频| 色乱码一区二区三区88| 亚洲不卡在线观看| 91精品国产综合久久小美女| 久久国产精品99久久人人澡| 国产亚洲综合在线| 97超碰欧美中文字幕| 亚洲一区二区五区| 欧美久久一区二区| 精品一区二区日韩| 国产精品色呦呦| 欧美色图片你懂的| 经典一区二区三区| 亚洲欧洲美洲综合色网| 欧美在线观看一区二区| 蜜臀久久久久久久| 国产亚洲欧美色| 欧美三级中文字幕| 九色综合狠狠综合久久| 国产精品久久久久久久久免费相片 | 久久精品99国产国产精| 国产女人18毛片水真多成人如厕| 91亚洲永久精品| 日本中文一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋| 欧美性videosxxxxx| 美女尤物国产一区| 国产亚洲污的网站| 色国产精品一区在线观看| 日本欧美在线观看| 综合欧美亚洲日本| 欧美成人一级视频| 欧美视频一区二区三区在线观看 | 国产成人精品免费网站| 亚洲一区在线观看免费| 国产午夜精品在线观看| 欧美日韩国产美| 成人午夜免费视频| 久草热8精品视频在线观看| 洋洋成人永久网站入口| 欧美激情自拍偷拍| 精品久久久久久无| 欧美一区二区在线视频| 波多野结衣中文一区| 蜜臀精品久久久久久蜜臀| 亚洲自拍偷拍九九九| 国产精品美女久久久久久| 26uuu国产在线精品一区二区| 91国产免费看| av毛片久久久久**hd| 国产美女在线精品| 美日韩一区二区| 日韩在线一区二区三区| 亚洲午夜精品网| 国产精品国产三级国产| 国产亚洲欧美中文| 51精品视频一区二区三区| 91小视频免费观看| 91同城在线观看| 欧美嫩在线观看| 色婷婷久久一区二区三区麻豆| 成人av在线观| 成人免费三级在线| 国产成人免费高清| 国产一区二区精品在线观看| 一区二区三区成人在线视频 | 三级久久三级久久| 亚洲电影视频在线| 亚洲国产欧美在线| 午夜精品久久久久久久久久 | 午夜私人影院久久久久| 亚洲h在线观看| 国产精品久久久久aaaa| 国产精品美女一区二区在线观看| 中文字幕成人av| 亚洲欧洲美洲综合色网| 亚洲精品欧美激情| 亚洲国产日韩综合久久精品| 有坂深雪av一区二区精品| 亚洲大片精品永久免费| 日韩av电影免费观看高清完整版 | 欧美日韩一区精品| 久久综合一区二区| 国产精品天美传媒| 丝袜美腿成人在线| 国产精品99久久久久久似苏梦涵| 99久久精品情趣| 欧美一区三区四区| 国产精品第五页| 日本成人中文字幕在线视频| 丰满岳乱妇一区二区三区| 在线观看91av| 国产精品久久夜| 蜜臀精品久久久久久蜜臀| av电影在线观看完整版一区二区| 3atv一区二区三区| 亚洲男人的天堂av| 激情亚洲综合在线| 欧美午夜一区二区| 久久精品网站免费观看| ...xxx性欧美| 免费观看日韩电影| 粉嫩在线一区二区三区视频| 3atv一区二区三区| 国产精品理论片在线观看| 亚洲五码中文字幕| 毛片av一区二区三区| 欧洲亚洲精品在线| 精品成人免费观看| 一区二区三区中文字幕精品精品| 国产一区二区久久| 欧美日韩精品系列| 国产欧美一区二区精品久导航| 亚洲人成小说网站色在线| 国产乱理伦片在线观看夜一区| 91麻豆免费观看| 亚洲精品一区二区三区香蕉| 国产精品美女久久久久久久久久久| 三级在线观看一区二区| www.性欧美| 欧美不卡一区二区三区四区| 日韩激情一二三区| 91天堂素人约啪| 国产亚洲欧美日韩日本| 免费精品视频在线| 欧美无人高清视频在线观看| 国产欧美精品一区| 婷婷六月综合亚洲| 91精选在线观看| 亚洲伊人色欲综合网|