📄 isr.lis
字号:
0130 .dbline 95
0130 ; }
0130 5AC0 xjmp L23
0132 L33:
0132 .dbline 97
0132 ; else
0132 ; {
0132 .dbline 98
0132 ; if(ControlData.DeviceRequest.wLength>MAX_CONTROLDATA_SIZE)
0132 88E0 ldi R24,8
0134 90E0 ldi R25,0
0136 20900600 lds R2,_ControlData+6
013A 30900700 lds R3,_ControlData+6+1
013E 8215 cp R24,R2
0140 9305 cpc R25,R3
0142 70F4 brsh L36
0144 .dbline 99
0144 ; {
0144 .dbline 100
0144 ; bEPPflags.bits.control_state=USB_IDLE;
0144 80910600 lds R24,_bEPPflags
0148 8F79 andi R24,159
014A 80930600 sts _bEPPflags,R24
014E .dbline 101
014E ; D12_SetEndpointStatus(0,1);
014E 21E0 ldi R18,1
0150 0027 clr R16
0152 0E940000 xcall _D12_SetEndpointStatus
0156 .dbline 102
0156 ; D12_SetEndpointStatus(1,1);
0156 21E0 ldi R18,1
0158 01E0 ldi R16,1
015A 0E940000 xcall _D12_SetEndpointStatus
015E .dbline 103
015E ; }
015E 43C0 xjmp L23
0160 L36:
0160 .dbline 105
0160 ; else
0160 ; {
0160 .dbline 106
0160 ; bEPPflags.bits.control_state=USB_RECEIVE;
0160 80910600 lds R24,_bEPPflags
0164 8F79 andi R24,159
0166 8064 ori R24,64
0168 80930600 sts _bEPPflags,R24
016C .dbline 107
016C ; }
016C .dbline 108
016C ; }
016C .dbline 109
016C ; }
016C .dbline 110
016C ; }
016C 3CC0 xjmp L23
016E L22:
016E .dbline 111
016E ; else if(bEPPflags.bits.control_state==USB_RECEIVE)
016E 80910600 lds R24,_bEPPflags
0172 8695 lsr R24
0174 8695 lsr R24
0176 8695 lsr R24
0178 8695 lsr R24
017A 8695 lsr R24
017C 8370 andi R24,3
017E 8230 cpi R24,2
0180 69F5 brne L39
0182 .dbline 112
0182 ; {
0182 .dbline 113
0182 ; i=D12_ReadEndpoint(0,EP0_PACKET_SIZE,ControlData.dataBuffer+ControlData.wCount);
0182 80E0 ldi R24,<_ControlData+16
0184 90E0 ldi R25,>_ControlData+16
0186 20900A00 lds R2,_ControlData+10
018A 30900B00 lds R3,_ControlData+10+1
018E 280E add R2,R24
0190 391E adc R3,R25
0192 3982 std y+1,R3
0194 2882 std y+0,R2
0196 20E1 ldi R18,16
0198 0027 clr R16
019A 0E940000 xcall _D12_ReadEndpoint
019E 402F mov R20,R16
01A0 .dbline 114
01A0 ; ControlData.wCount+=i;
01A0 242E mov R2,R20
01A2 3324 clr R3
01A4 40900A00 lds R4,_ControlData+10
01A8 50900B00 lds R5,_ControlData+10+1
01AC 420C add R4,R2
01AE 531C adc R5,R3
01B0 50920B00 sts _ControlData+10+1,R5
01B4 40920A00 sts _ControlData+10,R4
01B8 .dbline 115
01B8 ; if(i!=EP0_PACKET_SIZE||ControlData.wCount>=ControlData.wLength)
01B8 0031 cpi R16,16
01BA 39F4 brne L48
01BC 20900800 lds R2,_ControlData+8
01C0 30900900 lds R3,_ControlData+8+1
01C4 4214 cp R4,R2
01C6 5304 cpc R5,R3
01C8 70F0 brlo L40
01CA L48:
01CA .dbline 116
01CA ; {
01CA .dbline 117
01CA ; bEPPflags.bits.setup_packet=1;
01CA 80910600 lds R24,_bEPPflags
01CE 8460 ori R24,4
01D0 80930600 sts _bEPPflags,R24
01D4 .dbline 118
01D4 ; bEPPflags.bits.control_state=USB_IDLE;
01D4 8F79 andi R24,159
01D6 80930600 sts _bEPPflags,R24
01DA .dbline 119
01DA ; }
01DA .dbline 120
01DA ; }
01DA 05C0 xjmp L40
01DC L39:
01DC .dbline 122
01DC ; else
01DC ; {
01DC .dbline 123
01DC ; bEPPflags.bits.control_state=USB_IDLE;
01DC 80910600 lds R24,_bEPPflags
01E0 8F79 andi R24,159
01E2 80930600 sts _bEPPflags,R24
01E6 .dbline 124
01E6 ; }
01E6 L40:
01E6 L23:
01E6 .dbline -2
01E6 .dbline 125
01E6 ; }
01E6 L21:
01E6 2296 adiw R28,2
01E8 0E940000 xcall pop_gset1
01EC .dbline 0 ; func end
01EC 0895 ret
01EE .dbsym r i 20 c
01EE .dbsym r ep_last 20 c
01EE .dbend
01EE .dbfunc e ep0_txdone _ep0_txdone fV
01EE ; i -> R20,R21
.even
01EE _ep0_txdone::
01EE 0E940000 xcall push_gset1
01F2 2297 sbiw R28,2
01F4 .dbline -1
01F4 .dbline 127
01F4 ; void ep0_txdone(void)
01F4 ; {
01F4 .dbline 128
01F4 ; short i=ControlData.wLength-ControlData.wCount;
01F4 20900A00 lds R2,_ControlData+10
01F8 30900B00 lds R3,_ControlData+10+1
01FC 40910800 lds R20,_ControlData+8
0200 50910900 lds R21,_ControlData+8+1
0204 4219 sub R20,R2
0206 5309 sbc R21,R3
0208 .dbline 129
0208 ; D12_ReadLastTransactionStatus(1);
0208 01E0 ldi R16,1
020A 0E940000 xcall _D12_ReadLastTransactionStatus
020E .dbline 130
020E ; if(bEPPflags.bits.control_state!=USB_TRANSMIT)
020E 80910600 lds R24,_bEPPflags
0212 8695 lsr R24
0214 8695 lsr R24
0216 8695 lsr R24
0218 8695 lsr R24
021A 8695 lsr R24
021C 8370 andi R24,3
021E 8130 cpi R24,1
0220 09F0 breq L52
0222 .dbline 131
0222 ; return;
0222 88C0 xjmp L49
0224 L52:
0224 .dbline 132
0224 ; if(i>=EP0_PACKET_SIZE)
0224 4031 cpi R20,16
0226 E0E0 ldi R30,0
0228 5E07 cpc R21,R30
022A CCF1 brlt L54
022C .dbline 133
022C ; {
022C .dbline 134
022C ; if(bEPPflags.bits.rom_state)
022C 20900600 lds R2,_bEPPflags
0230 30900700 lds R3,_bEPPflags+1
0234 33FE sbrs R3,3
0236 13C0 rjmp L56
0238 .dbline 135
0238 ; D12_CWriteEndpoint(1,EP0_PACKET_SIZE,ControlData.pCData+ControlData.wCount);
0238 20900E00 lds R2,_ControlData+14
023C 30900F00 lds R3,_ControlData+14+1
0240 40900A00 lds R4,_ControlData+10
0244 50900B00 lds R5,_ControlData+10+1
0248 420C add R4,R2
024A 531C adc R5,R3
024C 5982 std y+1,R5
024E 4882 std y+0,R4
0250 20E1 ldi R18,16
0252 30E0 ldi R19,0
0254 01E0 ldi R16,1
0256 10E0 ldi R17,0
0258 0E940000 xcall _D12_CWriteEndpoint
025C 10C0 xjmp L57
025E L56:
025E .dbline 137
025E ; else
025E ; D12_WriteEndpoint(1,EP0_PACKET_SIZE,ControlData.pData+ControlData.wCount);
025E 20900C00 lds R2,_ControlData+12
0262 30900D00 lds R3,_ControlData+12+1
0266 40900A00 lds R4,_ControlData+10
026A 50900B00 lds R5,_ControlData+10+1
026E 420C add R4,R2
0270 531C adc R5,R3
0272 5982 std y+1,R5
0274 4882 std y+0,R4
0276 20E1 ldi R18,16
0278 01E0 ldi R16,1
027A 0E940000 xcall _D12_WriteEndpoint
027E L57:
027E .dbline 138
027E ; ControlData.wCount+=EP0_PACKET_SIZE;
027E 80910A00 lds R24,_ControlData+10
0282 90910B00 lds R25,_ControlData+10+1
0286 4096 adiw R24,16
0288 90930B00 sts _ControlData+10+1,R25
028C 80930A00 sts _ControlData+10,R24
0290 .dbline 139
0290 ; bEPPflags.bits.control_state=USB_TRANSMIT;
0290 80910600 lds R24,_bEPPflags
0294 8F79 andi R24,159
0296 8062 ori R24,32
0298 80930600 sts _bEPPflags,R24
029C .dbline 140
029C ; }
029C 4BC0 xjmp L55
029E L54:
029E .dbline 141
029E ; else if(i!=0)
029E 4030 cpi R20,0
02A0 4507 cpc R20,R21
02A2 C1F1 breq L63
02A4 X2:
02A4 .dbline 142
02A4 ; {
02A4 .dbline 143
02A4 ; if(bEPPflags.bits.rom_state)
02A4 20900600 lds R2,_bEPPflags
02A8 30900700 lds R3,_bEPPflags+1
02AC 33FE sbrs R3,3
02AE 12C0 rjmp L65
02B0 .dbline 144
02B0 ; D12_CWriteEndpoint(1,i,ControlData.pCData+ControlData.wCount);
02B0 20900E00 lds R2,_ControlData+14
02B4 30900F00 lds R3,_ControlData+14+1
02B8 40900A00 lds R4,_ControlData+10
02BC 50900B00 lds R5,_ControlData+10+1
02C0 420C add R4,R2
02C2 531C adc R5,R3
02C4 5982 std y+1,R5
02C6 4882 std y+0,R4
02C8 9A01 movw R18,R20
02CA 01E0 ldi R16,1
02CC 10E0 ldi R17,0
02CE 0E940000 xcall _D12_CWriteEndpoint
02D2 10C0 xjmp L66
02D4 L65:
02D4 .dbline 146
02D4 ; else
02D4 ; D12_WriteEndpoint(1,i,ControlData.pData+ControlData.wCount);
02D4 20900C00 lds R2,_ControlData+12
02D8 30900D00 lds R3,_ControlData+12+1
02DC 40900A00 lds R4,_ControlData+10
02E0 50900B00 lds R5,_ControlData+10+1
02E4 420C add R4,R2
02E6 531C adc R5,R3
02E8 5982 std y+1,R5
02EA 4882 std y+0,R4
02EC 242F mov R18,R20
02EE 01E0 ldi R16,1
02F0 0E940000 xcall _D12_WriteEndpoint
02F4 L66:
02F4 .dbline 147
02F4 ; ControlData.wCount+=i;
02F4 20900A00 lds R2,_ControlData+10
02F8 30900B00 lds R3,_ControlData+10+1
02FC 240E add R2,R20
02FE 351E adc R3,R21
0300 30920B00 sts _ControlData+10+1,R3
0304 20920A00 sts _ControlData+10,R2
0308 .dbline 148
0308 ; bEPPflags.bits.control_state=USB_IDLE;
0308 80910600 lds R24,_bEPPflags
030C 8F79 andi R24,159
030E 80930600 sts _bEPPflags,R24
0312 .dbline 149
0312 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -