📄 test_flash.c
字号:
write_AT45DB161_byte(0x57);
sck_high_low();
c=read_AT45DB161_byte();//11001110 11011
resolve_read_write(); //1001 1100 RDY/BUSY CMP
return(c);
}
//==============================================================================================
//=============应用程序 7============
//===== 430容到主存储器,并檫除
//==============================================================================================
/*void M430_to_MemoryE(unsigned char cmd,unsigned int page,unsigned int adr)
{ //写中间数据:把Flash_Data[528]直接写到FLASH中(用一条命令完成写操作)
int i;
//init_read_write();
AT45DB161_cs_availability();
for (i=0;i<10;i++);
Auto_cmd_Through_buf(cmd,page,adr); //命令:cmd=0x82或0x85
for(i=adr;i<528;i++)
{
write_AT45DB161_byte(Flash_Data[i-adr]);
}
//resolve_read_write(); //10011100 RDY/BUSY CMP
AT45DB161_cs_invalidationy();
}
void M430_to_MemoryE1(unsigned char cmd,unsigned int page,unsigned int adr)
{ //写纵向指标,把Zong_target[528]直接写到FLASH中(用一条命令完成写操作)
int i;
//init_read_write();
AT45DB161_cs_availability();
for (i=0;i<10;i++);
Auto_cmd_Through_buf(cmd,page,adr); //命令:cmd=0x82或0x85
for(i=adr;i<528;i++)
{
write_AT45DB161_byte(Zong_target[i-adr]);
}
//resolve_read_write(); //10011100 RDY/BUSY CMP
AT45DB161_cs_invalidationy();
}
void M430_to_MemoryE2(unsigned char cmd,unsigned int page,unsigned int adr)
{ //写横向指标,把Heng_target[528]直接写到FLASH中(用一条命令完成写操作)
int i;
//init_read_write();
AT45DB161_cs_availability();
for (i=0;i<10;i++);
Auto_cmd_Through_buf(cmd,page,adr); //命令:cmd=0x82或0x85
for(i=adr;i<528;i++)
{
write_AT45DB161_byte(Heng_target[i-adr]);
}
//resolve_read_write(); //10011100 RDY/BUSY CMP
AT45DB161_cs_invalidationy();
}
*/
void M430_to_MemoryE(unsigned char cmd,unsigned int page,unsigned int adr)//-------------------------
{ //写中间数据:先把Flash_Data[528]写到BUFFER中,然后转到FLASH中(用两条命令完成写操作)
unsigned char c;
buffer_write(cmd,adr); //命令1-写BUFFER cmd=0x84或0x87
if(cmd==0x84)
{
Buffer_Main_Memory(0x83,page,0); //命令2-写FLASH cmd=0x83或0x86
}
else
{
Buffer_Main_Memory(0x86,page,0);
}
c=read_AT45DB161_register();
c=c&0x80;
while(c==0)
{
for(c=0;c<120;c++)
{
_NOP();
}
c=read_AT45DB161_register();
c=c&0x80;
}
}
void M430_to_MemoryE1(unsigned char cmd,unsigned int page,unsigned int adr)//-------------------------
{ //写纵向指标,先把Zong_target[528]写到BUFFER中,然后转到FLASH中(用两条命令完成写操作)
unsigned char c;
buffer_write1(cmd,adr);
if(cmd==0x84)
{
Buffer_Main_Memory(0x83,page,0);
}
else
{
Buffer_Main_Memory(0x86,page,0);
}
c=read_AT45DB161_register();
c=c&0x80;
while(c==0)
{
for(c=0;c<120;c++)
{
_NOP();
}
c=read_AT45DB161_register();
c=c&0x80;
}
}
void M430_to_MemoryE2(unsigned char cmd,unsigned int page,unsigned int adr)//--------------------------
{ //写横向指标:先把Heng_target[528]写到BUFFER中,然后转到FLASH中(用两条命令完成写操作)
unsigned char c;
buffer_write2(cmd,adr);
if(cmd==0x84)
{
Buffer_Main_Memory(0x83,page,0);
}
else
{
Buffer_Main_Memory(0x86,page,0);
}
c=read_AT45DB161_register();
c=c&0x80;
while(c==0)
{
for(c=0;c<120;c++)
{
_NOP();
}
c=read_AT45DB161_register();
c=c&0x80;
}
}
//==============================================================================================
//=============应用程序 7============
//===== 430容到主存储器,不檫除
//==============================================================================================
void M430_to_MemoryNOE(unsigned char cmd,unsigned int page,unsigned int adr)
{
unsigned char c;
buffer_write(cmd,adr);
if(cmd==0x84)
{
Buffer_Main_Memory(0x88,page,0);
}
else
{
Buffer_Main_Memory(0x89,page,0);
}
c=read_AT45DB161_register();
c=c&0x80;
while(c==0)
{
for(c=0;c<120;c++)
{
_NOP();
}
c=read_AT45DB161_register();
c=c&0x80;
}
}
//================================================================================================
//================================================================================================
//================================================================================================
//================================================================================================
//===================================================================
//例子
//read_AT45DB161_register(); 读状态寄存器
//写缓冲器
//for(q=0;q<528;q++)
// {Flash_Data[q]=q;}
// buffer_write(0x84,0);buff1 0x87 buff2
//读缓冲器
//for(q=0;q<528;q++)
// {Flash_Data[q]=0; }
//buffer_read(0x54,0);buff1 0x56 buff2
//直接的主存储器的一页
// Main_Memory_Page_Read(0x52,0,0);
//===================================================
//主存储器读
//Main_Memory_Page_Read(page,0);
//主存储器写
//M430_to_MemoryE(0x84,page,0);
//=============================================
// for(i=2048*16-4;i<2048*16-2;i++)
// {
// page=i;
// for(q=0;q<528;q++)
// {
// Flash_Data[q]=q+page-2048*16+4;
// }
// M430_to_MemoryNOE(0x84,page,0); //必须檫除后在写
// M430_to_MemoryE(0x84,page+2,0);
// }
// for(q=0;q<528;q++)
// {Flash_Data[q]=0; }
// buffer_read(0x54,0);
// for(i=2048*16-4;i<2048*16;i++)
// {
// page=i;
// Main_Memory_Page_Read(page,0);
// page=i;
// }
//==================================================================================================
//==================================================================================================
//读AT45DB161的值,出口参数 Flash_Data
void read_AT45DB161_430(unsigned int page_adr)
{
Main_Memory_Page_Read(page_adr,0);
}
//写AT45DB161的值,入口参数 Flash_Data
void write_AT45DB161_430(unsigned int page_adr)
{
M430_to_MemoryE(0x84,page_adr,0);
// M430_to_MemoryNOE(0x84,page_adr,0);
// Buffer_Main_Memory(0x58,page_adr,0);
}
//=================================================
// unsigned int i,page_s;
// page_s=100;
// for(i=0;i<16;i++)
// {
// for(q=0;q<528;q++)
// {
// Flash_Data[q]=q+i+0x30;
// }
// write_AT45DB161_430(page_s+i);
// }
// page_s=100;
// for(i=0;i<16;i++)
// {
// read_AT45DB161_430(page_s+i);
// q=0;
// }
/* 初始化P1口 */
void Iint_Port1(void)
{
P1SEL=0x10; //0001 0000 P1.4为功能模块(SMCLK),其它均为普通I/O
P1DIR=0x31; //0011 0001 P1.1接8563、EEPROM的SDA(输入/输出)
P1IES=0xc4; //1100 0100 选择下降沿触发(P1.6接横向中断信号,P1.7接纵向中断信号;P1.2接8563中断)
//P1IE=0xc4; //1100 0100 打开中断允许
P1IFG=0; //P1IES的切换可能使P1IFG置位,需清除
}
/* 初始化P2口 */
void Iint_Port2(void)
{
P2SEL=0x00; //全为普通I/O口
P2DIR=0Xf0; //P2.0-2.3接列线(输入),P2.4-P2.7接行线(输出)
P2IES=0X00;
P2IE=0X00; //不允许P1.4-P1.7产生中断(用查询方式)
P2IFG=0; //中断标志清零
}
/* 初始化P3口 */
void Iint_Port3(void)
{
P3SEL=0xf0; //1111 0000 高四位为串口0、串口1;低四位为普通I/O口
P3DIR=0X53; //0101 0011
}
/* 初始化P4口 */
void Iint_Port4(void)
{
P4SEL=0x00; //P4口设置为普通I/O口功能
P4DIR=0xff; //全为输出,接LCD的8位数据线
}
/* 初始化P5口 */
void Iint_Port5(void)
{
P5SEL=0x00; //P5口设置为普通I/O口功能
P5DIR=0xfb; //1111 1011
}
/* 初始化P6口 */
void Iint_Port6(void)
{
P6SEL=0x03; //0000 0011 P6口的低两位,设置为ADC12功能
P6DIR=0xe4; //1110 0100
}
void Iint_OSCF(void)
{
int i;
BCSCTL1=0X04; //ACLK来源于LFXT1低频模式,其频率为32K,XT2开启
BCSCTL2=0X88; //MCLK与SMCLK均来源于XT2,分频系数为1,频率为8M
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG) != 0); // OSCFault flag still set?
}
void main(void)
{
int i;
WDTCTL=WDTPW+WDTHOLD;
Iint_OSCF();
Iint_Port6();
//以下6个函数硬件测试均通过
init_AT45DB161();
for(i=0;i<528;i++) //写入的数据放Flash_Data[528]
Flash_Data[i]=0x55;
for(i=0;i<528;i++) //读出的数据放Flash_Data1[528]
Flash_Data1[i]=0x00;
M430_to_MemoryE(0x84,0,0);
Main_Memory_Page_Read(0,0);
i=9;
//Main_Memory_Page_Read(5,0);
_NOP();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -