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

📄 at45db.c

📁 AT45DB041的驱动
💻 C
字号:
#define  AT45DB_H_H
#include "config.h"



void  AT45DB_WR(unsigned char c);
unsigned char AT45DB_RD(void);	

/*********************************************************
 函数名称:void  AT45DB_BufferToPage(uint addr_page,uchar buffer_num)
 功能描述:把缓冲区的数据写到指定页
 入口参数:addr_page,要写入的也地址;buffer_num,缓冲区选择
 出口参数:无
 调用模块:void AT45DB_WR(void)
 影响变量:无
*********************************************************/

void  AT45DB_BufferToPage(uint addr_page,uchar buffer_num)
{
    
    uchar var[4];

    AT45DB_BUSY = 1;
    _nop_();
    if(AT45DB_BUSY ==0)  return;
    
    if(buffer_num == 0)  var[0]=AT45DB_BUF1_TO_MME;
    else 
       var[0]=AT45DB_BUF2_TO_MME;
       
    var[1]=(uchar)(addr_page>>7);
    var[2]=(uchar)(addr_page<<1);
    var[3]=0;				//为任意码
    
    AT45DB_SCK=0;			// 准备SPI mode3
    Select_138(SEL_AT0);   
     _nop_(); _nop_(); _nop_();
    AT45DB_WR(var[0]);
    AT45DB_WR(var[1]);
    AT45DB_WR(var[2]);
    AT45DB_WR(var[3]);   
    
    Select_138(SEL_62256);

    
    


}


/*********************************************************
 函数名称:void  AT45DB_ArrayRead(uchar *ptr,uint addr_page,uint addr_begin,uint len)
 功能描述:连续的读页数据,可以读取页中指定地址的数据
 入口参数:ptr,读取数据存入的首址;addr_page,页地址;addr_begin,指定地址单元;len,要读取数据的长度;
 出口参数:无
 调用模块:void AT45DB_WR(void)
 影响变量:无
*********************************************************/

void  AT45DB_ArrayRead(uchar *ptr,uint addr_page,uint addr_begin,uint len)
{
	
    uchar var[4];
    uchar i;
    uint idata cnt;
    
    AT45DB_BUSY = 1;
    _nop_();
    cnt=0x0ccc;
    while(cnt--)			//大约延时20MS
       {
          if(AT45DB_BUSY == 0) break;
       }
       
    var[0]=AT45DB_ARRAY_READ;
    var[1]=(uchar)(addr_page>>7);
    var[2]=(uchar)(addr_page<<1);
    var[2]=var[2]&0xFE;
    var[2]=var[2]|( (uchar)(addr_begin>>8) );	
    var[3]=(uchar)addr_begin;		

    AT45DB_SCK=0;			// 准备SPI mode3
    Select_138(SEL_AT0);    
     _nop_();  _nop_();  _nop_(); 
    AT45DB_WR(var[0]);
    AT45DB_WR(var[1]);
    AT45DB_WR(var[2]);
    AT45DB_WR(var[3]);   
    AT45DB_WR(0);			//再发送32位任意码
    AT45DB_WR(0);
    AT45DB_WR(0);
    AT45DB_WR(0);
    
    for(i=0;i<len;i++)
        {
            *(ptr+i)=AT45DB_RD();
        }
    Select_138(SEL_NO); 
    
    
}



/*********************************************************
 函数名称:void  AT45DB_BufferWrite( uchar *ptr,uint addr_buffer,uint len,uchar buffer_num)
 功能描述:先写数据到指定的缓冲区,可以写到指定地址的缓冲区
 入口参数:ptr,要写入数据的首址;addr_buffer,写到缓冲区的地址;len,要写入数据的长度;buffer_num,缓冲区0、缓冲区1选择
 出口参数:无
 调用模块:void AT45DB_WR(void)
 影响变量:无
*********************************************************/

void  AT45DB_BufferWrite( uchar *ptr,uint addr_buffer,uint len,uchar buffer_num)
{
    uchar var[4],i;
	
    if(buffer_num == 0)  var[0]=AT45DB_BUF1_WRITE;
    else 
       var[0]=AT45DB_BUF2_WRITE;
       
       var[1]=0;			//任意码
       var[2]=(uchar)(addr_buffer>>8);
       var[3]=(uchar)(addr_buffer);
       
    AT45DB_SCK=0;			//准备SPI模式3
    Select_138(SEL_AT0);
    _nop_(); _nop_(); _nop_();
    
    AT45DB_WR(var[0]);
    AT45DB_WR(var[1]);
    AT45DB_WR(var[2]);
    AT45DB_WR(var[3]);
    for(i=0;i<len;i++)
        {
       	    AT45DB_WR( *(ptr+i) );
        }
    Select_138(SEL_62256);
}



uchar AT45DB_RD(void)
{
	unsigned char i,b;
	
	CS_62256=1;
	
	b = 0x00;
	AT45DB_SO = 1;
	_nop_();_nop_();_nop_();
	for(i =0; i <8; i++) {
		b = b<<1;
		AT45DB_SCK = 1;
		_nop_();
		AT45DB_SCK = 0;
		_nop_();_nop_();_nop_();	
		if(AT45DB_SO) b |= 0x01;
		else b &= 0xfe;
	}
//	AT45D_SCK = 0;
//	_nop_();

	CS_62256=0;
	return b;
	
}



void  AT45DB_WR(uchar c)
{
	unsigned char i;
	
	for(i =0; i <8; i++) {
		AT45DB_SCK = 0;
		_nop_();
		if(c & 0x80) AT45DB_SI = 1;
		else AT45DB_SI = 0;
		_nop_();_nop_();_nop_();
		c = c<<1;
		AT45DB_SCK = 1;
		_nop_();
	}
	
	
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -