📄 chap9.lis
字号:
006A 002D mov R16,R0
006C 0F5F subi R16,255 ; addi 1
006E 0E940000 xcall _D12_SelectEndpoint
0072 402F mov R20,R16
0074 06C0 xjmp L15
0076 L14:
0076 .dbline 132
0076 ; else
0076 ; c=D12_SelectEndpoint(endp*2);
0076 82E0 ldi R24,2
0078 869F mul R24,R22
007A 002D mov R16,R0
007C 0E940000 xcall _D12_SelectEndpoint
0080 402F mov R20,R16
0082 L15:
0082 .dbline 133
0082 ; if(c&D12_STALL)
0082 41FF sbrs R20,1
0084 03C0 rjmp L17
0086 .dbline 134
0086 ; txdat[0]=1;
0086 81E0 ldi R24,1
0088 8883 std y+0,R24
008A 02C0 xjmp L18
008C L17:
008C .dbline 136
008C ; else
008C ; txdat[0]=0;
008C 2224 clr R2
008E 2882 std y+0,R2
0090 L18:
0090 .dbline 137
0090 ; txdat[1]=0;
0090 2224 clr R2
0092 2982 std y+1,R2
0094 .dbline 138
0094 ; single_transmit(txdat,2);
0094 22E0 ldi R18,2
0096 8E01 movw R16,R28
0098 0E940000 xcall _single_transmit
009C .dbline 139
009C ; }
009C 02C0 xjmp L12
009E L11:
009E .dbline 140
009E ; else stall_ep0();
009E 0E940000 xcall _stall_ep0
00A2 L12:
00A2 L9:
00A2 L4:
00A2 .dbline -2
00A2 .dbline 141
00A2 ; }
00A2 L2:
00A2 2296 adiw R28,2
00A4 0E940000 xcall pop_gset2
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbsym r c 20 c
00AA .dbsym r endp 22 c
00AA .dbsym l txdat 0 A[2:2]c
00AA .dbsym r bRecipient 20 c
00AA .dbend
00AA .dbfunc e clear_feature _clear_feature fV
00AA ; endp -> R20
00AA ; bRecipient -> R20
.even
00AA _clear_feature::
00AA 0E940000 xcall push_gset1
00AE .dbline -1
00AE .dbline 143
00AE ; void clear_feature(void)
00AE ; {
00AE .dbline 145
00AE ; unsigned char endp;
00AE ; unsigned char bRecipient=ControlData.DeviceRequest.bmRequestType&USB_RECIPIENT;
00AE 40910000 lds R20,_ControlData
00B2 4F71 andi R20,31
00B4 .dbline 146
00B4 ; if(bRecipient==USB_RECIPIENT_DEVICE
00B4 A9F4 brne L21
00B6 80910200 lds R24,_ControlData+2
00BA 90910300 lds R25,_ControlData+2+1
00BE 8130 cpi R24,1
00C0 E0E0 ldi R30,0
00C2 9E07 cpc R25,R30
00C4 69F4 brne L21
00C6 .dbline 148
00C6 ; &&ControlData.DeviceRequest.wValue==USB_FEATURE_REMOTE_WAKEUP)
00C6 ; {
00C6 .dbline 149
00C6 ; DISABLE;
00C6 F894 cli
00C8 .dbline 150
00C8 ; bEPPflags.bits.remote_wakeup=0;
00C8 80910000 lds R24,_bEPPflags
00CC 877F andi R24,247
00CE 80930000 sts _bEPPflags,R24
00D2 .dbline 151
00D2 ; ENABLE;
00D2 7894 sei
00D4 .dbline 152
00D4 ; single_transmit(0,0);
00D4 2227 clr R18
00D6 0027 clr R16
00D8 1127 clr R17
00DA 0E940000 xcall _single_transmit
00DE .dbline 153
00DE ; }
00DE 2AC0 xjmp L22
00E0 L21:
00E0 .dbline 154
00E0 ; else if(bRecipient==USB_RECIPIENT_ENDPOINT
00E0 4230 cpi R20,2
00E2 31F5 brne L24
00E4 20900200 lds R2,_ControlData+2
00E8 30900300 lds R3,_ControlData+2+1
00EC 2220 tst R2
00EE 01F5 brne L24
00F0 3320 tst R3
00F2 F1F4 brne L24
00F4 X0:
00F4 .dbline 156
00F4 ; &&ControlData.DeviceRequest.wValue==USB_FEATURE_ENDPOINT_STALL)
00F4 ; {
00F4 .dbline 157
00F4 ; endp=(unsigned char)(ControlData.DeviceRequest.wIndex&MAX_ENDPOINTS);
00F4 40910400 lds R20,_ControlData+4
00F8 4370 andi R20,3
00FA 5070 andi R21,0
00FC .dbline 158
00FC ; if(ControlData.DeviceRequest.wIndex&(unsigned char)USB_ENDPOINT_DIRECTION_MASK)
00FC 20900400 lds R2,_ControlData+4
0100 30900500 lds R3,_ControlData+4+1
0104 27FE sbrs R2,7
0106 08C0 rjmp L28
0108 .dbline 159
0108 ; D12_SetEndpointStatus(endp*2+1,0);
0108 2227 clr R18
010A 82E0 ldi R24,2
010C 849F mul R24,R20
010E 002D mov R16,R0
0110 0F5F subi R16,255 ; addi 1
0112 0E940000 xcall _D12_SetEndpointStatus
0116 06C0 xjmp L29
0118 L28:
0118 .dbline 161
0118 ; else
0118 ; D12_SetEndpointStatus(endp*2,0);
0118 2227 clr R18
011A 82E0 ldi R24,2
011C 849F mul R24,R20
011E 002D mov R16,R0
0120 0E940000 xcall _D12_SetEndpointStatus
0124 L29:
0124 .dbline 162
0124 ; single_transmit(0,0);
0124 2227 clr R18
0126 0027 clr R16
0128 1127 clr R17
012A 0E940000 xcall _single_transmit
012E .dbline 163
012E ; }
012E 02C0 xjmp L25
0130 L24:
0130 .dbline 164
0130 ; else stall_ep0();
0130 0E940000 xcall _stall_ep0
0134 L25:
0134 L22:
0134 .dbline -2
0134 .dbline 165
0134 ; }
0134 L20:
0134 0E940000 xcall pop_gset1
0138 .dbline 0 ; func end
0138 0895 ret
013A .dbsym r endp 20 c
013A .dbsym r bRecipient 20 c
013A .dbend
013A .dbfunc e set_feature _set_feature fV
013A ; endp -> R20
013A ; bRecipient -> R20
.even
013A _set_feature::
013A 0E940000 xcall push_gset1
013E .dbline -1
013E .dbline 167
013E ; void set_feature(void)
013E ; {
013E .dbline 169
013E ; unsigned char endp;
013E ; unsigned char bRecipient=ControlData.DeviceRequest.bmRequestType&USB_RECIPIENT;
013E 40910000 lds R20,_ControlData
0142 4F71 andi R20,31
0144 .dbline 170
0144 ; if(bRecipient==USB_RECIPIENT_DEVICE
0144 A9F4 brne L32
0146 80910200 lds R24,_ControlData+2
014A 90910300 lds R25,_ControlData+2+1
014E 8130 cpi R24,1
0150 E0E0 ldi R30,0
0152 9E07 cpc R25,R30
0154 69F4 brne L32
0156 .dbline 172
0156 ; &&ControlData.DeviceRequest.wValue==USB_FEATURE_REMOTE_WAKEUP)
0156 ; {
0156 .dbline 173
0156 ; DISABLE;
0156 F894 cli
0158 .dbline 174
0158 ; bEPPflags.bits.remote_wakeup=1;
0158 80910000 lds R24,_bEPPflags
015C 8860 ori R24,8
015E 80930000 sts _bEPPflags,R24
0162 .dbline 175
0162 ; ENABLE;
0162 7894 sei
0164 .dbline 176
0164 ; single_transmit(0,0);
0164 2227 clr R18
0166 0027 clr R16
0168 1127 clr R17
016A 0E940000 xcall _single_transmit
016E .dbline 177
016E ; }
016E 2AC0 xjmp L33
0170 L32:
0170 .dbline 178
0170 ; else if(bRecipient==USB_RECIPIENT_ENDPOINT
0170 4230 cpi R20,2
0172 31F5 brne L35
0174 20900200 lds R2,_ControlData+2
0178 30900300 lds R3,_ControlData+2+1
017C 2220 tst R2
017E 01F5 brne L35
0180 3320 tst R3
0182 F1F4 brne L35
0184 X1:
0184 .dbline 180
0184 ; &&ControlData.DeviceRequest.wValue==USB_FEATURE_ENDPOINT_STALL)
0184 ; {
0184 .dbline 181
0184 ; endp=(unsigned char)(ControlData.DeviceRequest.wIndex&MAX_ENDPOINTS);
0184 40910400 lds R20,_ControlData+4
0188 4370 andi R20,3
018A 5070 andi R21,0
018C .dbline 182
018C ; if(ControlData.DeviceRequest.wIndex&(unsigned char)USB_ENDPOINT_DIRECTION_MASK)
018C 20900400 lds R2,_ControlData+4
0190 30900500 lds R3,_ControlData+4+1
0194 27FE sbrs R2,7
0196 08C0 rjmp L39
0198 .dbline 183
0198 ; D12_SetEndpointStatus(endp*2+1,1);
0198 21E0 ldi R18,1
019A 82E0 ldi R24,2
019C 849F mul R24,R20
019E 002D mov R16,R0
01A0 0F5F subi R16,255 ; addi 1
01A2 0E940000 xcall _D12_SetEndpointStatus
01A6 06C0 xjmp L40
01A8 L39:
01A8 .dbline 185
01A8 ; else
01A8 ; D12_SetEndpointStatus(endp*2,1);
01A8 21E0 ldi R18,1
01AA 82E0 ldi R24,2
01AC 849F mul R24,R20
01AE 002D mov R16,R0
01B0 0E940000 xcall _D12_SetEndpointStatus
01B4 L40:
01B4 .dbline 186
01B4 ; single_transmit(0,0);
01B4 2227 clr R18
01B6 0027 clr R16
01B8 1127 clr R17
01BA 0E940000 xcall _single_transmit
01BE .dbline 187
01BE ; }
01BE 02C0 xjmp L36
01C0 L35:
01C0 .dbline 188
01C0 ; else stall_ep0();
01C0 0E940000 xcall _stall_ep0
01C4 L36:
01C4 L33:
01C4 .dbline -2
01C4 .dbline 189
01C4 ; }
01C4 L31:
01C4 0E940000 xcall pop_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -