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

📄 at45db161d.h

📁 基于ARM7处理器的中断与串口在ucos下切换的演示程序
💻 H
字号:
/****************************************Copyright (c)**************************************************
**                               
**
**--------------File Info-------------------------------------------------------------------------------
*/
//#define SPI_CLOCK				5529600		/* 正常通信时,SPI时钟频率 frequency (Hz) */
//#define SPI_CLOCK               7372800

/* DataFlash信息结构体定义 */ 
/* the information structure variable of DataFlash*/
#define AT45DB161Size    2000000 //2162688
typedef struct DataFlash_STRUCT
{	
	INT8U  DataFlash_type;
	INT32U block_num;				/* 卡中块的数量 */
	INT32U block_len;				/* 卡的块长度(单位:字节) */
	INT32U erase_unit;				/* 一次可擦除的块个数 */
	
	INT32U timeout_read;			/* 读块超时时间(单位: 8 SPI clock) */
	INT32U timeout_write;			/* 写块超时时间(单位: 8 SPI clock) */
	INT32U timeout_erase;			/* 擦块超时时间(单位: 8 SPI clock) */
	
}dataflash_struct;

// defines for all opcodes

// buffer 1 write 
#define BUFFER_1_WRITE 0x84

// buffer 2 write 
#define BUFFER_2_WRITE 0x87

// buffer 1 read
#define BUFFER_1_READ 0x54

// buffer 2 read
#define BUFFER_2_READ 0x56

// buffer 1 to main memory page program with built-in erase
#define B1_TO_MM_PAGE_PROG_WITH_ERASE 0x83

// buffer 2 to main memory page program with built-in erase
#define B2_TO_MM_PAGE_PROG_WITH_ERASE 0x86

// buffer 1 to main memory page program without built-in erase
#define B1_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x88

// buffer 2 to main memory page program without built-in erase
#define B2_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x89

// main memory page program through buffer 1
#define MM_PAGE_PROG_THROUGH_B1 0x82
 
// main memory page program through buffer 2
#define MM_PAGE_PROG_THROUGH_B2 0x85
 
// auto page rewrite through buffer 1
#define AUTO_PAGE_REWRITE_THROUGH_B1 0x58
 
// auto page rewrite through buffer 2
#define AUTO_PAGE_REWRITE_THROUGH_B2 0x59
 
// main memory page compare to buffer 1
#define MM_PAGE_TO_B1_COMP 0x60

// main memory page compare to buffer 2
#define MM_PAGE_TO_B2_COMP 0x61
 
// main memory page to buffer 1 transfer
#define MM_PAGE_TO_B1_XFER 0x53

// main memory page to buffer 2 transfer
#define MM_PAGE_TO_B2_XFER 0x55

// DataFlash status register for reading density, compare status, 
// and ready/busy status
#define STATUS_REGISTER 0x57

// main memory page read
#define MAIN_MEMORY_PAGE_READ 0x52

// erase a 528 byte page
#define PAGE_ERASE 0x81

// erase 512 pages
#define BLOCK_ERASE 0x50
 


/* 100ms 相当的SPI时钟数(单位 unit: 8 clocks) */
/* 100ms correspond to SPI clock(unit: 8 clocks)*/
#define READ_TIMEOUT_100MS      100 * SPI_CLOCK / 1000 / 8

/* 250ms 相当的SPI时钟数(单位 unit: 8 clocks) */
/* 250ms correspond to SPI clock(unit: 8 clocks)*/
#define WRITE_TIMEOUT_250MS		250 * SPI_CLOCK / 1000 / 8    


extern void SPI_Delay(INT8U value);									// 发生SPI时钟		 send SPI clock

/* 设置SPI的时钟小于400kHZ set the clock of SPI less than 400kHZ */
extern void SPI_Clk400k(void);

/* 设置SPI的clock到最大值 set the clock of SPI to maximum */
extern void SPI_ClkToMax(void);

/* 通过SPI接口发送一个字节 send a byte by SPI interface */
extern void SPI_SendByte(INT8U byte);

/* 从SPI接口接收一个字节 receive a byte from SPI interface */
extern INT8U SPI_RecByte(void);

/* 片选SPI从机 select the SPI slave */
extern void SPI_CS_Assert(void);

/* 不片选SPI从机 not select the SPI slave */
extern void SPI_CS_Deassert(void);

/* 初始化访问SD卡的硬件初始化 initialize the hardware that access sd card */
extern void DataFlash_HardWareInit(void);


extern unsigned char DataFlash_ReadStatus(void);

extern unsigned char DataFlash_isBusy(void);

extern void Block_Erase(unsigned long Dst);

extern void Block_Program(unsigned char * dat,unsigned int num,unsigned int startpage,unsigned int startaddr);

extern void Block_Read(unsigned char *dat,unsigned int num,unsigned int startpage,unsigned int startaddr);



/* CS 引脚 */		//P1.25
#define  SPI_CS      			(0x01 << 25)              	 	
#define  SPI_CS_GPIO()			PINSEL2 = 0xFFFFFFF0;	 	/* 设置 CS 口为GPIO口 */
#define  SPI_CS_OUT()			IO1DIR |= SPI_CS;			 	/* 设置 CS 口为输出口 */
#define	 SPI_CS_SET()			IO1SET |= SPI_CS;				/* 置 CS 为高电平 */
#define	 SPI_CS_CLR()			IO1CLR |= SPI_CS;				/* 置 CS 为低电平 */

/* 写保护检测引脚 */      //P1.26
#define  SPI_WP					(0x01 << 15)		
#define  SPI_WP_GPIO()			PINSEL2 =  0xFFFFFFF0;		    /* 设置 WP 口为GPIO口 */
#define  SPI_WP_OUT()		    IO1DIR |= SPI_WP	;			/* 设置 WP 口为输出口 */	
//#define  SPI_WP_OUT()		    IODIR &= ~SPI_WP				/* 设置 WP 口为输出口 */
#define  SPI_WP_SET()  		    IO1SET |= SPI_WP;				/* 置 WP 为高电平 */
#define  SPI_WP_CLR()           IO1CLR |= SPI_WP;                /* 置 WP 为低电平 */

/* RESET引脚 */      //P1.31
#define  SPI_RESET					0x80000000//(0x01 << 31)		
#define  SPI_RESET_GPIO()			PINSEL2 = 0xFFFFFFF0;		    /* 设置 RESET 口为GPIO口 */
#define  SPI_RESET_OUT()		    IO1DIR |= SPI_RESET ;            /* 设置 RESET 口为输出口 */	
#define  SPI_RESET_SET()  		    IO1SET |= SPI_RESET;				/* 置 RESET 为高电平 */
#define  SPI_RESET_CLR()            IO1CLR |= SPI_RESET;             /* 置 RESET 为低电平 */

/* 初始化 IO 口为SPI接口 */
#define  SPI_INIT()				PINSEL0 &= ~((0x03 << 8) + (0x03 << 10) + (0x03 << 12)); \
								PINSEL0 |= (0x01 << 8) + (0x01 << 10) + (0x01 << 12);

⌨️ 快捷键说明

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