⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_flash.c

📁 AT45DB161驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    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 + -