91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 9KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-06-11
  • 語言: 其他
  • 標(biāo)簽: SPI??

資源簡介

實(shí)現(xiàn)對(duì)SD卡的讀取,包括實(shí)現(xiàn)SPI總線的控制和對(duì)SD卡初始化等

資源截圖

代碼片段和文件信息

#include?
#include?“sd.h“
#include?“myfun.h“?//公共函數(shù)頭文件


#define?_SD_Write_Sector?0

#define?CS_SD_EN????(CS=0)??????//為低時(shí)表示片選
#define?CS_SD_DIS???(CS=1)??????//disable?????
#define?SCK_SD_LOW???SD_SCL=0;?????//low
#define?SCK_SD_HIGH??SD_SCL=1;???//?SCK?=?1
#define?SI_SD_LOW????SD_SI=0;??????//(SISO均相對(duì)SSD)
#define?SI_SD_HIGH???SD_SI=1;??????//SI=1
/*******************************************************

????????
********************************************************/

//變量定義
//--------------------------------------------------------------
bit?is_init;????????//在初始化的時(shí)候設(shè)置此變量為1同步數(shù)據(jù)傳輸(SPI)會(huì)放慢
//---------------------------------------------------------------

//unsigned?char?bdata?_dat;
//sbit?_dat7=_dat^7;
//sbit?_dat6=_dat^6;
//sbit?_dat5=_dat^5;
//sbit?_dat4=_dat^4;
//sbit?_dat3=_dat^3;
//sbit?_dat2=_dat^2;
//sbit?_dat1=_dat^1;
//sbit?_dat0=_dat^0;

#ifdef?_STC12C_SPI
void?SD_spi_write(unsigned?char?spidata)??????////////注意讀的時(shí)候,也要寫一個(gè)字節(jié)
{??
?if?(is_init)
? CLK_DIV=0x07;
?else
? CLK_DIV=0x00;
?
?SPSTAT=0xC0;
?SPDAT=spidata;
?while(!(SPSTAT?&?0x80));
}

unsigned?char?SD_spi_read()////////注意讀的時(shí)候,也要寫一個(gè)字節(jié)
{??
?unsigned?char?spidata;
?if?(is_init)
? CLK_DIV=0x07;
?else
? CLK_DIV=0x00;
?
?SPSTAT=0xC0;
?SPDAT=0xAA;
?while(!(SPSTAT?&?0x80));
?spidata=SPSTA;
?return?spidata;
}

#else
/******************************************************************
?-?功能描述:IO模擬SPI,發(fā)送一個(gè)字節(jié)
?-?隸屬模塊:SD卡模塊
?-?函數(shù)屬性:內(nèi)部
?-?參數(shù)說明:x是要發(fā)送的字節(jié)
?-?返回說明:無返回
?-?注:其中is_init為1時(shí),寫的速度放慢,初始化SD卡SPI速度不能太高
?******************************************************************/

void?SD_spi_write(unsigned?char?x)?
{
??unsigned?char?i;
??for?(i?=?0;?i???{
????if?(x?&?0x80)
????{
??????SI_SD_HIGH;
????}
????else
????{
??????SI_SD_LOW;
????}
????SCK_SD_LOW?;
????if(is_init)?delay(DELAY_TIME);
????_nop_();
????SCK_SD_HIGH;
????if(is_init)?delay(DELAY_TIME);
????_nop_();
????x<<=1;
??}

}

/******************************************************************
?-?功能描述:IO模擬SPI,讀取一個(gè)字節(jié)
?-?隸屬模塊:SD卡模塊
?-?函數(shù)屬性:內(nèi)部
?-?參數(shù)說明:無
?-?返回說明:返回讀到的字節(jié)
?******************************************************************/

unsigned?char?SD_spi_read()?//SPI讀一個(gè)字節(jié)
{??
??unsigned?char?irByte=0;?
??
??for(i=0;i<8;i++)
??{?
????SD_SO=1;
????SCK_SD_LOW?;
????if(is_init)?delay(DELAY_TIME);
????_nop_();
????SCK_SD_HIGH;
????if(is_init)?delay(DELAY_TIME);
????_nop_();
????rByte<<=1;?
????rByte|=SD_SO;?
??}?
??return?rByte;?
}
#endif

/******************************************************************
?-?功能描述:向SD卡寫命令
?-?隸屬模塊:SD卡模塊
?-?函數(shù)屬性:內(nèi)部
?-?參數(shù)說明:SD卡的命令是6個(gè)字節(jié),pcmd是指向命令字節(jié)序列的指針
?-?返回說明:命令寫入后,SD卡的回應(yīng)值,調(diào)用不成功,將返回0xff
?******************************************************************/

unsigned?char?SD_Write_Cmd(unsigned?char?*pcmd)?//向SD卡寫命令,pcmd是命令字節(jié)序列的首地址
{
?unsigned?char?temptime=0;

?SD_CS=1;
?SD_spi_write(0xFF);?//提高兼容性,如果沒有這里,有些SD卡可能不支持?
//?SD_spi_write(0xFF);?//提高兼容性,如果沒有這里,有

評(píng)論

共有 條評(píng)論