欢迎来到天天文库
浏览记录
ID:13831176
大小:925.50 KB
页数:12页
时间:2018-07-24
《avr单片机spi口读写at45db161d接口程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、AVR单片机SPI口读写AT45DB161D接口程序设计本程序为AVR单片机SPI口访问AT45DB161D提供一组接口函数,通过这一组接口函数可非常容易的完成对AT45DB161D的读写操作AT45DB161D按页组织和操作(读写擦等等)内部的FLASH存储器,每页为528字节(特殊用途时可通过命令配置成512字节),其内部共集成4096页,即4096*528=2162688字节。本程序将为您提供读写这2162688字节存储区的线性操作方法。使用这些函数,用户可不必考虑AT45DB161D内部的存储器组织结构,如同读写一个文件一样进行读写操
2、作。voiddf_init(void);这是SPI口初始化函数,它必须在所有这些接口函数调用之前得到调用voiddf_read_open(uint32_taddr);读操作初始化函数,addr指定接下来的读函数的开始读取位置。程序内部维护一个当前读取计数器,用户每读一字节该计数器加一voiddf_write_open(uint32_taddr);写操作初始化函数,addr指定接下来的写函数的开始写入位置。程序内部维护一个当前写入计数器,用户每写入一个字节该计数器加一uint8_tdf_getc(void);此函数从当前读位置读取一字节后返回,
3、内部的读计数器加一voiddf_putc(uint8_tc);此函数向当前写位置写入一字节的数据,并使内部写计数器加一voiddf_read(uint8_t*buf,uint8_tsize);此函数从当前读位置读取size个字节的数据到缓冲区buf,并使内部读计数器加sizevoiddf_write(uint8_t*buf,uint8_tsize);此函数从缓冲区buf向当前写位置写入size字节的数据,并使内部写计数器加sizevoiddf_read_seek(uint32_taddr);调整当前读计数器,调用此函数前必须已调用df_rea
4、d_openvoiddf_write_seek(uint32_taddr);调整当前写计数器,调用此函数前必须已调用df_write_openvoiddf_read_close(void);关闭读操作voiddf_write_close(void);关闭写操作,所有的写入操作完成后必须调用此函来结束写操作,以便数据能够完整的保存到AT45DB161D主存储器当中 源程序:/**********************************AVR单片机SPI口读写at45db161d接口程序文件名:dataflash.c编译:WinAVR-2
5、0070525芯艺设计室2004-2007版权所有转载请保留本注释在内的全部内容WEB:http://www.chipart.cnEmail:changfutong@sina.com**********************************/#include#include"at45db161d.h"#include"dataflash.h"/*****下面是全局变量定义******/staticuint16_tg_CurReadPage;//当前读的页地址staticuint16_tg_CurReadByte;
6、//当前读的字节(页中地址)staticuint16_tg_CurWritePage;//当前写的页地址staticuint16_tg_CurWriteByte;//当前写的字节地址(页中地址)/*****下面是内部调用的接口函数******///从SPI口输出一字节数据staticuint8_tspi_write(uint8_tdata){SPDR=data;while(!(SPSR&_BV(SPIF)));returnSPDR;}//检测并等待器件忙状态,8引脚封闭器件没有RDY/BUSY引脚为些通过读状态寄存器来检测忙状态staticv
7、oiddf_wait_busy(void){SELECT_CHIP;spi_write(STATUS_REGISTER);while(1){if(spi_write(0)&0x80)//读取的最高位0时器件忙break;}UNSELECT_CHIP;}//读主存储器指定页到读缓冲区(BUFFER1)staticvoidload_page_to_buffer(uint16_tpage,uint8_tbuffer){SELECT_CHIP;if(buffer==DF_READ_BUFFER)spi_write(MM_PAGE_TO_B1_XFER
8、);elsespi_write(MM_PAGE_TO_B2_XFER);spi_write((uint8_t)(page>>6));spi_write((uint8
此文档下载收益归作者所有