ch375读写u盘C51示例源程序 下载本文

ch375读写u盘C51示例源程序 #include \#include \#include \#include

/* 以下定义的详细说明请看CH375HF9.H文件 */

#define LIB_CFG_FILE_IO 1 /* 文件读写的数据的复制方式,0为\外部子程序\为\内部复制\#define LIB_CFG_INT_EN 1 /* CH375的INT#引脚连接方式,接s3c44b0x外部中断2引脚\

/* 单片机的RAM有限,其中CH375子程序用512字节,剩余RAM部分可以用于文件读写缓冲 */ #define FILE_DATA_BUF_LEN 0x2000 /* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度 */

#include \

#define CH375Cmd *(volatile U8 *)(0x4000001) /*总线方式*/ #define CH375Dat *(volatile U8 *)(0x4000000) extern U32 MCLK;

/* CH375 主机文件系统接口*/ /* 支持: FAT12/FAT16/FAT32 */

/* ARM单片机C语言的U盘文件读写示例程序 */

/* 该程序将U盘中的/C51/CH375HFT.C文件中的小写字母转成大写字母后, 写到新建的文件NEWFILE.TXT中,

如果找不到原文件CH375HFT.C, 那么该程序将显示C51子目录下所有以CH375开头的文件名, 并新建NEWFILE.TXT文件并写入提示信息,

如果找不到C51子目录, 那么该程序将显示根目录下的所有文件名, 并新建NEWFILE.TXT文件并写入提示信息 */

/* CH375的INT#引脚采用查询方式处理, 数据复制方式为\内部复制\本程序适用于s3c44b0x单片机, 串口0输出监控信息,57600bps */ /* ENDIAN = \

void mDelay1_2uS( ) /* 至少延时1.2uS,根据单片机主频调整 */ { UINT32 i;

for ( i = 30; i != 0; i -- ); }

void __irq CH375Interrupt( void ) /* CH375中断服务程序,由CH375的INT#的低电平或者下降沿触发单片机中断 */ {

rEXTINTPND=0xf; //clear EXTINTPND reg.

rI_ISPC=BIT_EINT2; //clear pending_bit

xWriteCH375Cmd( CMD_GET_STATUS ); /* 获取中断状态并取消中断请求 */ CH375IntStatus = xReadCH375Data( ); /* 获取中断状态 */

if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT; /* 检测到USB设备断开事件 */

else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT; /* 检测到USB设备连接事件 */ }

extern void CH375Interrupt( void ); void CH375_PORT_INIT( ) /*初始化 */ {

rINTCON=0x5;

rINTMOD=0x0; //All=IRQ mode rPDATG=0xff; rPCONG=0xffff;

rPUPG=0x0; //should be enabled rEXTINT=0x0;

pISR_EINT2 = (unsigned)CH375Interrupt;

rINTMSK=~(BIT_GLOBAL|BIT_EINT2); //start INT }

void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定义的被CH375程序库调用的子程序,向CH375写命令 */ {

mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时1uS */ CH375Cmd = mCmd;

mDelay1_2uS( ); mDelay1_2uS( ); /* 至少延时2uS */ }

void xWriteCH375Data( UINT8 mData ) /* 外部定义的被CH375程序库调用的子程序,向CH375写数据 */ {

CH375Dat = mData

mDelay1_2uS( ); /* 至少延时1.2uS */ }

UINT8 xReadCH375Data( void ) /* 外部定义的被CH375程序库调用的子程序,从CH375读数据 */ {

UINT8 mData;

mDelay1_2uS( ); /* 至少延时1.2uS */

mData = (UINT8)CH375Dat;

return( mData ); }

/* 延时指定毫秒时间,根据单片机主频调整,不精确 */ void mDelaymS( UINT32 ms ) { UINT32 i;

while ( ms -- ) for ( i = 25000; i != 0; i -- ); }

/* 检查操作状态,如果错误则显示错误代码并停机 */ void mStopIfError( UINT8 iError ) {

if ( iError == ERR_SUCCESS ) return; /* 操作成功 */ printf( \/* 显示错误 */ while ( 1 ) {

mDelaymS( 100 ); } }

/* 为printf和getkey输入输出初始化串口 */ void mInitSTDIO( ) { }

U16 SERIAL_BAUD = 57600;

char table_begin[] = \

void ShowSysClock(int argc, char *argv[]) {

printf(\ystem is running @%dHz\\n\ }

int Main(void) {