ch375读写u盘C51示例源程序_第1页
ch375读写u盘C51示例源程序_第2页
ch375读写u盘C51示例源程序_第3页
ch375读写u盘C51示例源程序_第4页
ch375读写u盘C51示例源程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ch375读写u盘C51示例源程序#includedatatype.h#includeconsole.h#include44b0 x.h#include/*以下定义的详细说明请看CH375HF9.H文件*/#defineLIB_CFG_FILE_IO1/*文件读写的数据的复制方式,0为外部子程序,1为内部复制*/#defineLIB_CFG_INT_EN1/*CH375的INT#引脚连接方式接s3c44b0 x外部中断2引脚*/*单片机的RAM有限,其中CH375子程序用512字节,剩余RAM部分可以用于文件读写缓冲*/#defineFILE_DATA_BUF_LEN0 x2000/*外部RA

2、M的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度*/#includeCH375HF9.H#defineCH375Cmd*(volatileU8*)(0 x4000001)/*总线方式*/#defineCH375Dat*(volatileU8*)(0 x4000000)externU32MCLK;/*CH375主机文件系统接口*/*支持:FAT12/FAT16/FAT32*/*ARM单片机C语言的U盘文件读写示例程序*/*该程序将U盘中的/C51/CH375HFT.C文件中的小写字母转成大写字母后,写到新建的文件NEWFILE.TXT中,如果找不到原文件CH375HFT.C,那么该程序将显

3、示C51子目录下所有以CH375开头的文件名,并新建NEWFILE.TXT文件并写入提示信息,如果找不到C51子目录,那么该程序将显示根目录下的所有文件名,并新建NEWFILE.TXT文件并写入提示信息*/*CH375的INT#引脚采用查询方式处理数据复制方式为,内部复制,本程序适用于s3c44b0 x单片机,串口0输出监控信息,57600bps*/*ENDIAN=little*/voidmDelay1_2uS()/*至少延时1.2uS,根据单片机主频调整*/UINT32i;for(i=30;i!=0;i-);void_irqCH375Interrupt(void)/*CH375中断服务程序,

4、由CH375的INT#的低电平或者下降沿触发单片机中断*/rEXTINTPND=0 xf;/clearEXTINTPNDreg.rI_ISPC=BIT_EINT2;/clearpending_bitxWriteCH375Cmd(CMD_GET_STATUS);/*获取中断状态并取消中断请求*/CH375IntStatus=xReadCH375Data();/*获取中断状态*/if(CH375IntStatus=USB_INT_DISCONNECT)CH375DiskStatus=DISK_DISCONNECT;/*检测到USB设备断开事件*/elseif(CH375IntStatus=USB_

5、INT_CONNECT)CH375DiskStatus=DISK_CONNECT;/*检测到USB设备连接事件*/externvoidCH375Interrupt(void);voidCH375_PORT_INIT()/*初始化*/rINTCON=0 x5;rINTMOD=0 x0;/All=IRQmoderPDATG=0 xff;rPCONG=0 xffff;rPUPG=0 x0;/shouldbeenabledrEXTINT=0 x0;pISR_EINT2=(unsigned)CH375Interrupt;rINTMSK=(BIT_GLOBAL|BIT_EINT2);/startINTvo

6、idxWriteCH375Cmd(UINT8mCmd)/*外部定义的被CH375程序库调用的子程序,向CH375写命令*/mDelay1_2uS();mDelay1_2uS();/*至少延时1uS*/CH375Cmd=mCmd;mDelay1_2uS();mDelay1_2uS();/*至少延时2uS*/voidxWriteCH375Data(UINT8mData)/*外部定义的被CH375程序库调用的子程序,向CH375写数据*/CH375Dat=mDatamDelay1_2uS();/*至少延时1.2uS*/UINT8xReadCH375Data(void)/*外部定义的被CH375程序库

7、调用的子程序,从CH375读数据*/UINT8mData;mDelay1_2uS();/*至少延时1.2uS*/mData=(UINT8)CH375Dat;return(mData);/*延时指定毫秒时间,根据单片机主频调整,不精确*/voidmDelaymS(UINT32ms)UINT32i;while(ms-)for(i=25000;i!=0;i-);/*检查操作状态,如果错误则显示错误代码并停机*/voidmStopIfError(UINT8iError)if(iError=ERR_SUCCESS)return;/*操作成功*/printf(Error:%02Xn,(UINT16)iEr

8、ror);/*显示错误*/while(1)mDelaymS(100);/*为printf和getkey输入输出初始化串口*/voidmInitSTDIO()U16SERIAL_BAUD=57600;chartable_begin/*/n;chartable_beginvoidShowSysClock(intargc,char*argv)printf(Systemisrunning%dHzn,MCLK);intMain(void)unsignedchart;UINT8i,c,SecCount;UINT16NewSize,count;/*因为RAM容量有限,所以NewSize限制为16位,实际上如

9、果文件较大应该分几次读写并且将NewSize改为UINT32以便累计*/UINT8*pCodeStr;ChangePllValue(24,6,1);Port_Init();console_init(57600);next_line();puts(table_begin);puts(UsbforS3C44B0 xn);ShowSysClock(0,NULL);printf(SerialBaudrateis%dn,SERIAL_BAUD);next_line();puts(table_begin);puts(SystemInitialized.n);mDelaymS(50);/*延时100毫秒*/

