📄 main.c
字号:
//*----------------------------------------------------------------------------
//* 文件名 : main.c
//* 功能 : main application written in C
//* 创建人 : 张正锋 2005-11-20 embed_tech@126.com
//*----------------------------------------------------------------------------
// Include Standard files
#include "Board.h"
#include "dataflash.h"
#include "Main.h"
#include "Dataflash.h"
#include "dbgu.h"
//定义全局变量
char message[300];
char write_data[256];
char read_data[256];
/*---------------------------- 对DataFlash操作的全局变量,在dataflash.c中定义------------------*/
extern AT91S_DataflashFeatures DeviceAT45DCB008; //define a struct for AT45DB321C
extern AT91S_DataflashDesc DataflashDesc; //define a struct for DataflashDesc
extern AT91S_DataFlash DataFlash; //define a struct for DataFlash
extern unsigned char Buffer_Dataflash[BUFFER_SIZE_DATAFLASH]; //define a buffer for DataFlash
unsigned char Buffer_Write_Dataflash[BUFFER_SIZE_DATAFLASH];
unsigned char Buffer_Read_Dataflash[BUFFER_SIZE_DATAFLASH];
/*--------SPI_Dataflah handle---in dataflash.c-----------------------------------*/
extern void AT91F_CfgSPIForDataFlash(void); //dataflash 初始化
extern AT91S_DataFlashStatus AT91F_DataFlashPageRead (//读FLASH的一页
AT91PS_DataFlash pDataFlash,
unsigned int src,
unsigned char *dataBuffer,
int sizeToRead );
extern AT91S_DataFlashStatus AT91F_DataFlashPagePgmBuf(//写一页
AT91PS_DataFlash pDataFlash,
unsigned char *src,
unsigned int dest,
unsigned int SizeToWrite);
extern AT91S_DataFlashStatus AT91F_DataFlashPageErase(//擦除一页
AT91PS_DataFlash pDataFlash,
unsigned char *src,
unsigned int address,
unsigned int SizeToWrite);
extern AT91S_DataFlashStatus AT91F_DataFlashWaitReady(//取得DATAFLASH的状态
AT91PS_DataflashDesc pDataFlashDesc,
unsigned int timeout);
static const char POLLING_header[]={"\n\r *** zhangzhengfeng DATAFLASH card test ***\n\r"};
volatile int loop;
//*--------------------------------------------------------------------------------------
//* 函数名 : wait
//* 功能: : Software waiting loop
//* 输入参数 : none. Waiting time is defined by the global variable LedSpeed.
//* 返回值 : none
//* 创建人 : 张正锋 2005-11-20 embed_tech@126.com
//*--------------------------------------------------------------------------------------
void wait ( unsigned int ms )
{//* Begin
//Wait at least 10 ms before value is written into EEPROM
for (loop=0; loop<10000*ms; loop++){};
}//* End
//*----------------------------------------------------------------------------
//* 函数名 : main
//*功能: : Main function
//* 输入参数 : none.
//* 返回值 : none
//* 创建人 : 张正锋 2005-11-20 embed_tech@126.com
//*----------------------------------------------------------------------------
int main( void )
{
unsigned int i;
//unsigned int j,k;
//First, enable the clock of the PIOB
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
//* to be outputs. No need to set these pins to be driven by the PIO because it is GPIO pins only.
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK ) ;
//* Clear the LED's. On the EB55 we must apply a "1" to turn off LEDs
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ;
//set users reset function (reset about 512*(1/32k)=16ms ok!)
AT91F_RSTSetMode(AT91C_BASE_RSTC,(8<<8)|(1<<0)); //in lib_AT91SAM7A3.h
////////////////////////////////////////////////////////////////////////////
//* Init DBGU
AT91F_DBGU_Init();
//* Polling
AT91F_DBGU_Printk((char*)POLLING_header);
////////////////////////////////////////////////////////////////////////////
//初始化SPI_DataFlash
AT91F_DBGU_Printk("init SPI dataflash!\n\r");
AT91F_CfgSPIForDataFlash();
//##########################################################################
//##########################################################################
//写8192页 每页1056 BYTE
/*
for(j=0;j<8192;j++)
{
////////////////////////////擦--写
for(i=0;i<1056;i++) {Buffer_Dataflash[i]=0xcc;}
//等待DATAFLASH准备好
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
//写数据到DATAFLASH
while(AT91F_DataFlashPagePgmBuf(&DataFlash,(unsigned char*)Buffer_Dataflash,(j*DataFlash.pDevice->pages_size),(DataFlash.pDevice->pages_size) )!=DATAFLASH_OK);
//等待写完
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
k++; if(k>10){k=0;Trace_Toggel_LED(LED2);}
}
*/
//读出一页校验
//---------------------------读 DATAFLASH的某一页(第1000页)-----------------------------
AT91F_DBGU_Printk("Read one pages!\n\r");
for(i=0;i<BUFFER_SIZE_DATAFLASH;i++) Buffer_Dataflash[i] = 0x00;
//等待DATAFLASH准备好
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
//从DATAFLASH读数据
while(AT91F_DataFlashPageRead(&DataFlash,(1000*DataFlash.pDevice->pages_size),(unsigned char*)Buffer_Dataflash,(DataFlash.pDevice->pages_size) )!=DATAFLASH_OK);
//等待读完
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
for(i=0;i<BUFFER_SIZE_DATAFLASH;i++){Buffer_Read_Dataflash[i]=Buffer_Dataflash[i];}
//通过超级终端打印出部分读出的数据
AT91F_DBGU_Printk("the read data is (only display 1056 byte):\n\r");
for(i=0;i<1056;i++)
{
read_data[i]=Buffer_Read_Dataflash[i];
sprintf((char*) message,"0x%X",read_data[i]);
AT91F_DBGU_Printk((char*)message);
}
AT91F_DBGU_Printk("the read data is finish ( 1056 byte):\n\r");
//######################################################################################
//######################################################################################
//测试擦除读写一页
/*
//----------------------------擦除 DATAFLASH的某一页(第20页)------------------------
AT91F_DBGU_Printk("Erase one pages!\n\r");
//等待DATAFLASH准备好
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
//擦除DATAFLASH
while(AT91F_DataFlashPageErase (&DataFlash,(unsigned char*)Buffer_Dataflash,(20*DataFlash.pDevice->pages_size),(DataFlash.pDevice->pages_size) )!=DATAFLASH_OK);
//等待擦除完
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
AT91F_DBGU_Printk("Erase is finish!\n\r");
//---------------------------写 DATAFLASH的某一页(第20页)---------------------------
AT91F_DBGU_Printk("Write one pages(1056 byte)!\n\r");
for(i=0;i<255;i++)
{Buffer_Write_Dataflash[i]=i; Buffer_Dataflash[i]=Buffer_Write_Dataflash[i]; write_data[i]=Buffer_Write_Dataflash[i];}
//通过超级终端打印出部分写入DATASHEET的数据
AT91F_DBGU_Printk("the write data is (only display 255 byte):\n\r");
for(i=0;i<255;i++)
{
sprintf((char*) message,"0x%X",write_data[i]);
AT91F_DBGU_Printk((char*)message);
}
//补充满一业1056字节
for(i=255;i<BUFFER_SIZE_DATAFLASH;i++)
{
Buffer_Write_Dataflash[i]=0xcc; Buffer_Dataflash[i]=Buffer_Write_Dataflash[i];
}
//等待DATAFLASH准备好
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
//写数据到DATAFLASH
while(AT91F_DataFlashPagePgmBuf(&DataFlash,(unsigned char*)Buffer_Dataflash,(20*DataFlash.pDevice->pages_size),(DataFlash.pDevice->pages_size) )!=DATAFLASH_OK);
//等待写完
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
AT91F_DBGU_Printk("the write 528 byte is finish!\n\r");
//---------------------------读 DATAFLASH的某一页(第20页)-----------------------------
AT91F_DBGU_Printk("Read one pages!\n\r");
for(i=0;i<BUFFER_SIZE_DATAFLASH;i++) Buffer_Dataflash[i] = 0x00;
//等待DATAFLASH准备好
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
//从DATAFLASH读数据
while(AT91F_DataFlashPageRead(&DataFlash,(20*DataFlash.pDevice->pages_size),(unsigned char*)Buffer_Dataflash,(DataFlash.pDevice->pages_size) )!=DATAFLASH_OK);
//等待读完
while(AT91F_DataFlashWaitReady(DataFlash.pDataFlashDesc,AT91C_DATAFLASH_TIMEOUT)!=DATAFLASH_OK);
for(i=0;i<BUFFER_SIZE_DATAFLASH;i++){Buffer_Read_Dataflash[i]=Buffer_Dataflash[i];}
//通过超级终端打印出部分读出的数据
AT91F_DBGU_Printk("the read data is (only display 255 byte):\n\r");
for(i=0;i<255;i++)
{
read_data[i]=Buffer_Read_Dataflash[i];
sprintf((char*) message,"0x%X",read_data[i]);
AT91F_DBGU_Printk((char*)message);
}
AT91F_DBGU_Printk("the read data is finish (1056 byte):\n\r");
//比较写入,与读出的数据
AT91F_DBGU_Printk("begin to compare data!\n\r");
//比较写入与读出的数据,如果不相等,则数据出错
for(i=0;i<BUFFER_SIZE_DATAFLASH;i++)
{
if(Buffer_Read_Dataflash[i]!=Buffer_Write_Dataflash[i]) {AT91F_DBGU_Printk("the data is error--test is failure!\n\r"); break;}
}
if(i==BUFFER_SIZE_DATAFLASH) { AT91F_DBGU_Printk("the test is right!\n\r");}//写入如读出的数据相等
//测试完,关闭SPI口
AT91F_SPI_Close(AT91C_BASE_SPI1);
*/
//####################################################################################################
//####################################################################################################
while(1)
{
wait(20);
Trace_Toggel_LED(LED1);
wait(20);
}// End while
}//* End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -