?? at45db081操作程序.c
字號(hào):
************************AT45DB081讀狀態(tài)寄存器函數(shù)************************/
/*函數(shù)原型:void AT45DB081_read_St_REG()
/*函數(shù)功能:AT45DB081讀狀態(tài)寄存器
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/*調(diào)用模塊:無
//作者:丁霄
/*建立時(shí)間:2006/08/26
/*************************************************************************/
unsigned char AT45DB081_read_St_REG()
{
unsigned char i,index_copy;
SS=1;
SS=0;
i=AT45DB081_SPI_RW(STATUS_REG_READ); //讀AT45DB081狀態(tài)寄存器
i=AT45DB081_SPI_RW(0x00);
index_copy=((i&0x38)>>3); //取出AT45DB系列存儲(chǔ)器的特征碼
PageBits=DF_pagebits[index_copy];
PageSize=DF_pagesize[index_copy];
return (i);
}
/************************AT45DB081主存寫函數(shù)*************************/
/*函數(shù)原型:void AT45DB081_page_write(unsigned int page_add,unsigned int buff_add,unsigned char* data_source)
/*函數(shù)功能:AT45DB081主存寫
/*輸入?yún)?shù):page_add,buff_add,data_source 頁地址 緩沖第一個(gè)操作地址 數(shù)據(jù)源
/*輸出參數(shù):無
/*調(diào)用模塊:無
//作者:丁霄
/*建立時(shí)間:2006/08/26
/**************************************************************************/
void AT45DB081_page_write(unsigned int page_add,unsigned int buff_add,unsigned char* data_source)
{
unsigned int count; //計(jì)數(shù)
unsigned int MAX_str;
/***************數(shù)據(jù)格式**************
--------------------------------------------------------------
| CMD | rrr,PA11-7 | PA6-0,BFA8 | BF7-0 | data_n | data_(n+1)|
--------------------------------------------------------------
***************************************/
SS=1;
SS=0;
AT45DB081_SPI_RW(MAIN_PAGE_WRITE); //AT45DB081寫主存
AT45DB081_SPI_RW((unsigned char)(page_add>>(16-PageBits))); //upper part of page address
AT45DB081_SPI_RW((unsigned char)((page_add<<(PageBits-8))|(buff_add>>8)));
AT45DB081_SPI_RW((unsigned char)(buff_add)); //LSB byte of internal page address
AT45DB081_SPI_RW(0x00); //發(fā)送空操作數(shù)據(jù) //perform 4 dummy writes
AT45DB081_SPI_RW(0x00); //in order to intiate DataFlash
AT45DB081_SPI_RW(0x00); //address pointers
AT45DB081_SPI_RW(0x00);
MAX_str=strlen(data_source);
for(count=0;count<MAX_str;count++)
{
AT45DB081_SPI_RW(*(data_source+count)); //將制定數(shù)據(jù)寫入存儲(chǔ)器
}
}
/************************AT45DB081主存讀函數(shù)*************************/
/*函數(shù)原型:void AT45DB081_page_read(unsigned int page_add,unsigned int buff_add,unsigned char* save_data)
/*函數(shù)功能:AT45DB081主存讀
/*輸入?yún)?shù):page_add,buff_add,save_data 頁地址 緩沖第一個(gè)操作地址 存儲(chǔ)地址
/*輸出參數(shù):無
/*調(diào)用模塊:無
//作者:丁霄
/*建立時(shí)間:2006/08/28
/****************************************************************/
void AT45DB081_page_read(unsigned int page_add,unsigned int buff_add,unsigned char* save_data)
{
unsigned int count; //計(jì)數(shù)
SS=1;
SS=0;
AT45DB081_SPI_RW(MAIN_PAGE_READ); //AT45DB081讀主存
AT45DB081_SPI_RW((unsigned char)(page_add>>(16-PageBits))); //upper part of page address
AT45DB081_SPI_RW((unsigned char)((page_add<<(PageBits-8))|(buff_add>>8)));
AT45DB081_SPI_RW((unsigned char)(buff_add));
AT45DB081_SPI_RW(0x00); //發(fā)送空操作數(shù)據(jù)
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
for(count=0;count<78;count++)
{
*(save_data)=AT45DB081_SPI_RW(0x00); //將讀到的數(shù)據(jù)存入指定地址中
save_data++;
}
}
/****************************AT45DB081讀寫函數(shù)***************************/
/*函數(shù)原型:unsigned char AT45DB081_SPI_RW (unsigned char output)
/*函數(shù)功能:AT45DB081讀寫
/*輸入?yún)?shù):output 發(fā)送的數(shù)據(jù)
/*輸出參數(shù):input 接受到的數(shù)據(jù)
/*調(diào)用模塊:無
//作者:丁霄
/*建立時(shí)間:2006/08/26
/********************************************************************/
unsigned char AT45DB081_SPI_RW(unsigned char output)
{
unsigned char input;
SPI_DATA = output;
while((SPCFG&0x80)!=0x80); //查看數(shù)據(jù)是否發(fā)送完畢
input = SPI_DATA;
SPCFG=SPCFG&0x7f; //清楚發(fā)送完畢標(biāo)志位
return input;
}
/***************************AT45DB081頁擦除函數(shù)***************************/
/*函數(shù)原型:void AT45DB081_Page_E(unsigned int page_add)
/*函數(shù)功能:AT45DB081頁擦除
/*輸入?yún)?shù):page_add 要擦除的頁地址
/*輸出參數(shù):無
/*調(diào)用模塊:無
//作者:丁霄
/*建立時(shí)間:2006/09/04
/*********************************************************************/
void AT45DB081_Page_E(unsigned int page_add) //頁擦除
{
SS=1;
SS=0;
AT45DB081_SPI_RW(PAGE_E); //AT45DB081頁擦除
AT45DB081_SPI_RW((unsigned char)(page_add>>(16-PageBits)));
AT45DB081_SPI_RW((unsigned char)(page_add<<(PageBits-8)));
AT45DB081_SPI_RW(0x00);
}
/***************************AT45DB081塊擦除函數(shù)***************************/
/*函數(shù)原型:void AT45DB081_Block_E(unsigned int block_add)
/*函數(shù)功能:AT45DB081塊擦除
/*輸入?yún)?shù):block_add 要擦除的塊地址
/*輸出參數(shù):無
/*調(diào)用模塊:無
//作者:丁霄
/*建立時(shí)間:2006/09/04
/*********************************************************************/
void AT45DB081_Block_E(unsigned int block_add) //塊擦除
{
SS=1;
SS=0;
AT45DB081_SPI_RW(BLOCK_E); //AT45DB081塊擦除
AT45DB081_SPI_RW((unsigned char)(block_add<<3));
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -