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