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

📄 bulkonly.lis

📁 采用Atmeag162单片机来制作的U盘程序源码
💻 LIS
字号:
                        .module BulkOnly.C
                        .area text(rom, con, rel)
 0000                   .dbfile D:\AvrUSB\BulkOnly.C
 0000                   .dbfunc e Bulk_CBWHandler _Bulk_CBWHandler fV
                        .even
 0000           _Bulk_CBWHandler::
 0000 2297              sbiw R28,2
 0002                   .dbline -1
 0002                   .dbline 23
 0002           ; #include <iom162v.h>
 0002           ; #include <macros.h>
 0002           ; 
 0002           ; #include "BulkOnly.H"
 0002           ; #include "D12CI.H"
 0002           ; #include "MAIN.H" 
 0002           ; 
 0002           ; 
 0002           ; extern CONTROL_XFER ControlData;
 0002           ; extern EPPFLAGS bEPPflags;
 0002           ; BULK_STRUCT  Bulk_Block;
 0002           ; 
 0002           ; extern BULK_CONTROL  Bulk_Control_r;
 0002           ; extern BULK_CONTROL  Bulk_Control_w;
 0002           ; extern unsigned char PageBuf[512];
 0002           ; 
 0002           ; #define Bulk_CBW  Bulk_Block.cbw
 0002           ; #define Bulk_CSW  Bulk_Block.csw
 0002           ; #define CBW_bCBWCBLength Bulk_Block.cbw.dCBWDataTransferLength
 0002           ; #define CSW_dCSWDataResidue Bulk_Block.csw.dCSWDataResidue
 0002           ; 
 0002           ; void Bulk_CBWHandler( void )
 0002           ; {   
 0002                   .dbline 24
 0002           ;     if(sizeof(CBW)==D12_ReadEndpoint(4,EP2_PACKET_SIZE,(unsigned char*)&Bulk_CBW))
 0002 80E0              ldi R24,<_Bulk_Block
 0004 90E0              ldi R25,>_Bulk_Block
 0006 9983              std y+1,R25
 0008 8883              std y+0,R24
 000A 20E4              ldi R18,64
 000C 04E0              ldi R16,4
 000E 0E940000          xcall _D12_ReadEndpoint
 0012 0F31              cpi R16,31
 0014 31F4              brne L2
 0016                   .dbline 25
 0016           ;     {
 0016                   .dbline 26
 0016           ;           if(IsCBWValid())
 0016 90D0              xcall _IsCBWValid
 0018 0023              tst R16
 001A 19F0              breq L4
 001C                   .dbline 27
 001C           ;           {                 
 001C                   .dbline 28
 001C           ;                   RBC_Hander();
 001C 0E940000          xcall _RBC_Hander
 0020                   .dbline 29
 0020           ;                       return;
 0020 05C0              xjmp L1
 0022           L4:
 0022                   .dbline 31
 0022           ;           }
 0022           ;       }
 0022           L2:
 0022                   .dbline 32
 0022           ;       Bulk_ErrorHandler(CSW_PHASE_ERROR,0);
 0022 2227              clr R18
 0024 3327              clr R19
 0026 02E0              ldi R16,2
 0028 AAD0              xcall _Bulk_ErrorHandler
 002A                   .dbline 33
 002A           ;       Bulk_CSWHandler();              
 002A 02D0              xcall _Bulk_CSWHandler
 002C                   .dbline -2
 002C                   .dbline 34
 002C           ; }
 002C           L1:
 002C 2296              adiw R28,2
 002E                   .dbline 0 ; func end
 002E 0895              ret
 0030                   .dbend
 0030                   .dbfunc e Bulk_CSWHandler _Bulk_CSWHandler fV
                        .even
 0030           _Bulk_CSWHandler::
 0030 2297              sbiw R28,2
 0032                   .dbline -1
 0032                   .dbline 36
 0032           ; void Bulk_CSWHandler( void )
 0032           ; {
 0032                   .dbline 37
 0032           ;    D12_WriteEndpoint(5,sizeof(CSW),(unsigned char *)&Bulk_CSW);  
 0032 80E0              ldi R24,<_Bulk_Block
 0034 90E0              ldi R25,>_Bulk_Block
 0036 9983              std y+1,R25
 0038 8883              std y+0,R24
 003A 2DE0              ldi R18,13
 003C 05E0              ldi R16,5
 003E 0E940000          xcall _D12_WriteEndpoint
 0042                   .dbline 38
 0042           ;    bEPPflags.bits.bulk_state=BULK_IDLE;  
 0042 80910200          lds R24,_bEPPflags+2
 0046 887F              andi R24,248
 0048 80930200          sts _bEPPflags+2,R24
 004C                   .dbline -2
 004C                   .dbline 39
 004C           ; }
 004C           L6:
 004C 2296              adiw R28,2
 004E                   .dbline 0 ; func end
 004E 0895              ret
 0050                   .dbend
 0050                   .dbfunc e Bulk_code_transmit _Bulk_code_transmit fV
 0050           ;            len -> R12,R13
 0050           ;       pRomData -> R10,R11
                        .even
 0050           _Bulk_code_transmit::
 0050 0E940000          xcall push_gset4
 0054 6901              movw R12,R18
 0056 5801              movw R10,R16
 0058 2297              sbiw R28,2
 005A                   .dbline -1
 005A                   .dbline 41
 005A           ; void Bulk_code_transmit(const unsigned char * pRomData,unsigned short len)
 005A           ; {
 005A                   .dbline 42
 005A           ;   ControlData.wCount=0; 
 005A 2224              clr R2
 005C 3324              clr R3
 005E 30920B00          sts _ControlData+10+1,R3
 0062 20920A00          sts _ControlData+10,R2
 0066                   .dbline 43
 0066           ;   ControlData.pCData=pRomData;
 0066 B0920F00          sts _ControlData+14+1,R11
 006A A0920E00          sts _ControlData+14,R10
 006E                   .dbline 44
 006E           ;   ControlData.wLength=len;
 006E D0920900          sts _ControlData+8+1,R13
 0072 C0920800          sts _ControlData+8,R12
 0076                   .dbline 45
 0076           ;   if(ControlData.wLength>=CBW_bCBWCBLength)
 0076 40900A00          lds R4,_Bulk_Block+8+2
 007A 50900B00          lds R5,_Bulk_Block+8+2+1
 007E 20900800          lds R2,_Bulk_Block+8
 0082 30900900          lds R3,_Bulk_Block+8+1
 0086 3601              movw R6,R12
 0088 8824              clr R8
 008A 9924              clr R9
 008C 6214              cp R6,R2
 008E 7304              cpc R7,R3
 0090 8404              cpc R8,R4
 0092 9504              cpc R9,R5
 0094 20F0              brlo L12
 0096                   .dbline 46
 0096           ;         ControlData.wLength=CBW_bCBWCBLength; 
 0096 30920900          sts _ControlData+8+1,R3
 009A 20920800          sts _ControlData+8,R2
 009E           L12:
 009E                   .dbline 47
 009E           ;   Bulk_ErrorHandler(CSW_GOOD,ControlData.wLength);              
 009E 20910800          lds R18,_ControlData+8
 00A2 30910900          lds R19,_ControlData+8+1
 00A6 0027              clr R16
 00A8 6AD0              xcall _Bulk_ErrorHandler
 00AA                   .dbline 48
 00AA           ;   if(ControlData.wLength>=EP2_PACKET_SIZE)
 00AA 80910800          lds R24,_ControlData+8
 00AE 90910900          lds R25,_ControlData+8+1
 00B2 8034              cpi R24,64
 00B4 E0E0              ldi R30,0
 00B6 9E07              cpc R25,R30
 00B8 E8F0              brlo L19
 00BA                   .dbline 49
 00BA           ;   {
 00BA                   .dbline 50
 00BA           ;      D12_CWriteEndpoint(5,EP2_PACKET_SIZE,ControlData.pCData);
 00BA 20900E00          lds R2,_ControlData+14
 00BE 30900F00          lds R3,_ControlData+14+1
 00C2 3982              std y+1,R3
 00C4 2882              std y+0,R2
 00C6 20E4              ldi R18,64
 00C8 30E0              ldi R19,0
 00CA 05E0              ldi R16,5
 00CC 10E0              ldi R17,0
 00CE 0E940000          xcall _D12_CWriteEndpoint
 00D2                   .dbline 51
 00D2           ;      ControlData.wCount+=EP2_PACKET_SIZE;
 00D2 80910A00          lds R24,_ControlData+10
 00D6 90910B00          lds R25,_ControlData+10+1
 00DA 805C              subi R24,192  ; offset = 64
 00DC 9F4F              sbci R25,255
 00DE 90930B00          sts _ControlData+10+1,R25
 00E2 80930A00          sts _ControlData+10,R24
 00E6                   .dbline 52
 00E6           ;      bEPPflags.bits.bulk_state=BULK_REQEST_TRANS;    
 00E6 80910200          lds R24,_bEPPflags+2
 00EA 887F              andi R24,248
 00EC 8360              ori R24,3
 00EE 80930200          sts _bEPPflags+2,R24
 00F2                   .dbline 53
 00F2           ;   }
 00F2 1EC0              xjmp L20
 00F4           L19:
 00F4                   .dbline 55
 00F4                   .dbline 56
 00F4 B982              std y+1,R11
 00F6 A882              std y+0,R10
 00F8 20910800          lds R18,_ControlData+8
 00FC 30910900          lds R19,_ControlData+8+1
 0100 05E0              ldi R16,5
 0102 10E0              ldi R17,0
 0104 0E940000          xcall _D12_CWriteEndpoint
 0108                   .dbline 57
 0108 20900800          lds R2,_ControlData+8
 010C 30900900          lds R3,_ControlData+8+1
 0110 40900A00          lds R4,_ControlData+10
 0114 50900B00          lds R5,_ControlData+10+1
 0118 420C              add R4,R2
 011A 531C              adc R5,R3
 011C 50920B00          sts _ControlData+10+1,R5
 0120 40920A00          sts _ControlData+10,R4
 0124                   .dbline 58
 0124 80910200          lds R24,_bEPPflags+2
 0128 887F              andi R24,248
 012A 8260              ori R24,2
 012C 80930200          sts _bEPPflags+2,R24
 0130                   .dbline 59
 0130           L20:
 0130                   .dbline -2
 0130                   .dbline 60
 0130           ;   else
 0130           ;   {     
 0130           ;      D12_CWriteEndpoint(5,ControlData.wLength,pRomData);
 0130           ;      ControlData.wCount+=ControlData.wLength;
 0130           ;      bEPPflags.bits.bulk_state=BULK_DATA_END;
 0130           ;   }
 0130           ; }
 0130           L8:
 0130 2296              adiw R28,2
 0132 0E940000          xcall pop_gset4
 0136                   .dbline 0 ; func end
 0136 0895              ret
 0138                   .dbsym r len 12 s
 0138                   .dbsym r pRomData 10 pkc
 0138                   .dbend
 0138                   .dbfunc e IsCBWValid _IsCBWValid fc
                        .even
 0138           _IsCBWValid::
 0138 0E940000          xcall push_gset2
 013C                   .dbline -1
 013C                   .dbline 62
 013C           ; BOOLEAN IsCBWValid(void)
 013C           ; {
 013C                   .dbline 63
 013C           ;   if((Bulk_CBW.dCBWSignature==CBW_SIGNATURE)&&
 013C 45E5              ldi R20,85
 013E 53E5              ldi R21,83
 0140 62E4              ldi R22,66
 0142 73E4              ldi R23,67
 0144 40900200          lds R4,_Bulk_Block+2
 0148 50900300          lds R5,_Bulk_Block+2+1
 014C 20900000          lds R2,_Bulk_Block
 0150 30900100          lds R3,_Bulk_Block+1
 0154 2416              cp R2,R20
 0156 3506              cpc R3,R21
 0158 4606              cpc R4,R22
 015A 5706              cpc R5,R23
 015C 61F4              brne L30
 015E 81E0              ldi R24,1
 0160 20900D00          lds R2,_Bulk_Block+13
 0164 8215              cp R24,R2
 0166 38F0              brlo L30
 0168 80E1              ldi R24,16
 016A 20900E00          lds R2,_Bulk_Block+14
 016E 8215              cp R24,R2
 0170 10F0              brlo L30
 0172                   .dbline 66
 0172           ;                        (Bulk_CBW.bCBWLUN<=1)&&
 0172           ;            (Bulk_CBW.bCBWCBLength<=MAX_CDBLEN))
 0172           ;               return TRUE;
 0172 01E0              ldi R16,1
 0174 01C0              xjmp L29
 0176           L30:
 0176                   .dbline 68
 0176           ;       else
 0176           ;               return FALSE;
 0176 0027              clr R16
 0178                   .dbline -2
 0178           L29:
 0178 0E940000          xcall pop_gset2
 017C                   .dbline 0 ; func end
 017C 0895              ret
 017E                   .dbend
 017E                   .dbfunc e Bulk_ErrorHandler _Bulk_ErrorHandler fV
 017E           ;     wByteCount -> R18,R19
 017E           ;      CSWStatus -> R16
                        .even
 017E           _Bulk_ErrorHandler::
 017E 0E940000          xcall push_gset2
 0182                   .dbline -1
 0182                   .dbline 71
 0182           ; }
 0182           ; void Bulk_ErrorHandler(unsigned char CSWStatus,unsigned int wByteCount)
 0182           ; {
 0182                   .dbline 72
 0182           ;   Bulk_CSW.dCSWDataResidue=Bulk_CBW.dCBWDataTransferLength-wByteCount;
 0182 1901              movw R2,R18
 0184 4424              clr R4
 0186 5524              clr R5
 0188 80900A00          lds R8,_Bulk_Block+8+2
 018C 90900B00          lds R9,_Bulk_Block+8+2+1
 0190 60900800          lds R6,_Bulk_Block+8
 0194 70900900          lds R7,_Bulk_Block+8+1
 0198 6218              sub R6,R2
 019A 7308              sbc R7,R3
 019C 8408              sbc R8,R4
 019E 9508              sbc R9,R5
 01A0 70920900          sts _Bulk_Block+8+1,R7
 01A4 60920800          sts _Bulk_Block+8,R6
 01A8 90920B00          sts _Bulk_Block+8+2+1,R9
 01AC 80920A00          sts _Bulk_Block+8+2,R8
 01B0                   .dbline 73
 01B0           ;   Bulk_CSW.dCSWSignature=CSW_SIGNATURE;
 01B0 45E5              ldi R20,85
 01B2 53E5              ldi R21,83
 01B4 62E4              ldi R22,66
 01B6 73E5              ldi R23,83
 01B8 50930100          sts _Bulk_Block+1,R21
 01BC 40930000          sts _Bulk_Block,R20
 01C0 70930300          sts _Bulk_Block+2+1,R23
 01C4 60930200          sts _Bulk_Block+2,R22
 01C8                   .dbline 74
 01C8           ;   Bulk_CSW.bCSWStatus=CSWStatus;      
 01C8 00930C00          sts _Bulk_Block+12,R16
 01CC                   .dbline -2
 01CC                   .dbline 75
 01CC           ; }
 01CC           L34:
 01CC 0E940000          xcall pop_gset2
 01D0                   .dbline 0 ; func end
 01D0 0895              ret
 01D2                   .dbsym r wByteCount 18 i
 01D2                   .dbsym r CSWStatus 16 c
 01D2                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\AvrUSB\BulkOnly.C
 0000           _Bulk_Block::
 0000                   .blkb 31
 001F                   .dbsym e Bulk_Block _Bulk_Block X

⌨️ 快捷键说明

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