BF533实现CF卡读写校验功能
0赞
发表于 5/4/2012 8:31:06 AM
阅读(2291)
#include "cdefBF533.h" #include "ccblkfn.h" #include#include "dm_bf5xx.h" #include "dm_cpu.h" #include "dm_types.h" volatile uint_t decLow, decHigh ; extern int_t SanFileCont; uint16_t Boot_Sector[256]; uint16_t W_Sector_Data[256]; uint16_t R_Sector_Data[256]; uint16_t Root_Sector[256]; /**************************************************************************** * 名称 : Test_data * 功能 : 生成测试数据 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ Test_data() { int_t i; for(i=0;i<512;i++) W_Sector_Data[i] = i; } /**************************************************************************** * 名称 : CheckTest * 功能 : 检验测试数据,读写100个扇区,将写入的数据读出做比较。 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ CheckTest() { int_t cont,tem; int_t flag = 1; printf("CheckTest Data,Waiting...\n\r"); for(cont=1;cont<100;cont++) { Write_LBA(cont,W_Sector_Data); Read_LBA(cont,R_Sector_Data); for(tem=0;tem<256;tem++) { if(W_Sector_Data[tem] != R_Sector_Data[tem]) { flag = 0; break; } } } if(flag) printf("CheckTest is OK\n\r"); else printf("CheckTest is ERROE!\n\r"); } /**************************************************************************** * 名称 : Init_CfCard * 功能 : 配置CF卡工作模式 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ void Init_CfCard(void) { *ConfigOption_Reg=PIOMODE; // 00010 *CardStatus_Reg=0x00; *CardCopy_Reg=0x00; } uint_t statusok=0; /**************************************************************************** * 名称 : Init_PCMCIAIO * 功能 : 配置CF卡工作模式为PIO模式 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ void Init_PCMCIAIO(void) { int_t status,time=100; Init_EBIU(); *pCtrIner_Flag_OE= ~PCM_MEM; //选择MEMORY模式 udelay(100); CF_Soft_Reset(); Init_CfCard(); //配置CF模式为IO模式 *pCtrIner_Flag_OE = ~PCM_IO; udelay(1000); //延时等待进入IO模式 do{ mdelay(100); time--; status = *STATUS_REGISTER; }while((time!=0)&(status != 0x5000)); if(status==0x5000) { printf("STATUS_REG is %x\n\r",*STATUS_REGISTER ); statusok=1; } else { printf("time out... \n\r"); printf("PCMCIA error !Please check it.. \n\r" ); statusok=0; } } /**************************************************************************** * 名称 : Check_Pcmcia * 功能 : 配置CF卡工作模式为PIO模式 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ void Check_Pcmcia(void) { if(statusok==1) { DBR_Sector(); Test_data(); Write_LBA(10,W_Sector_Data); Read_LBA(10,R_Sector_Data); CheckTest(); statusok =0; } } /**************************************************************************** * 名称 : main * 功能 : CF卡读写测试主函数 * 入口参数 :无 * 出口参数 :无 ****************************************************************************/ void main(void) { int_t i; Set_PLL(22,5); printf("CF Card initialization...\n\r"); Init_PCMCIAIO(); printf("Make Test Data...\n\r"); Test_data(); CheckTest(); printf("Test END\n\r"); while(1); }