10、printf(”测试CH375是否正常n);mDelaymS(60);/*延时50ms*/printf(nCH375_Init完成!);i=CH375LibInit();/*初始化CH375程序库和CH375芯片,操作成功返回0*/mStopIfError(i);/*其它电路初始化*/CH375_PORT_INIT();while(1)printf(n请插入U盘!n);while(CH375DiskStatus!=DISK_CONNECT)/*查询CH375中断并更新中断状态,等待U盘插入*/mDelaymS(10);/*检查U盘是否准备好,有些U盘不需要这一步,但是某些U盘必须要执行这一步才

11、能工作*/for(i=0;i11);/*读取原文件*/printf(Openn);strcpy(char*)mCmdParam.Open.mPathName,WC51WCH375HFT.C/*;文件名,该文件在C51子目录下*/i=CH375FileOpen();/*打开文件*/if(i=ERR_MISS_DIR|i=ERR_MISS_FILE)/*没有找到文件*/*列出文件*/if(i=ERR_MISS_DIR)pCodeStr=(UINT8*)*;/*C51子目录不存在则列出根目录下的文件*/elsepCodeStr=(UINT8*)C51CH375*;/*CH375HFT.C文件不存在则

12、列出C51子目录下的以CH375开头的文件*/printf(Listfile%sn,pCodeStr);for(c=0;cFILE_DATA_BUF_LEN)/*由于演示板用的62256只有32K字节,其中CH375子程序用512字节,所以只读取不超过63个扇区,也就是不超过32256字节*/SecCount=FILE_DATA_BUF_LEN/512;/*由于演示板用的62256只有32K字节,其中CH375子程序用512字节,所以只读取不超过63个扇区,也就是不超过32256字节*/NewSize=FILE_DATA_BUF_LEN;/*由于RAM有限所以限制长度*/else/*如果原文件

13、较小,那么使用原长度*/SecCount=(CH375vFileSize+511)9;/*(CH375vFileSize+511)/512,计算文件的扇区数,因为读写是以扇区为单位的,先加511是为了读出文件尾部不足1个扇区的部分*/NewSize=(UINT16)CH375vFileSize;/*原文件的长度*/printf(Size=%ld,Len=%d,Sec=%dn,CH375vFileSize,NewSize,(UINT16)SecCount);mCmdParam.Read.mSectorCount=SecCount;/*读取全部数据,如果超过60个扇区则只读取60个扇区*/*cur

14、rent_buffer=&FILE_DATA_BUF0;如果文件读写的数据的复制方式为外部子程序,那么需要设置存放数据的缓冲区的起始地址*/CH375vFileSize+=511;/*默认情况下,以扇区方式读取数据时,无法读出文件尾部不足1个扇区的部分,所以必须临时加大文件长度以读取尾部零头*/i=CH375FileRead();/*从文件读取数据*/CH375vFileSize-=511;/*恢复原文件长度*/mStopIfError(i);/*如果文件比较大,一次读不完,可以再调用CH375FileRead继续读取,文件指针自动向后移动while(1)c=32;每次读取32个扇区mCmdP

15、aram.Read.mSectorCount=c;指定读取的扇区数CH375FileRead();读完后文件指针自动后移处理数据if(mCmdParam.Read.mSectorCountc)break;实际读出的扇区数较小则说明文件已经结束如果希望从指定位置开始读写,可以移动文件指针mCmdParam.Locate.mSectorOffset=3;跳过文件的前3个扇区开始读写i=CH375FileLocate();mCmdParam.Read.mSectorCount=10;CH375FileRead();直接读取从文件的第(512*3)个字节开始的数据,前3个扇区被跳过如果希望将新数据添加

16、到原文件的尾部,可以移动文件指针i=CH375FileOpen();mCmdParam.Locate.mSectorOffset=0 xffffffff;移到文件的尾部,以扇区为单位,如果原文件是3字节,则从512字节开始添加i=CH375FileLocate();mCmdParam.Write.mSectorCount=10;CH375FileWrite();在原文件的后面添加数据*/printf(Closen);i=CH375FileClose();/*关闭文件*/mStopIfError(i);i=FILE_DATA_BUF100;FILE_DATA_BUF100=0;/*置字符串结束标

17、志,最多显示500个字符*/printf(Line1:%sn,FILE_DATA_BUF);FILE_DATA_BUF100=i;/*恢复原字符*/for(count=0;count=a&c=z)FILE_DATA_BUFcount=c-(a-A);#ifdefEN_DISK_WRITE/*子程序库支持写操作*/*产生新文件*/printf(Createn);strcpy(char*)mCmdParam.Create.mPathName,NEWFILE.TXT);/*新文件名,在根目录下*/i=CH375FileCreate();/*新建文件并打开,如果文件已经存在则先删除后再新建*/mSto

18、pIfError(i);printf(Writen);mCmdParam.Write.mSectorCount=SecCount;/*写入所有扇区的数据*/*current_buffer=&FILE_DATA_BUF0;如果文件读写的数据的复制方式为外部子程序,那么需要设置存放数据的缓冲区的起始地址*/i=CH375FileWrite();/*向文件写入数据*/mStopIfError(i);printf(Modifyn);mCmdParam.Modify.mFileAttr=0 xff;/*输入参数:新的文件属性,为0FFH则不修改*/mCmdParam.Modify.mFileTime=Oxffff;/*输入参数:新的文件时间,为0FFFFH则不修改,使用新建文件产生的默认时间*/mCmdParam.Modify.mFileDate=MAKE_FILE_DATE(2004,5,18);/*输入参数:新的文件日期:2004.05.18*/mCmdParam.Modify.mFileSize=NewSize;/*输入参数:如果原文件较小,那么新的文件长度与原文件一样长,否则被RAM所限,如果文件长度大于64KB,那么NewSize必须为UINT32*/i=CH375FileModify();/*修改

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论