📄 flash.c.bak
字号:
#include "D:\comm_d\flash.h"
#include "D:\comm_d\flash_pub.h"
void init_spi(void)
{
CS=1;
SCK=1;
MOSI=1;
MISO=1;
}
void spi_send_uint(unsigned char dat)
{
idata unsigned int i;
for(i = 0; i < 8; i ++){
if(dat >= 0x80)
{ MOSI = 1;
} //修改
else
MOSI = 0;
SCK = 0;
_nop_();
_nop_();
_nop_();
SCK = 1;
dat <<= 1;
}
}
unsigned int get_unsigned(void)
{
idata unsigned int i;
idata unsigned int result = 0;
for(i = 0; i < 8; i ++){
result <<= 1;
SCK = 0;
_nop_();
_nop_(); //修改
_nop_();
SCK = 1;
_nop_();
_nop_(); //修改
_nop_();
if(MISO == 0)
result |= 0;
else
result |= 1;
}
return result;
}
unsigned char read_status(void)
{
idata unsigned int result;
CS = 0;
spi_send_uint(CMD_READ_STATUS);
result = get_uint();
CS = 1;
return result;
}
unsigned char wait_ready(void)
{
unsigned int status;
do{
status = read_status();
}
while((status & 0x80) == 0); /* If flash is busy */
return status;
}
void send_cmd32(unsigned long cmd32)
{
unsigned int cmd8;
cmd8 = (unsigned int)(cmd32 >> 24);
spi_send_uint(cmd8);
cmd8 = (unsigned int)(cmd32 >> 16);
spi_send_uint(cmd8);
cmd8 = (unsigned int)(cmd32 >> 8);
spi_send_uint(cmd8);
cmd8 = (unsigned int)cmd32;
spi_send_uint(cmd8);
}
bit we_buf(unsigned int buf_no, unsigned int xdata *src, unsigned int BFA, unsigned int n)
{
unsigned long cmd32;
unsigned int i;
unsigned int xdata *temp;
switch(buf_no){
case BUFFER1:
cmd32 = CMD_WE_BUF1;
break;
case BUFFER2:
cmd32 = CMD_WE_BUF2;
break;
default:
return 0;
}
cmd32 |= BFA;
temp = src;
CS = 0;
send_cmd32(cmd32);
for(i = 0; i < n; i ++){
spi_send_uint(*temp++);
//temp ++;
}
CS = 1;
return 1;
}
bit we_buf_main_del(unsigned int buf_no, unsigned int PA)
{
unsigned long cmd32;
cmd32 = ((unsigned long)PA) << 9;
switch(buf_no){
case BUFFER1:
cmd32 |= CMD_WE_BUF1_MAIN_DEL;
break;
case BUFFER2:
cmd32 |= CMD_WE_BUF2_MAIN_DEL;
break;
default:
return 0;
}
CS = 0;
send_cmd32(cmd32);
CS = 1; /* Begin transfer from now */
wait_ready();
return 1;
}
/*
名称:read_main
功能:读AT45D021函数,指定页、指定起始字节及字节数,送到RAM指定地址中;
入口参数:PA:AT45D021主存储器页地址。
BA:页内起始字节。
dest:RAM区存放数据地址。
n :读取字节数
*/
unsigned int at45d021_rd(unsigned int *rdbuf,unsigned int size,unsigned int pa,unsigned int ba)
{
unsigned long cmd32;
unsigned int i;
unsigned int xdata *gg;
gg=rdbuf;
cmd32 = ((unsigned long)pa) << 9;
cmd32 |= (unsigned long)ba;
cmd32 |= CMD_READ_MAIN;
CS = 0;
send_cmd32(cmd32);
send_cmd32(0L);
for(i = 0; i < size; i ++){
*gg++ = get_uint();
//gg++;
}
CS = 1;
//return 1;
}
/*
名称:we_main
功能:写AT45D021函数,指定RAM源数据地址、主存页、起始字节及字节数。
将RAM区数据写入AT45D021中
入口参数:PA:AT45D021主存储器页地址。
BA:页内起始字节。
src:RAM区存放数据地址。
n :写入字节数
*/
unsigned int at45d021_wr(unsigned int *wrbuf,unsigned int size,unsigned int pa,unsigned int ba)
{
we_buf(BUFFER1, wrbuf, ba, size);
we_buf_main_del(BUFFER1, pa);
wait_ready();
//return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -