⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udisk.lis

📁 AVR单片机平台Atmega32+CH375A芯片读写U盘代码
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 0000           ;                               mCmdParam.ByteWrite.mByteCount);
 0000           ;                       OperReturn = CH375ByteWrite( );
 0000           ;                       OFF_WR;
 0000           ;                       if(OperReturn)
 0000           ;                       {
 0000           ;                               ReturnErrorCode(OperReturn);
 0000           ;                       }
 0000           ;                       else
 0000           ;                       {
 0000           ;                 nComBuff.AckData.VeryData.RealWriteByte = mCmdParam.ByteWrite.mByteCount;
 0000           ;                           RETURN_SUCCESS;
 0000           ;                 nComBuff.AckData.FrameLen = nComBuff.AckData.VeryData.RealWriteByte + 5;  //整个帧的长度
 0000           ;                       }
 0000           ;               }
 0000           ;       }
 0000           ;       B_status = S_OPEN;
 0000           ; }
 0000           ; 
 0000           ; /************************************************************************/
 0000           ; /* 模块的扇区读取函数
 0000           ; 在mCmdParam.ReadX.mSectorCount中放入读取的扇区数目
 0000           ; 在mCmdParam.ReadX.mDataBuffer中                                                                     */
 0000           ; /************************************************************************/
 0000           ; void ModuleSectorRead(void)
 0000           ; {
 0000           ;     if(CH375DiskStatus == DISK_OPEN_FILE)
 0000           ;     {
 0000           ;         mCmdParam.ReadX.mSectorCount = 1;
 0000           ;         LIGHT_RD;
 0000           ;         OperReturn = CH375FileRead();
 0000           ;         OFF_RD;
 0000           ;         if(OperReturn)
 0000           ;         {
 0000           ;             ReturnErrorCode(OperReturn);
 0000           ;         }
 0000           ;         else
 0000           ;         {
 0000           ;             CopyBytes(nComBuff.AckData.VeryData.ReadDataVer.DataBuff,FILE_DATA_BUF,512);
 0000           ;             nComBuff.AckData.VeryData.ReadDataVer.ReadBytes = mCmdParam.ReadX.mSectorCount;
 0000           ;             RETURN_SUCCESS;
 0000           ;             nComBuff.ReqData.FrameLen = (nComBuff.AckData.VeryData.ReadDataVer.ReadBytes<<9) + 5;
 0000           ;         }
 0000           ;     }
 0000           ;     else
 0000           ;     {
 0000           ;         ReturnErrorCode(A_BYTEMODE);
 0000           ;     }
 0000           ; }
 0000           ; 
 0000           ; /************************************************************************/
 0000           ; /* 模块的扇区写入函数
 0000           ; 在                                                                     */
 0000           ; /************************************************************************/
 0000           ; void ModuleSectorWrite(void)
 0000           ; {
 0000           ;     if(CH375DiskStatus == DISK_OPEN_FILE)
 0000           ;     {
 0000           ;         mCmdParam.Write.mSectorCount = nComBuff.ReqData.VeryData.WriteDataVer.Bytes;   /*把要写入的扇区数确定*/
 0000           ;         CopyBytes(FILE_DATA_BUF,nComBuff.ReqData.VeryData.WriteDataVer.DataBuff,512);
 0000           ;         LIGHT_WR;
 0000           ;         OperReturn = CH375FileWrite( );
 0000           ;         OFF_WR;
 0000           ;         if(OperReturn)
 0000           ;         {
 0000           ;             ReturnErrorCode(OperReturn);
 0000           ;         }
 0000           ;         else
 0000           ;         {
 0000           ;             nComBuff.AckData.VeryData.RealWriteByte = mCmdParam.Write.mSectorCount;
 0000           ;             RETURN_SUCCESS;
 0000           ;             nComBuff.AckData.FrameLen = 5;
 0000           ;         }
 0000           ;     }
 0000           ;     else
 0000           ;     {
 0000           ;         ReturnErrorCode(A_BYTEMODE);
 0000           ;     }
 0000           ; 
 0000           ;         
 0000           ; }
 0000           ; /************************************************************************/
 0000           ; /* 模块编辑文件属性函数
 0000           ; 修改文件的属性,日期,长度,时间,
 0000           ;                                                                    */
 0000           ; /************************************************************************/
 0000           ; 
 0000           ; /************************************************************************/
 0000           ; /* 模块文件的偏移
 0000           ; 入口:ModeLocate ,0--字节模式,!0--扇区模式
 0000           ;                                                                         */
 0000           ; /************************************************************************/
 0000           ; void ModuleSetOffset(uchar ModeLocate)
 0000           ; {
 0000           ;     if(ModeLocate == LOCATE_SECTOR_MODE)
 0000           ;     {
 0000           ;         mCmdParam.Locate.mSectorOffset = nComBuff.ReqData.VeryData.SetOffset;
 0000           ;         OperReturn = CH375FileLocate();
 0000           ;         if(OperReturn)
 0000           ;             ReturnErrorCode(OperReturn);
 0000           ;         else
 0000           ;         {
 0000           ;             RETURN_SUCCESS;
 0000           ;             nComBuff.AckData.VeryData.RealOffset = mCmdParam.Locate.mSectorOffset;
 0000           ;             nComBuff.AckData.FrameLen = 7;
 0000           ;         }
 0000           ;     }
 0000           ;     else
 0000           ;     {
 0000           ;         mCmdParam.ByteLocate.mByteOffset = nComBuff.ReqData.VeryData.SetOffset;
 0000           ;         OperReturn = CH375ByteLocate( );
 0000           ;         if(OperReturn)
 0000           ;             ReturnErrorCode(OperReturn);
 0000           ;         else
 0000           ;         {
 0000           ;             RETURN_SUCCESS;
 0000           ;             nComBuff.AckData.VeryData.RealOffset = mCmdParam.ByteLocate.mByteOffset;
 0000           ;             nComBuff.AckData.FrameLen = 7;
 0000           ;         }
 0000           ;     }
 0000           ; }
 0000           ; /************************************************************************/
 0000           ; /* 如果是有文件打开的状态,帧处理函数                                    */
 0000           ; /************************************************************************/
 0000           ; void StatusOpen(void)
 0000           ; {
 0000           ;       uint rdcount;
 0000           ;       switch(nComBuff.ReqData.Com)
 0000                   .dbline 674
 0000           ;       {
 0000 80E0              ldi R24,<_FILE_DATA_BUF
 0002 90E0              ldi R25,>_FILE_DATA_BUF
 0004 90931D06          sts _mCmdParam+8+1,R25
 0008 80931C06          sts _mCmdParam+8,R24
 000C                   .dbline 675
 000C           ;               case R_RD_FILE_DATA:
 000C 0E940000          xcall _CH375FileReadX
 0010                   .dbline -2
 0010           L33:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbend
 0012                   .dbfunc e CH375FileWrite _CH375FileWrite fc
                        .even
 0012           _CH375FileWrite::
 0012                   .dbline -1
 0012                   .dbline 679
 0012           ;                       ModuleByteRead();
 0012           ;                       break;
 0012           ;               case R_RD_FILE_ATTR:
 0012           ;                       ModuleAttrRead();
 0012                   .dbline 680
 0012           ;                       break;
 0012 80E0              ldi R24,<_FILE_DATA_BUF
 0014 90E0              ldi R25,>_FILE_DATA_BUF
 0016 90931D06          sts _mCmdParam+8+1,R25
 001A 80931C06          sts _mCmdParam+8,R24
 001E                   .dbline 681
 001E           ;               case R_WR_FILE_DATA:
 001E 0E940000          xcall _CH375FileWriteX
 0022                   .dbline -2
 0022           L35:
 0022                   .dbline 0 ; func end
 0022 0895              ret
 0024                   .dbend
 0024                   .dbfunc e CH375FileQuery _CH375FileQuery fc
 0024           ;          count -> R20
 0024           ;            buf -> R22,R23
                        .even
 0024           _CH375FileQuery::
 0024 0E940000          xcall push_gset2
 0028                   .dbline -1
 0028                   .dbline 700
 0028           ;                       ModuleByteWrite();
 0028           ;                       break;
 0028           ;         case R_RD_FILE_SECTOR:
 0028           ;             ModuleSectorRead();
 0028           ;             break;
 0028           ;         case R_WR_FILE_SECTOR:
 0028           ;             ModuleSectorWrite();
 0028           ;             break;
 0028           ;               case R_CLOSEFILE:
 0028           ;                       mCmdParam.Close.mUpdateLen = 1;                    //自动更新文件长度
 0028           ;                       OperReturn = CH375FileClose( );
 0028           ;                       if(OperReturn)
 0028           ;                       {
 0028           ;                               ReturnErrorCode(OperReturn);
 0028           ;                       }
 0028           ;                       else
 0028           ;                       {
 0028           ;                               ReturnErrorCode(A_SUCCESS);
 0028           ;                       }
 0028                   .dbline 703
 0028           ;                       B_status = S_READY;
 0028           ;                       break;
 0028           ;               case R_SET_OFFSETBYTE:
 0028 60E0              ldi R22,<_mCmdParam
 002A 70E0              ldi R23,>_mCmdParam
 002C                   .dbline 704
 002C 49E0              ldi R20,9
 002E 06C0              xjmp L41
 0030           L38:
 0030                   .dbline 704
 0030                   .dbline 705
 0030 8FEF              ldi R24,255
 0032 FB01              movw R30,R22
 0034 8083              std z+0,R24
 0036                   .dbline 706
 0036 6F5F              subi R22,255  ; offset = 1
 0038 7F4F              sbci R23,255
 003A                   .dbline 707
 003A           L39:
 003A                   .dbline 704
 003A 4A95              dec R20
 003C           L41:
 003C                   .dbline 704
 003C           ;             ModuleSetOffset(LOCATE_BYTE_MODE);
 003C 4423              tst R20
 003E C1F7              brne L38
 0040                   .dbline 708
 0040           ;                       break;
 0040           ;         case R_SET_OFFSETSECTOR:
 0040           ;             ModuleSetOffset(LOCATE_SECTOR_MODE);
 0040           ;             break;
 0040 0E940000          xcall _CH375FileModify
 0044                   .dbline -2
 0044           L37:
 0044 0E940000          xcall pop_gset2
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbsym r count 20 c
 004A                   .dbsym r buf 22 pc
 004A                   .dbend
 004A                   .dbfunc e xQueryInterrupt _xQueryInterrupt fV
                        .even
 004A           _xQueryInterrupt::
 004A                   .dbline -1
 004A                   .dbline 715
 004A           ; 
 004A           ;               case R_MODIFY_ATTR:
 004A           ;                       mCmdParam.Modify.mFileAttr = nComBuff.ReqData.VeryData.ModifyFileAttrVer.FileAttr;
 004A           ;                       mCmdParam.Modify.mFileDate = nComBuff.ReqData.VeryData.ModifyFileAttrVer.FileDate;
 004A           ;                       mCmdParam.Modify.mFileSize = nComBuff.ReqData.VeryData.ModifyFileAttrVer.FileSize;
 004A           ;                       mCmdParam.Modify.mFileTime = nComBuff.ReqData.VeryData.ModifyFileAttrVer.FileTime;
 004A           ;                       OperReturn = CH375FileModify();
 004A           L43:
 004A                   .dbline 716
 004A           L44:
 004A                   .dbline 716
 004A           ;                       if(OperReturn)
 004A 8299              sbic 0x10,2
 004C FECF              rjmp L43
 004E                   .dbline 717
 004E           ;                       {
 004E 02E2              ldi R16,34
 0050 D8D0              xcall _xWriteCH375Cmd
 0052                   .dbline 718
 0052           ;                               ReturnErrorCode(OperReturn);
 0052 FFD0              xcall _xReadCH375Data
 0054 00930000          sts _CH375IntStatus,R16
 0058                   .dbline 719
 0058           ;                       }
 0058 80910000          lds R24,_CH375IntStatus
 005C 8631              cpi R24,22
 005E 21F4              brne L46
 0060                   .dbline 719
 0060 81E0              ldi R24,1
 0062 80930000          sts _CH375DiskStatus,R24
 0066 07C0              xjmp L47
 0068           L46:
 0068                   .dbline 720
 0068           ;                       else
 0068 80910000          lds R24,_CH375IntStatus
 006C 8531              cpi R24,21
 006E 19F4              brne L48
 0070                   .dbline 720
 0070 82E0              ldi R24,2
 0072 80930000          sts _CH375DiskStatus,R24

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -