📄 bulkonly.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 + -