内容发布更新时间 : 2024/12/25 15:18:40星期一 下面是文章的全部内容请认真阅读。
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) {