📄 cf_test.c
字号:
/**************************************************************************** Copyright Faraday Technology Corp 2002-2003. All rights reserved. **--------------------------------------------------------------------------** Name: cf_test.c ** Description: CF test program ** Author: Ted Hsu *****************************************************************************/#include <stdlib.h>#include <stdio.h>#include <time.h>#include "fLib.h"#include "filectrl.h"#include "cf.h"#include "sd.h"#include "command.h"#include "DMA.h"extern CFCardStruct fLib_CFCard;UINT32 count,count1, TimeCount,TimeCount1; UINT32 CFDevCmd(CommandTableStruct_T *CmdTable);UINT32 SectorReadCmd(CommandTableStruct_T *CmdTable);UINT32 SectorWriteCmd(CommandTableStruct_T *CmdTable);UINT32 DirCmd(CommandTableStruct_T *CmdTable);UINT32 ChangeDirCmd(CommandTableStruct_T *CmdTable);UINT32 MakeCmd(CommandTableStruct_T *CmdTable);UINT32 DeleteCmd(CommandTableStruct_T *CmdTable);UINT32 RenameCmd(CommandTableStruct_T *CmdTable);UINT32 CopyCmd(CommandTableStruct_T *CmdTable);UINT32 ReadFileCmd(CommandTableStruct_T *CmdTable);void CF_quit(void);CommandTableStruct_T CF_CmdTable[] ={ {{"cfdev", NULL,}, "cfdev [-r pio/dma]\n", 0, 0, 0, 0, 2, 2, CFDevCmd, 0, 0, {NULL,}, { {"-r", IS_STR_WITH_OPTION, {"pio", "dma", NULL,}, NULL, 0, FALSE, "[-r] - re-initialize SD and set to PIO or DMA mode\n"}, {"-m", IS_STR_WITH_OPTION, {"memmap", "io16", "iopri", "iosec", "memwin", NULL,}, NULL, 0, FALSE, "[-r] - re-initialize SD and set to PIO or DMA mode\n"}, }, }, {{"sr", NULL,}, "sr sector_num sector_count\n", 0, 0, 2, 2, 0, 0, SectorReadCmd, 0, 0, { {IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "sector_num - which sector to read\n"}, {IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "sector_count - number of sectors to read\n"}, }, }, {{"sw", NULL,}, "sw pattern sector_num sector_count\n", 0, 0, 3, 3, 0, 0, SectorWriteCmd, 0, 0, { {IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "pattern - data to write\n"}, {IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "sector_num - which sector to write\n"}, {IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "sector_count - number of sectors to write\n"}, }, }, {{"dir", NULL,}, "dir [directory/file]\n", 0, 0, 1, 0, 0, 0, DirCmd, 0, 0, { {IS_STR, NULL, 0, FALSE, "[directory/file] - directory or file\n"}, }, }, {{"cd", NULL,}, "cd [directory]\n", 0, 0, 1, 1, 0, 0, ChangeDirCmd, 0, 0, { {IS_STR, NULL, 0, FALSE, "[directory] - directory\n"}, }, }, {{"mk", NULL,}, "mk [name] [-d]\n", 0, 0, 1, 1, 1, 0, MakeCmd, 0, 0, { {IS_STR, NULL, 0, FALSE, "[name] - file or directory name\n"}, }, { {"-d", IS_NULL, {NULL,}, NULL, 0, FALSE, "[-d] - [name] is directory\n"}, }, }, {{"remove", "del", NULL,}, "remove/del [name] [-d]\n", 0, 0, 1, 1, 1, 0, DeleteCmd, 0, 0, { {IS_STR, NULL, 0, FALSE, "[name] - file or directory name\n"}, }, { {"-d", IS_NULL, {NULL,}, NULL, 0, FALSE, "[-d] - [name] is directory\n"}, }, }, {{"rename", "ren", NULL,}, "rename/ren old_name new_name\n", 0, 0, 2, 2, 0, 0, RenameCmd, 0, 0, { {IS_STR, NULL, 0, FALSE, "old_name -\n"}, {IS_STR, NULL, 0, FALSE, "new_name -\n"}, }, }, {{"readfile", "rf", NULL,}, "readfile/rf file_name base length [-b/-h]\n", 0, 0, 3, 3, 2, 0, ReadFileCmd, 0, 0, { {IS_STR, NULL, 0, FALSE, "file_name -\n"}, {IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "base -\n"}, {IS_NUM|IS_USER_SYMBOL, NULL, 0, FALSE, "length - N bytes for reading\n"}, }, { {"-b", IS_NULL, {NULL,}, NULL, 0, FALSE, "[-b/-h] - " }, {"-h", IS_NULL, {NULL,}, NULL, 0, FALSE, NULL}, }, }, {{"copy", "cp", NULL,}, "copy/cp src_file dst_file\n", 0, 0, 2, 2, 0, 0, CopyCmd, 0, 0, { {IS_STR, NULL, 0, FALSE, "src_file -\n"}, {IS_STR, NULL, 0, FALSE, "dst_file -\n"}, }, }, {{"quit", NULL,}, "quit\n", 0, 0, 1, 0, 0, 0, CF_quit, 0, 0, { {IS_STR, NULL, 0, FALSE, "quit\n"}, }, }, {NULL, },};#define CF_DMA_CHANNEL 0//ivanint my_cf_quit=0;void CF_quit(){ my_cf_quit=1;}extern int ChipID;int CF_main(int argc, int *argv[]){ char Buf[0x80]; UINT32 Status; UINT32 i,mode,result; printf("Select the mode: 1.PIO 2.DMA\r\n"); scanf("%d",&mode); printf("\r");//ivan for FPGA testing modeif( ChipID == FPLAT_CPE120_ID2){//ivan for new IPif( ChipID == FPLAT_CPE120_ID2) //disale command interrupt *(unsigned int *)(CPE_CF_BASE+4) |= 0x400; fLib_CloseInt(1); if (!fLib_ConnectInt(1, fLib_CFCntrInterruptHandler)) return FALSE; //fLib_SetIntTrig(IRQ_CFC_CD,LEVEL,L_ACTIVE); fLib_SetIntTrig(1,LEVEL,H_ACTIVE); //ivan fLib_EnableInt(1); } else { fLib_CloseInt(IRQ_CFC_CD); if (!fLib_ConnectInt(IRQ_CFC_CD, fLib_CFCntrInterruptHandler)) return FALSE; fLib_SetIntTrig(IRQ_CFC_CD,LEVEL,L_ACTIVE); fLib_EnableInt(IRQ_CFC_CD); } fLib_InitDMA(FALSE, FALSE, 1 << CF_DMA_CHANNEL); // no-DMA, ATA-MEM if(mode==1) result=fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, FALSE, CF_DMA_CHANNEL, CF_MEM_MAP_MODE, 'C', SYS_CLK/2); // DMA, ATA-MEM else if(mode==2) result=fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, TRUE, CF_DMA_CHANNEL, CF_MEM_MAP_MODE, 'C', SYS_CLK/2); // DMA, ATA-IO //if(!fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, TRUE , CF_DMA_CHANNEL, CF_IO_SECCH_MODE , 'C', SYS_CLK/2)) if(!result) { printf("Can not found CF card, Please insert!!!\n"); Status = ReadCFControllerReg(HOST_STATUS_REG); while (1) { if ( (Status & CARD_DETECT_BIT)) break; Status = ReadCFControllerReg(HOST_STATUS_REG); } //return FALSE; } fLib_InsertCommand(CF_CmdTable); fLib_InitUserSymbol(NULL);#if 1 while(my_cf_quit==0) { printf("CF>>>\n"); gets(Buf); fLib_ExecuteCommand(Buf); } fLib_CloseInt(1); fLib_CloseInt(IRQ_CFC_CD); my_cf_quit=0;#else while (1) { for (i=2;i<123;i++) { sprintf(Buf,"cp p1.jpg f%d.jpg",i); //sprintf(Buf,"sr %d 4",i*8); fLib_ExecuteCommand(Buf); } }#endif return TRUE;}UINT32 CFDevCmd(CommandTableStruct_T *CmdTable){ if (CmdTable->Opt[0].IsSet) { fLib_CFCardRemove(&fLib_CFCard); if (CmdTable->Opt[0].Value == 0) { if (!fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, FALSE, CF_DMA_CHANNEL, CmdTable->Opt[1].Value, 'C', SYS_CLK/2)) { printf("Can not found CF card!!!\n"); return FALSE; } } else { if (!fLib_InitCFController(&fLib_CFCard, CPE_CF_BASE, ENABLE, CF_DMA_CHANNEL, CmdTable->Opt[1].Value, 'C', SYS_CLK/2)) { printf("Can not found CF card!!!\n"); return FALSE; } } } return TRUE;}UINT32 SectorReadCmd(CommandTableStruct_T *CmdTable){ INT8 Buf[0x800]; int i; /* ReadDriveIdentifyInfo(&fLib_CFCard); ReadCFCardCISInformation(&fLib_CFCard); printf("ok\n");*/ if(!fLib_ReadCFCardSector(&fLib_CFCard, CmdTable->Argu[0].Value, CmdTable->Argu[1].Value, 512, Buf)) { printf("read error!!!\n"); } else printf("\nread OK!!!\n");#if 0 for(i = 0; i < 512 * CmdTable->Argu[1].Value; i++) { if((i % 16) == 0) printf("\n%0.4X ", i); printf("%0.2X ", Buf[i]); } return OK_COMMAND;#endif return OK_COMMAND;}UINT32 SectorWriteCmd(CommandTableStruct_T *CmdTable){ INT8 Buf[0x800]; int i; for(i = 0; i < 512;i++) Buf[i] = CmdTable->Argu[0].Value + i; if(!fLib_WriteCFCardSector(&fLib_CFCard, CmdTable->Argu[1].Value, CmdTable->Argu[2].Value, 512, Buf)) { printf("Write error!!!\n"); return ERROR_COMMAND; } else printf("Write OK!!!\n"); return OK_COMMAND;}UINT32 DirCmd(CommandTableStruct_T *CmdTable){ INT8 MsgStr[0x800]; if(!fLib_DirDirectory((CmdTable->Argu[0].IsSet ? CmdTable->Argu[0].Str : NULL), MsgStr)) return ERROR_COMMAND; printf(MsgStr); return OK_COMMAND;}UINT32 ChangeDirCmd(CommandTableStruct_T *CmdTable){ if(fLib_ChangeDirectory(CmdTable->Argu[0].Str)) { printf("Change to %s directory OK!!!\n", CmdTable->Argu[0].Str); return OK_COMMAND; } else { printf("Change to %s directory error!!!\n", CmdTable->Argu[0].Str); } return ERROR_COMMAND;}UINT32 MakeCmd(CommandTableStruct_T *CmdTable){ if(CmdTable->Opt[0].IsSet) { // make directory if(fLib_MakeDirectory(CmdTable->Argu[0].Str)) { printf("Make %s directory OK!!!\n", CmdTable->Argu[0].Str); return OK_COMMAND; } } else { if(fLib_MakeEmptyFile(CmdTable->Argu[0].Str)) { printf("Make %s file OK!!!\n", CmdTable->Argu[0].Str); return OK_COMMAND; } } printf("Make %s file or directory error!!!\n", CmdTable->Argu[0].Str); return ERROR_COMMAND;}UINT32 DeleteCmd(CommandTableStruct_T *CmdTable){ if (CmdTable->Opt[0].IsSet) { // delete directory if (fLib_DeleteDirectory(CmdTable->Argu[0].Str)) { printf("Del %s directory OK!!!\n", CmdTable->Argu[0].Str); return OK_COMMAND; } } else { // delete file if (remove(CmdTable->Argu[0].Str) != -1) { printf("Del %s file OK!!!\n", CmdTable->Argu[0].Str); return OK_COMMAND; } } printf("Del %s directory or file error!!!\n", CmdTable->Argu[0].Str); return ERROR_COMMAND;}UINT32 RenameCmd(CommandTableStruct_T *CmdTable){ if(rename(CmdTable->Argu[0].Str, CmdTable->Argu[1].Str) != 0) { printf("Can not rename %s file!!!\n", CmdTable->Argu[0].Str); return ERROR_COMMAND; } printf("%s file has been rename to %s!\n", CmdTable->Argu[0].Str, CmdTable->Argu[1].Str); return OK_COMMAND;}UINT32 CopyCmd(CommandTableStruct_T *CmdTable){ FILE *src, *dst; INT8 *buf; INT32 nRead; UINT32 StartTime, EndTime; if((src = fopen(CmdTable->Argu[0].Str, "r")) == NULL) { printf("Can not open %s file for reading\n", CmdTable->Argu[0].Str); return ERROR_COMMAND; } if((dst = fopen(CmdTable->Argu[1].Str, "w")) == NULL) { printf("Can not open %s file for writting\n", CmdTable->Argu[1].Str); fclose(src); return ERROR_COMMAND; } buf = malloc(5000); StartTime = clock(); while(!feof(src)) { nRead = fread(buf, 1, 4096, src); //printf("nread=%d\n", nRead); fwrite(buf, 1, nRead, dst); } EndTime = clock(); printf("Executes %d ticks\n", EndTime-StartTime); fclose(dst); fclose(src); free(buf); return OK_COMMAND;}UINT32 ReadFileCmd(CommandTableStruct_T *CmdTable){ return TRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -