abse/smart-ring-flex
A tscircuit package created by abse.
- Version
- 0.0.24
- License
- unset
- Stars
- 0
firmware/onboard-programmer/ring-service-candidate/usb_handler.lst
1 ;--------------------------------------------------------
2 ; File Created by SDCC : free open source ANSI-C Compiler
3 ; Version 4.2.0 #13081 (Linux)
4 ;--------------------------------------------------------
5 .module usb_handler
6 .optsdcc -mmcs51 --model-small
7
8 ;--------------------------------------------------------
9 ; Public variables in this module
10 ;--------------------------------------------------------
11 .globl _USB_EP0_OUT
12 .globl _USB_EP0_IN
13 .globl _USB_EP0_SETUP
14 .globl _USB_EP_init
15 .globl _HID_EP1_OUT
16 .globl _HID_EP1_IN
17 .globl _HID_EP_init
18 .globl _ring_probe_release
19 .globl _UIF_BUS_RST
20 .globl _UIF_DETECT
21 .globl _UIF_TRANSFER
22 .globl _UIF_SUSPEND
23 .globl _UIF_HST_SOF
24 .globl _UIF_FIFO_OV
25 .globl _U_SIE_FREE
26 .globl _U_TOG_OK
27 .globl _U_IS_NAK
28 .globl _ADC_CHAN0
29 .globl _ADC_CHAN1
30 .globl _CMP_CHAN
31 .globl _ADC_START
32 .globl _ADC_IF
33 .globl _CMP_IF
34 .globl _CMPO
35 .globl _U1RI
36 .globl _U1TI
37 .globl _U1RB8
38 .globl _U1TB8
39 .globl _U1REN
40 .globl _U1SMOD
41 .globl _U1SM0
42 .globl _S0_R_FIFO
43 .globl _S0_T_FIFO
44 .globl _S0_FREE
45 .globl _S0_IF_BYTE
46 .globl _S0_IF_FIRST
47 .globl _S0_IF_OV
48 .globl _S0_FST_ACT
49 .globl _CP_RL2
50 .globl _C_T2
51 .globl _TR2
52 .globl _EXEN2
53 .globl _TCLK
54 .globl _RCLK
55 .globl _EXF2
56 .globl _CAP1F
57 .globl _TF2
58 .globl _RI
59 .globl _TI
60 .globl _RB8
61 .globl _TB8
62 .globl _REN
63 .globl _SM2
64 .globl _SM1
65 .globl _SM0
66 .globl _IT0
67 .globl _IE0
68 .globl _IT1
69 .globl _IE1
70 .globl _TR0
71 .globl _TF0
72 .globl _TR1
73 .globl _TF1
74 .globl _RXD
75 .globl _PWM1_
76 .globl _TXD
77 .globl _PWM2_
78 .globl _AIN3
79 .globl _VBUS1
80 .globl _INT0
81 .globl _TXD1_
82 .globl _INT1
83 .globl _T0
84 .globl _RXD1_
85 .globl _PWM2
86 .globl _T1
87 .globl _UDP
88 .globl _UDM
89 .globl _TIN0
90 .globl _CAP1
91 .globl _T2
92 .globl _AIN0
93 .globl _VBUS2
94 .globl _TIN1
95 .globl _CAP2
96 .globl _T2EX
97 .globl _RXD_
98 .globl _TXD_
99 .globl _AIN1
100 .globl _UCC1
101 .globl _TIN2
102 .globl _SCS
103 .globl _CAP1_
104 .globl _T2_
105 .globl _AIN2
106 .globl _UCC2
107 .globl _TIN3
108 .globl _PWM1
109 .globl _MOSI
110 .globl _TIN4
111 .globl _RXD1
112 .globl _MISO
113 .globl _TIN5
114 .globl _TXD1
115 .globl _SCK
116 .globl _IE_SPI0
117 .globl _IE_TKEY
118 .globl _IE_USB
119 .globl _IE_ADC
120 .globl _IE_UART1
121 .globl _IE_PWMX
122 .globl _IE_GPIO
123 .globl _IE_WDOG
124 .globl _PX0
125 .globl _PT0
126 .globl _PX1
127 .globl _PT1
128 .globl _PS
129 .globl _PT2
130 .globl _PL_FLAG
131 .globl _PH_FLAG
132 .globl _EX0
133 .globl _ET0
134 .globl _EX1
135 .globl _ET1
136 .globl _ES
137 .globl _ET2
138 .globl _E_DIS
139 .globl _EA
140 .globl _P
141 .globl _F1
142 .globl _OV
143 .globl _RS0
144 .globl _RS1
145 .globl _F0
146 .globl _AC
147 .globl _CY
148 .globl _UEP1_DMA_H
149 .globl _UEP1_DMA_L
150 .globl _UEP1_DMA
151 .globl _UEP0_DMA_H
152 .globl _UEP0_DMA_L
153 .globl _UEP0_DMA
154 .globl _UEP2_3_MOD
155 .globl _UEP4_1_MOD
156 .globl _UEP3_DMA_H
157 .globl _UEP3_DMA_L
158 .globl _UEP3_DMA
159 .globl _UEP2_DMA_H
160 .globl _UEP2_DMA_L
161 .globl _UEP2_DMA
162 .globl _USB_DEV_AD
163 .globl _USB_CTRL
164 .globl _USB_INT_EN
165 .globl _UEP4_T_LEN
166 .globl _UEP4_CTRL
167 .globl _UEP0_T_LEN
168 .globl _UEP0_CTRL
169 .globl _USB_RX_LEN
170 .globl _USB_MIS_ST
171 .globl _USB_INT_ST
172 .globl _USB_INT_FG
173 .globl _UEP3_T_LEN
174 .globl _UEP3_CTRL
175 .globl _UEP2_T_LEN
176 .globl _UEP2_CTRL
177 .globl _UEP1_T_LEN
178 .globl _UEP1_CTRL
179 .globl _UDEV_CTRL
180 .globl _USB_C_CTRL
181 .globl _TKEY_DATH
182 .globl _TKEY_DATL
183 .globl _TKEY_DAT
184 .globl _TKEY_CTRL
185 .globl _ADC_DATA
186 .globl _ADC_CFG
187 .globl _ADC_CTRL
188 .globl _SBAUD1
189 .globl _SBUF1
190 .globl _SCON1
191 .globl _SPI0_SETUP
192 .globl _SPI0_CK_SE
193 .globl _SPI0_CTRL
194 .globl _SPI0_DATA
195 .globl _SPI0_STAT
196 .globl _PWM_CK_SE
197 .globl _PWM_CTRL
198 .globl _PWM_DATA1
199 .globl _PWM_DATA2
200 .globl _T2CAP1H
201 .globl _T2CAP1L
202 .globl _T2CAP1
203 .globl _TH2
204 .globl _TL2
205 .globl _T2COUNT
206 .globl _RCAP2H
207 .globl _RCAP2L
208 .globl _RCAP2
209 .globl _T2MOD
210 .globl _T2CON
211 .globl _SBUF
212 .globl _SCON
213 .globl _TH1
214 .globl _TH0
215 .globl _TL1
216 .globl _TL0
217 .globl _TMOD
218 .globl _TCON
219 .globl _XBUS_AUX
220 .globl _PIN_FUNC
221 .globl _P3_DIR_PU
222 .globl _P3_MOD_OC
223 .globl _P3
224 .globl _P2
225 .globl _P1_DIR_PU
226 .globl _P1_MOD_OC
227 .globl _P1
228 .globl _ROM_CTRL
229 .globl _ROM_DATA_H
230 .globl _ROM_DATA_L
231 .globl _ROM_DATA
232 .globl _ROM_ADDR_H
233 .globl _ROM_ADDR_L
234 .globl _ROM_ADDR
235 .globl _GPIO_IE
236 .globl _IP_EX
237 .globl _IE_EX
238 .globl _IP
239 .globl _IE
240 .globl _WDOG_COUNT
241 .globl _RESET_KEEP
242 .globl _WAKE_CTRL
243 .globl _CLOCK_CFG
244 .globl _PCON
245 .globl _GLOBAL_CFG
246 .globl _SAFE_MOD
247 .globl _DPH
248 .globl _DPL
249 .globl _SP
250 .globl _B
251 .globl _ACC
252 .globl _PSW
253 .globl _EP1_buffer
254 .globl _EP0_buffer
255 .globl _USB_ENUM_OK
256 .globl _USB_pDescr
257 .globl _USB_SetupLen
258 .globl _USB_Addr
259 .globl _USB_Config
260 .globl _USB_SetupTyp
261 .globl _USB_SetupReq
262 .globl _USB_init
263 .globl _USB_EP0_copyDescr
264 .globl _USB_interrupt
265 ;--------------------------------------------------------
266 ; special function registers
267 ;--------------------------------------------------------
268 .area RSEG (ABS,DATA)
000000 269 .org 0x0000
0000D0 270 _PSW = 0x00d0
0000E0 271 _ACC = 0x00e0
0000F0 272 _B = 0x00f0
000081 273 _SP = 0x0081
000082 274 _DPL = 0x0082
000083 275 _DPH = 0x0083
0000A1 276 _SAFE_MOD = 0x00a1
0000B1 277 _GLOBAL_CFG = 0x00b1
000087 278 _PCON = 0x0087
0000B9 279 _CLOCK_CFG = 0x00b9
0000A9 280 _WAKE_CTRL = 0x00a9
0000FE 281 _RESET_KEEP = 0x00fe
0000FF 282 _WDOG_COUNT = 0x00ff
0000A8 283 _IE = 0x00a8
0000B8 284 _IP = 0x00b8
0000E8 285 _IE_EX = 0x00e8
0000E9 286 _IP_EX = 0x00e9
0000C7 287 _GPIO_IE = 0x00c7
008584 288 _ROM_ADDR = 0x8584
000084 289 _ROM_ADDR_L = 0x0084
000085 290 _ROM_ADDR_H = 0x0085
008F8E 291 _ROM_DATA = 0x8f8e
00008E 292 _ROM_DATA_L = 0x008e
00008F 293 _ROM_DATA_H = 0x008f
000086 294 _ROM_CTRL = 0x0086
000090 295 _P1 = 0x0090
000092 296 _P1_MOD_OC = 0x0092
000093 297 _P1_DIR_PU = 0x0093
0000A0 298 _P2 = 0x00a0
0000B0 299 _P3 = 0x00b0
000096 300 _P3_MOD_OC = 0x0096
000097 301 _P3_DIR_PU = 0x0097
0000C6 302 _PIN_FUNC = 0x00c6
0000A2 303 _XBUS_AUX = 0x00a2
000088 304 _TCON = 0x0088
000089 305 _TMOD = 0x0089
00008A 306 _TL0 = 0x008a
00008B 307 _TL1 = 0x008b
00008C 308 _TH0 = 0x008c
00008D 309 _TH1 = 0x008d
000098 310 _SCON = 0x0098
000099 311 _SBUF = 0x0099
0000C8 312 _T2CON = 0x00c8
0000C9 313 _T2MOD = 0x00c9
00CBCA 314 _RCAP2 = 0xcbca
0000CA 315 _RCAP2L = 0x00ca
0000CB 316 _RCAP2H = 0x00cb
00CDCC 317 _T2COUNT = 0xcdcc
0000CC 318 _TL2 = 0x00cc
0000CD 319 _TH2 = 0x00cd
00CFCE 320 _T2CAP1 = 0xcfce
0000CE 321 _T2CAP1L = 0x00ce
0000CF 322 _T2CAP1H = 0x00cf
00009B 323 _PWM_DATA2 = 0x009b
00009C 324 _PWM_DATA1 = 0x009c
00009D 325 _PWM_CTRL = 0x009d
00009E 326 _PWM_CK_SE = 0x009e
0000F8 327 _SPI0_STAT = 0x00f8
0000F9 328 _SPI0_DATA = 0x00f9
0000FA 329 _SPI0_CTRL = 0x00fa
0000FB 330 _SPI0_CK_SE = 0x00fb
0000FC 331 _SPI0_SETUP = 0x00fc
0000C0 332 _SCON1 = 0x00c0
0000C1 333 _SBUF1 = 0x00c1
0000C2 334 _SBAUD1 = 0x00c2
000080 335 _ADC_CTRL = 0x0080
00009A 336 _ADC_CFG = 0x009a
00009F 337 _ADC_DATA = 0x009f
0000C3 338 _TKEY_CTRL = 0x00c3
00C5C4 339 _TKEY_DAT = 0xc5c4
0000C4 340 _TKEY_DATL = 0x00c4
0000C5 341 _TKEY_DATH = 0x00c5
000091 342 _USB_C_CTRL = 0x0091
0000D1 343 _UDEV_CTRL = 0x00d1
0000D2 344 _UEP1_CTRL = 0x00d2
0000D3 345 _UEP1_T_LEN = 0x00d3
0000D4 346 _UEP2_CTRL = 0x00d4
0000D5 347 _UEP2_T_LEN = 0x00d5
0000D6 348 _UEP3_CTRL = 0x00d6
0000D7 349 _UEP3_T_LEN = 0x00d7
0000D8 350 _USB_INT_FG = 0x00d8
0000D9 351 _USB_INT_ST = 0x00d9
0000DA 352 _USB_MIS_ST = 0x00da
0000DB 353 _USB_RX_LEN = 0x00db
0000DC 354 _UEP0_CTRL = 0x00dc
0000DD 355 _UEP0_T_LEN = 0x00dd
0000DE 356 _UEP4_CTRL = 0x00de
0000DF 357 _UEP4_T_LEN = 0x00df
0000E1 358 _USB_INT_EN = 0x00e1
0000E2 359 _USB_CTRL = 0x00e2
0000E3 360 _USB_DEV_AD = 0x00e3
00E5E4 361 _UEP2_DMA = 0xe5e4
0000E4 362 _UEP2_DMA_L = 0x00e4
0000E5 363 _UEP2_DMA_H = 0x00e5
00E7E6 364 _UEP3_DMA = 0xe7e6
0000E6 365 _UEP3_DMA_L = 0x00e6
0000E7 366 _UEP3_DMA_H = 0x00e7
0000EA 367 _UEP4_1_MOD = 0x00ea
0000EB 368 _UEP2_3_MOD = 0x00eb
00EDEC 369 _UEP0_DMA = 0xedec
0000EC 370 _UEP0_DMA_L = 0x00ec
0000ED 371 _UEP0_DMA_H = 0x00ed
00EFEE 372 _UEP1_DMA = 0xefee
0000EE 373 _UEP1_DMA_L = 0x00ee
0000EF 374 _UEP1_DMA_H = 0x00ef
375 ;--------------------------------------------------------
376 ; special function bits
377 ;--------------------------------------------------------
378 .area RSEG (ABS,DATA)
000000 379 .org 0x0000
0000D7 380 _CY = 0x00d7
0000D6 381 _AC = 0x00d6
0000D5 382 _F0 = 0x00d5
0000D4 383 _RS1 = 0x00d4
0000D3 384 _RS0 = 0x00d3
0000D2 385 _OV = 0x00d2
0000D1 386 _F1 = 0x00d1
0000D0 387 _P = 0x00d0
0000AF 388 _EA = 0x00af
0000AE 389 _E_DIS = 0x00ae
0000AD 390 _ET2 = 0x00ad
0000AC 391 _ES = 0x00ac
0000AB 392 _ET1 = 0x00ab
0000AA 393 _EX1 = 0x00aa
0000A9 394 _ET0 = 0x00a9
0000A8 395 _EX0 = 0x00a8
0000BF 396 _PH_FLAG = 0x00bf
0000BE 397 _PL_FLAG = 0x00be
0000BD 398 _PT2 = 0x00bd
0000BC 399 _PS = 0x00bc
0000BB 400 _PT1 = 0x00bb
0000BA 401 _PX1 = 0x00ba
0000B9 402 _PT0 = 0x00b9
0000B8 403 _PX0 = 0x00b8
0000EF 404 _IE_WDOG = 0x00ef
0000EE 405 _IE_GPIO = 0x00ee
0000ED 406 _IE_PWMX = 0x00ed
0000EC 407 _IE_UART1 = 0x00ec
0000EB 408 _IE_ADC = 0x00eb
0000EA 409 _IE_USB = 0x00ea
0000E9 410 _IE_TKEY = 0x00e9
0000E8 411 _IE_SPI0 = 0x00e8
000097 412 _SCK = 0x0097
000097 413 _TXD1 = 0x0097
000097 414 _TIN5 = 0x0097
000096 415 _MISO = 0x0096
000096 416 _RXD1 = 0x0096
000096 417 _TIN4 = 0x0096
000095 418 _MOSI = 0x0095
000095 419 _PWM1 = 0x0095
000095 420 _TIN3 = 0x0095
000095 421 _UCC2 = 0x0095
000095 422 _AIN2 = 0x0095
000094 423 _T2_ = 0x0094
000094 424 _CAP1_ = 0x0094
000094 425 _SCS = 0x0094
000094 426 _TIN2 = 0x0094
000094 427 _UCC1 = 0x0094
000094 428 _AIN1 = 0x0094
000093 429 _TXD_ = 0x0093
000092 430 _RXD_ = 0x0092
000091 431 _T2EX = 0x0091
000091 432 _CAP2 = 0x0091
000091 433 _TIN1 = 0x0091
000091 434 _VBUS2 = 0x0091
000091 435 _AIN0 = 0x0091
000090 436 _T2 = 0x0090
000090 437 _CAP1 = 0x0090
000090 438 _TIN0 = 0x0090
0000B7 439 _UDM = 0x00b7
0000B6 440 _UDP = 0x00b6
0000B5 441 _T1 = 0x00b5
0000B4 442 _PWM2 = 0x00b4
0000B4 443 _RXD1_ = 0x00b4
0000B4 444 _T0 = 0x00b4
0000B3 445 _INT1 = 0x00b3
0000B2 446 _TXD1_ = 0x00b2
0000B2 447 _INT0 = 0x00b2
0000B2 448 _VBUS1 = 0x00b2
0000B2 449 _AIN3 = 0x00b2
0000B1 450 _PWM2_ = 0x00b1
0000B1 451 _TXD = 0x00b1
0000B0 452 _PWM1_ = 0x00b0
0000B0 453 _RXD = 0x00b0
00008F 454 _TF1 = 0x008f
00008E 455 _TR1 = 0x008e
00008D 456 _TF0 = 0x008d
00008C 457 _TR0 = 0x008c
00008B 458 _IE1 = 0x008b
00008A 459 _IT1 = 0x008a
000089 460 _IE0 = 0x0089
000088 461 _IT0 = 0x0088
00009F 462 _SM0 = 0x009f
00009E 463 _SM1 = 0x009e
00009D 464 _SM2 = 0x009d
00009C 465 _REN = 0x009c
00009B 466 _TB8 = 0x009b
00009A 467 _RB8 = 0x009a
000099 468 _TI = 0x0099
000098 469 _RI = 0x0098
0000CF 470 _TF2 = 0x00cf
0000CF 471 _CAP1F = 0x00cf
0000CE 472 _EXF2 = 0x00ce
0000CD 473 _RCLK = 0x00cd
0000CC 474 _TCLK = 0x00cc
0000CB 475 _EXEN2 = 0x00cb
0000CA 476 _TR2 = 0x00ca
0000C9 477 _C_T2 = 0x00c9
0000C8 478 _CP_RL2 = 0x00c8
0000FF 479 _S0_FST_ACT = 0x00ff
0000FE 480 _S0_IF_OV = 0x00fe
0000FD 481 _S0_IF_FIRST = 0x00fd
0000FC 482 _S0_IF_BYTE = 0x00fc
0000FB 483 _S0_FREE = 0x00fb
0000FA 484 _S0_T_FIFO = 0x00fa
0000F8 485 _S0_R_FIFO = 0x00f8
0000C7 486 _U1SM0 = 0x00c7
0000C5 487 _U1SMOD = 0x00c5
0000C4 488 _U1REN = 0x00c4
0000C3 489 _U1TB8 = 0x00c3
0000C2 490 _U1RB8 = 0x00c2
0000C1 491 _U1TI = 0x00c1
0000C0 492 _U1RI = 0x00c0
000087 493 _CMPO = 0x0087
000086 494 _CMP_IF = 0x0086
000085 495 _ADC_IF = 0x0085
000084 496 _ADC_START = 0x0084
000083 497 _CMP_CHAN = 0x0083
000081 498 _ADC_CHAN1 = 0x0081
000080 499 _ADC_CHAN0 = 0x0080
0000DF 500 _U_IS_NAK = 0x00df
0000DE 501 _U_TOG_OK = 0x00de
0000DD 502 _U_SIE_FREE = 0x00dd
0000DC 503 _UIF_FIFO_OV = 0x00dc
0000DB 504 _UIF_HST_SOF = 0x00db
0000DA 505 _UIF_SUSPEND = 0x00da
0000D9 506 _UIF_TRANSFER = 0x00d9
0000D8 507 _UIF_DETECT = 0x00d8
0000D8 508 _UIF_BUS_RST = 0x00d8
509 ;--------------------------------------------------------
510 ; overlayable register banks
511 ;--------------------------------------------------------
512 .area REG_BANK_0 (REL,OVR,DATA)
000000 513 .ds 8
514 ;--------------------------------------------------------
515 ; internal ram data
516 ;--------------------------------------------------------
517 .area DSEG (DATA)
000000 518 _USB_SetupReq::
000000 519 .ds 1
000001 520 _USB_SetupTyp::
000001 521 .ds 1
000002 522 _USB_Config::
000002 523 .ds 1
000003 524 _USB_Addr::
000003 525 .ds 1
000004 526 _USB_SetupLen::
000004 527 .ds 2
000006 528 _USB_pDescr::
000006 529 .ds 2
530 ;--------------------------------------------------------
531 ; overlayable items in internal ram
532 ;--------------------------------------------------------
533 .area OSEG (OVR,DATA)
534 ;--------------------------------------------------------
535 ; indirectly addressable internal ram data
536 ;--------------------------------------------------------
537 .area ISEG (DATA)
538 ;--------------------------------------------------------
539 ; absolute internal ram data
540 ;--------------------------------------------------------
541 .area IABS (ABS,DATA)
542 .area IABS (ABS,DATA)
543 ;--------------------------------------------------------
544 ; bit data
545 ;--------------------------------------------------------
546 .area BSEG (BIT)
000000 547 _USB_ENUM_OK::
000000 548 .ds 1
000001 549 _USB_EP0_SETUP_sloc0_1_0:
000001 550 .ds 1
000002 551 _USB_EP0_IN_sloc0_1_0:
000002 552 .ds 1
553 ;--------------------------------------------------------
554 ; paged external ram data
555 ;--------------------------------------------------------
556 .area PSEG (PAG,XDATA)
557 ;--------------------------------------------------------
558 ; external ram data
559 ;--------------------------------------------------------
560 .area XSEG (XDATA)
000000 561 _EP0_buffer = 0x0000
00000A 562 _EP1_buffer = 0x000a
563 ;--------------------------------------------------------
564 ; absolute external ram data
565 ;--------------------------------------------------------
566 .area XABS (ABS,XDATA)
567 ;--------------------------------------------------------
568 ; external initialized ram data
569 ;--------------------------------------------------------
570 .area HOME (CODE)
571 .area GSINIT0 (CODE)
572 .area GSINIT1 (CODE)
573 .area GSINIT2 (CODE)
574 .area GSINIT3 (CODE)
575 .area GSINIT4 (CODE)
576 .area GSINIT5 (CODE)
577 .area GSINIT (CODE)
578 .area GSFINAL (CODE)
579 .area CSEG (CODE)
580 ;--------------------------------------------------------
581 ; global & static initialisations
582 ;--------------------------------------------------------
583 .area HOME (CODE)
584 .area GSINIT (CODE)
585 .area GSFINAL (CODE)
586 .area GSINIT (CODE)
587 ;--------------------------------------------------------
588 ; Home
589 ;--------------------------------------------------------
590 .area HOME (CODE)
591 .area HOME (CODE)
592 ;--------------------------------------------------------
593 ; code
594 ;--------------------------------------------------------
595 .area CSEG (CODE)
596 ;------------------------------------------------------------
597 ;Allocation info for local variables in function 'USB_EP_init'
598 ;------------------------------------------------------------
599 ; src/usb_handler.c:21: void USB_EP_init(void) {
600 ; -----------------------------------------
601 ; function USB_EP_init
602 ; -----------------------------------------
000000 603 _USB_EP_init:
000007 604 ar7 = 0x07
000006 605 ar6 = 0x06
000005 606 ar5 = 0x05
000004 607 ar4 = 0x04
000003 608 ar3 = 0x03
000002 609 ar2 = 0x02
000001 610 ar1 = 0x01
000000 611 ar0 = 0x00
612 ; src/usb_handler.c:22: UEP0_DMA = (uint16_t)EP0_buffer; // EP0 data transfer address
000000 7E 00 [12] 613 mov r6,#_EP0_buffer
000002 7F 00 [12] 614 mov r7,#(_EP0_buffer >> 8)
000004 8E EC [24] 615 mov ((_UEP0_DMA >> 0) & 0xFF),r6
000006 8F ED [24] 616 mov ((_UEP0_DMA >> 8) & 0xFF),r7
617 ; src/usb_handler.c:24: | UEP_T_RES_NAK; // EP0 IN transaction returns NAK
000008 75 DC 02 [24] 618 mov _UEP0_CTRL,#0x02
619 ; src/usb_handler.c:25: UEP0_T_LEN = 0; // must be zero at start
00000B 75 DD 00 [24] 620 mov _UEP0_T_LEN,#0x00
621 ; src/usb_handler.c:26: USB_ENUM_OK = 0; // reset ENUM flag
622 ; assignBit
00000E C2*00 [12] 623 clr _USB_ENUM_OK
624 ; src/usb_handler.c:29: USB_INIT_endpoints(); // custom EP init handler
625 ; src/usb_handler.c:31: }
000010 02r00r00 [24] 626 ljmp _HID_EP_init
627 ;------------------------------------------------------------
628 ;Allocation info for local variables in function 'USB_init'
629 ;------------------------------------------------------------
630 ; src/usb_handler.c:36: void USB_init(void) {
631 ; -----------------------------------------
632 ; function USB_init
633 ; -----------------------------------------
000013 634 _USB_init:
635 ; src/usb_handler.c:39: | bUC_DMA_EN; // DMA enable
000013 75 E2 29 [24] 636 mov _USB_CTRL,#0x29
637 ; src/usb_handler.c:41: | bUD_PORT_EN; // enable port, full-speed
000016 75 D1 81 [24] 638 mov _UDEV_CTRL,#0x81
639 ; src/usb_handler.c:43: USB_EP_init(); // setup endpoints
000019 12r00r00 [24] 640 lcall _USB_EP_init
641 ; src/usb_handler.c:47: | bUIE_BUS_RST; // enable device mode USB bus reset interrupt
00001C 75 E1 07 [24] 642 mov _USB_INT_EN,#0x07
643 ; src/usb_handler.c:49: USB_INT_FG = 0x1f; // clear interrupt flags
00001F 75 D8 1F [24] 644 mov _USB_INT_FG,#0x1f
645 ; src/usb_handler.c:50: IE_USB = 1; // enable USB interrupt
646 ; assignBit
000022 D2 EA [12] 647 setb _IE_USB
648 ; src/usb_handler.c:51: EA = 1; // enable global interrupts
649 ; assignBit
000024 D2 AF [12] 650 setb _EA
651 ; src/usb_handler.c:52: }
000026 22 [24] 652 ret
653 ;------------------------------------------------------------
654 ;Allocation info for local variables in function 'USB_EP0_copyDescr'
655 ;------------------------------------------------------------
656 ;len Allocated to registers
657 ;------------------------------------------------------------
658 ; src/usb_handler.c:60: void USB_EP0_copyDescr(uint8_t len) {
659 ; -----------------------------------------
660 ; function USB_EP0_copyDescr
661 ; -----------------------------------------
000027 662 _USB_EP0_copyDescr:
663 ; src/usb_handler.c:81: __endasm;
000027 C0 E0 [24] 664 push acc ; acc -> stack
000029 C0 07 [24] 665 push ar7 ; r7 -> stack
00002B AF 82 [24] 666 mov r7, dpl ; r7 <- len
00002D 05 A2 [12] 667 inc _XBUS_AUX ; select dptr1
00002F 90 00 00 [24] 668 mov dptr, #_EP0_buffer ; dptr1 <- EP0_buffer
000032 15 A2 [12] 669 dec _XBUS_AUX ; select dptr0
000034 85*06 82 [24] 670 mov dpl, _USB_pDescr ; dptr0 <- *USB_pDescr
000037 85*07 83 [24] 671 mov dph, (_USB_pDescr + 1)
00003A 672 01$:
00003A E4 [12] 673 clr a ; acc <- #0
00003B 93 [24] 674 movc a, @a+dptr ; acc <- *USB_pDescr[dptr0]
00003C A3 [24] 675 inc dptr ; inc dptr0
00003D A5 676 .db 0xA5 ; acc -> EP0_buffer[dptr1] & inc dptr1
00003E DF FA [24] 677 djnz r7, 01$ ; repeat len times
000040 85 82*06 [24] 678 mov _USB_pDescr, dpl ; USB_pDescr += len
000043 85 83*07 [24] 679 mov (_USB_pDescr + 1), dph
000046 D0 07 [24] 680 pop ar7 ; r7 <- stack
000048 D0 E0 [24] 681 pop acc ; acc <- stack
682 ; src/usb_handler.c:82: }
00004A 22 [24] 683 ret
684 ;------------------------------------------------------------
685 ;Allocation info for local variables in function 'USB_EP0_SETUP'
686 ;------------------------------------------------------------
687 ;len Allocated to registers r7
688 ;------------------------------------------------------------
689 ; src/usb_handler.c:89: void USB_EP0_SETUP(void) {
690 ; -----------------------------------------
691 ; function USB_EP0_SETUP
692 ; -----------------------------------------
00004B 693 _USB_EP0_SETUP:
694 ; src/usb_handler.c:90: uint8_t len = 0; // default is success and upload 0 length
00004B 7F 00 [12] 695 mov r7,#0x00
696 ; src/usb_handler.c:91: USB_SetupLen = ((uint16_t)USB_SetupBuf->wLengthH<<8) | (USB_SetupBuf->wLengthL);
00004D 90 00 07 [24] 697 mov dptr,#(_EP0_buffer + 0x0007)
000050 E0 [24] 698 movx a,@dptr
000051 FD [12] 699 mov r5,a
000052 7E 00 [12] 700 mov r6,#0x00
000054 90 00 06 [24] 701 mov dptr,#(_EP0_buffer + 0x0006)
000057 E0 [24] 702 movx a,@dptr
000058 FC [12] 703 mov r4,a
000059 7B 00 [12] 704 mov r3,#0x00
00005B 4E [12] 705 orl a,r6
00005C F5*04 [12] 706 mov _USB_SetupLen,a
00005E EB [12] 707 mov a,r3
00005F 4D [12] 708 orl a,r5
000060 F5*05 [12] 709 mov (_USB_SetupLen + 1),a
710 ; src/usb_handler.c:92: USB_SetupReq = USB_SetupBuf->bRequest;
000062 90 00 01 [24] 711 mov dptr,#(_EP0_buffer + 0x0001)
000065 E0 [24] 712 movx a,@dptr
000066 F5*00 [12] 713 mov _USB_SetupReq,a
714 ; src/usb_handler.c:93: USB_SetupTyp = USB_SetupBuf->bRequestType;
000068 90 00 00 [24] 715 mov dptr,#_EP0_buffer
00006B E0 [24] 716 movx a,@dptr
00006C F5*01 [12] 717 mov _USB_SetupTyp,a
718 ; src/usb_handler.c:95: if((USB_SetupTyp & USB_REQ_TYP_MASK) == USB_REQ_TYP_STANDARD) {
00006E E5*01 [12] 719 mov a,_USB_SetupTyp
000070 54 60 [12] 720 anl a,#0x60
000072 60 03 [24] 721 jz 00289$
000074 02r02r8E [24] 722 ljmp 00171$
000077 723 00289$:
724 ; src/usb_handler.c:96: switch(USB_SetupReq) { // request type
000077 E5*00 [12] 725 mov a,_USB_SetupReq
000079 FE [12] 726 mov r6,a
00007A 24 F4 [12] 727 add a,#0xff - 0x0b
00007C 50 03 [24] 728 jnc 00290$
00007E 02r02r8A [24] 729 ljmp 00168$
000081 730 00290$:
000081 EE [12] 731 mov a,r6
000082 F5 F0 [12] 732 mov b,a
000084 24 0B [12] 733 add a,#(00291$-3-.)
000086 83 [24] 734 movc a,@a+pc
000087 F5 82 [12] 735 mov dpl,a
000089 E5 F0 [12] 736 mov a,b
00008B 24 10 [12] 737 add a,#(00292$-3-.)
00008D 83 [24] 738 movc a,@a+pc
00008E F5 83 [12] 739 mov dph,a
000090 E4 [12] 740 clr a
000091 73 [24] 741 jmp @a+dptr
000092 742 00291$:
000092rB1 743 .db 00129$
000093rD1 744 .db 00132$
000094r8A 745 .db 00168$
000095r29 746 .db 00149$
000096r8A 747 .db 00168$
000097r80 748 .db 00122$
000098rAA 749 .db 00101$
000099r8A 750 .db 00168$
00009Ar89 751 .db 00123$
00009BrA6 752 .db 00126$
00009Cr90 753 .db 00172$
00009Dr90 754 .db 00172$
00009E 755 00292$:
00009Es01 756 .db 00129$>>8
00009Fs01 757 .db 00132$>>8
0000A0s02 758 .db 00168$>>8
0000A1s02 759 .db 00149$>>8
0000A2s02 760 .db 00168$>>8
0000A3s01 761 .db 00122$>>8
0000A4s00 762 .db 00101$>>8
0000A5s02 763 .db 00168$>>8
0000A6s01 764 .db 00123$>>8
0000A7s01 765 .db 00126$>>8
0000A8s02 766 .db 00172$>>8
0000A9s02 767 .db 00172$>>8
768 ; src/usb_handler.c:97: case USB_GET_DESCRIPTOR:
0000AA 769 00101$:
770 ; src/usb_handler.c:98: switch(USB_SetupBuf->wValueH) {
0000AA 90 00 03 [24] 771 mov dptr,#(_EP0_buffer + 0x0003)
0000AD E0 [24] 772 movx a,@dptr
0000AE FE [12] 773 mov r6,a
0000AF BE 01 02 [24] 774 cjne r6,#0x01,00293$
0000B2 80 12 [24] 775 sjmp 00102$
0000B4 776 00293$:
0000B4 BE 02 02 [24] 777 cjne r6,#0x02,00294$
0000B7 80 17 [24] 778 sjmp 00103$
0000B9 779 00294$:
0000B9 BE 03 02 [24] 780 cjne r6,#0x03,00295$
0000BC 80 1C [24] 781 sjmp 00104$
0000BE 782 00295$:
0000BE BE 22 02 [24] 783 cjne r6,#0x22,00296$
0000C1 80 69 [24] 784 sjmp 00112$
0000C3 785 00296$:
0000C3 02r01r44 [24] 786 ljmp 00116$
787 ; src/usb_handler.c:100: case USB_DESCR_TYP_DEVICE: // Device Descriptor
0000C6 788 00102$:
789 ; src/usb_handler.c:101: USB_pDescr = (uint8_t*)&DevDescr; // put descriptor into out buffer
0000C6 75*06r00 [24] 790 mov _USB_pDescr,#_DevDescr
0000C9 75*07s00 [24] 791 mov (_USB_pDescr + 1),#(_DevDescr >> 8)
792 ; src/usb_handler.c:102: len = sizeof(DevDescr); // descriptor length
0000CC 7F 12 [12] 793 mov r7,#0x12
794 ; src/usb_handler.c:103: break;
795 ; src/usb_handler.c:105: case USB_DESCR_TYP_CONFIG: // Configuration Descriptor
0000CE 80 76 [24] 796 sjmp 00117$
0000D0 797 00103$:
798 ; src/usb_handler.c:106: USB_pDescr = (uint8_t*)&CfgDescr; // put descriptor into out buffer
0000D0 75*06r00 [24] 799 mov _USB_pDescr,#_CfgDescr
0000D3 75*07s00 [24] 800 mov (_USB_pDescr + 1),#(_CfgDescr >> 8)
801 ; src/usb_handler.c:107: len = sizeof(CfgDescr); // descriptor length
0000D6 7F 29 [12] 802 mov r7,#0x29
803 ; src/usb_handler.c:108: break;
804 ; src/usb_handler.c:110: case USB_DESCR_TYP_STRING:
0000D8 80 6C [24] 805 sjmp 00117$
0000DA 806 00104$:
807 ; src/usb_handler.c:111: switch(USB_SetupBuf->wValueL) { // String Descriptor Index
0000DA 90 00 02 [24] 808 mov dptr,#(_EP0_buffer + 0x0002)
0000DD E0 [24] 809 movx a,@dptr
0000DE FE [12] 810 mov r6,a
0000DF 24 FB [12] 811 add a,#0xff - 0x04
0000E1 40 38 [24] 812 jc 00110$
0000E3 EE [12] 813 mov a,r6
0000E4 2E [12] 814 add a,r6
815 ; src/usb_handler.c:112: case 0: USB_pDescr = USB_STR_DESCR_i0; break;
0000E5 90r00rE9 [24] 816 mov dptr,#00298$
0000E8 73 [24] 817 jmp @a+dptr
0000E9 818 00298$:
0000E9 80 08 [24] 819 sjmp 00105$
0000EB 80 0E [24] 820 sjmp 00106$
0000ED 80 14 [24] 821 sjmp 00107$
0000EF 80 1A [24] 822 sjmp 00108$
0000F1 80 20 [24] 823 sjmp 00109$
0000F3 824 00105$:
0000F3 75*06r00 [24] 825 mov _USB_pDescr,#_LangDescr
0000F6 75*07s00 [24] 826 mov (_USB_pDescr + 1),#(_LangDescr >> 8)
827 ; src/usb_handler.c:113: case 1: USB_pDescr = USB_STR_DESCR_i1; break;
0000F9 80 26 [24] 828 sjmp 00111$
0000FB 829 00106$:
0000FB 75*06r00 [24] 830 mov _USB_pDescr,#_ManufDescr
0000FE 75*07s00 [24] 831 mov (_USB_pDescr + 1),#(_ManufDescr >> 8)
832 ; src/usb_handler.c:114: case 2: USB_pDescr = USB_STR_DESCR_i2; break;
000101 80 1E [24] 833 sjmp 00111$
000103 834 00107$:
000103 75*06r00 [24] 835 mov _USB_pDescr,#_ProdDescr
000106 75*07s00 [24] 836 mov (_USB_pDescr + 1),#(_ProdDescr >> 8)
837 ; src/usb_handler.c:115: case 3: USB_pDescr = USB_STR_DESCR_i3; break;
000109 80 16 [24] 838 sjmp 00111$
00010B 839 00108$:
00010B 75*06r00 [24] 840 mov _USB_pDescr,#_SerDescr
00010E 75*07s00 [24] 841 mov (_USB_pDescr + 1),#(_SerDescr >> 8)
842 ; src/usb_handler.c:117: case 4: USB_pDescr = USB_STR_DESCR_i4; break;
000111 80 0E [24] 843 sjmp 00111$
000113 844 00109$:
000113 75*06r00 [24] 845 mov _USB_pDescr,#_InterfDescr
000116 75*07s00 [24] 846 mov (_USB_pDescr + 1),#(_InterfDescr >> 8)
847 ; src/usb_handler.c:137: default: USB_pDescr = USB_STR_DESCR_ix; break;
000119 80 06 [24] 848 sjmp 00111$
00011B 849 00110$:
00011B 75*06r00 [24] 850 mov _USB_pDescr,#_SerDescr
00011E 75*07s00 [24] 851 mov (_USB_pDescr + 1),#(_SerDescr >> 8)
852 ; src/usb_handler.c:138: }
000121 853 00111$:
854 ; src/usb_handler.c:139: len = USB_pDescr[0]; // descriptor length
000121 85*06 82 [24] 855 mov dpl,_USB_pDescr
000124 85*07 83 [24] 856 mov dph,(_USB_pDescr + 1)
000127 E4 [12] 857 clr a
000128 93 [24] 858 movc a,@a+dptr
000129 FF [12] 859 mov r7,a
860 ; src/usb_handler.c:140: break;
861 ; src/usb_handler.c:143: case USB_DESCR_TYP_REPORT:
00012A 80 1A [24] 862 sjmp 00117$
00012C 863 00112$:
864 ; src/usb_handler.c:144: if(USB_SetupBuf->wValueL == 0) {
00012C 90 00 02 [24] 865 mov dptr,#(_EP0_buffer + 0x0002)
00012F E0 [24] 866 movx a,@dptr
000130 70 0E [24] 867 jnz 00114$
868 ; src/usb_handler.c:145: USB_pDescr = USB_REPORT_DESCR;
000132 75*06r00 [24] 869 mov _USB_pDescr,#_ReportDescr
000135 75*07s00 [24] 870 mov (_USB_pDescr + 1),#(_ReportDescr >> 8)
871 ; src/usb_handler.c:146: len = USB_REPORT_DESCR_LEN;
000138 90r00r00 [24] 872 mov dptr,#_ReportDescrLen
00013B E4 [12] 873 clr a
00013C 93 [24] 874 movc a,@a+dptr
00013D FF [12] 875 mov r7,a
00013E 80 06 [24] 876 sjmp 00117$
000140 877 00114$:
878 ; src/usb_handler.c:148: else len = 0xff;
000140 7F FF [12] 879 mov r7,#0xff
880 ; src/usb_handler.c:149: break;
881 ; src/usb_handler.c:152: default:
000142 80 02 [24] 882 sjmp 00117$
000144 883 00116$:
884 ; src/usb_handler.c:153: len = 0xff; // unsupported descriptors or error
000144 7F FF [12] 885 mov r7,#0xff
886 ; src/usb_handler.c:155: }
000146 887 00117$:
888 ; src/usb_handler.c:157: if(len != 0xff) {
000146 BF FF 03 [24] 889 cjne r7,#0xff,00300$
000149 02r02r90 [24] 890 ljmp 00172$
00014C 891 00300$:
892 ; src/usb_handler.c:158: if(USB_SetupLen > len) USB_SetupLen = len; // limit length
00014C 8F 05 [24] 893 mov ar5,r7
00014E 7E 00 [12] 894 mov r6,#0x00
000150 C3 [12] 895 clr c
000151 ED [12] 896 mov a,r5
000152 95*04 [12] 897 subb a,_USB_SetupLen
000154 EE [12] 898 mov a,r6
000155 95*05 [12] 899 subb a,(_USB_SetupLen + 1)
000157 50 04 [24] 900 jnc 00119$
000159 8D*04 [24] 901 mov _USB_SetupLen,r5
00015B 8E*05 [24] 902 mov (_USB_SetupLen + 1),r6
00015D 903 00119$:
904 ; src/usb_handler.c:159: len = USB_SetupLen >= EP0_SIZE ? EP0_SIZE : USB_SetupLen;
00015D AD*04 [24] 905 mov r5,_USB_SetupLen
00015F AE*05 [24] 906 mov r6,(_USB_SetupLen + 1)
000161 C3 [12] 907 clr c
000162 ED [12] 908 mov a,r5
000163 94 08 [12] 909 subb a,#0x08
000165 EE [12] 910 mov a,r6
000166 94 00 [12] 911 subb a,#0x00
000168 92*01 [24] 912 mov _USB_EP0_SETUP_sloc0_1_0,c
00016A 40 06 [24] 913 jc 00178$
00016C 7D 08 [12] 914 mov r5,#0x08
00016E 7E 00 [12] 915 mov r6,#0x00
000170 80 04 [24] 916 sjmp 00179$
000172 917 00178$:
000172 AD*04 [24] 918 mov r5,_USB_SetupLen
000174 AE*05 [24] 919 mov r6,(_USB_SetupLen + 1)
000176 920 00179$:
000176 8D 07 [24] 921 mov ar7,r5
922 ; src/usb_handler.c:160: USB_EP0_copyDescr(len); // copy descriptor to EP0
000178 8F 82 [24] 923 mov dpl,r7
00017A 12r00r27 [24] 924 lcall _USB_EP0_copyDescr
925 ; src/usb_handler.c:162: break;
00017D 02r02r90 [24] 926 ljmp 00172$
927 ; src/usb_handler.c:164: case USB_SET_ADDRESS:
000180 928 00122$:
929 ; src/usb_handler.c:165: USB_Addr = USB_SetupBuf->wValueL; // save the assigned address
000180 90 00 02 [24] 930 mov dptr,#(_EP0_buffer + 0x0002)
000183 E0 [24] 931 movx a,@dptr
000184 F5*03 [12] 932 mov _USB_Addr,a
933 ; src/usb_handler.c:166: break;
000186 02r02r90 [24] 934 ljmp 00172$
935 ; src/usb_handler.c:168: case USB_GET_CONFIGURATION:
000189 936 00123$:
937 ; src/usb_handler.c:169: EP0_buffer[0] = USB_Config;
000189 90 00 00 [24] 938 mov dptr,#_EP0_buffer
00018C E5*02 [12] 939 mov a,_USB_Config
00018E F0 [24] 940 movx @dptr,a
941 ; src/usb_handler.c:170: if(USB_SetupLen > 1) USB_SetupLen = 1;
00018F AD*04 [24] 942 mov r5,_USB_SetupLen
000191 AE*05 [24] 943 mov r6,(_USB_SetupLen + 1)
000193 C3 [12] 944 clr c
000194 74 01 [12] 945 mov a,#0x01
000196 9D [12] 946 subb a,r5
000197 E4 [12] 947 clr a
000198 9E [12] 948 subb a,r6
000199 50 06 [24] 949 jnc 00125$
00019B 75*04 01 [24] 950 mov _USB_SetupLen,#0x01
00019E 75*05 00 [24] 951 mov (_USB_SetupLen + 1),#0x00
0001A1 952 00125$:
953 ; src/usb_handler.c:171: len = USB_SetupLen;
0001A1 AF*04 [24] 954 mov r7,_USB_SetupLen
955 ; src/usb_handler.c:172: break;
0001A3 02r02r90 [24] 956 ljmp 00172$
957 ; src/usb_handler.c:174: case USB_SET_CONFIGURATION:
0001A6 958 00126$:
959 ; src/usb_handler.c:175: USB_Config = USB_SetupBuf->wValueL;
0001A6 90 00 02 [24] 960 mov dptr,#(_EP0_buffer + 0x0002)
0001A9 E0 [24] 961 movx a,@dptr
0001AA F5*02 [12] 962 mov _USB_Config,a
963 ; src/usb_handler.c:176: USB_ENUM_OK = 1;
964 ; assignBit
0001AC D2*00 [12] 965 setb _USB_ENUM_OK
966 ; src/usb_handler.c:177: break;
0001AE 02r02r90 [24] 967 ljmp 00172$
968 ; src/usb_handler.c:185: case USB_GET_STATUS:
0001B1 969 00129$:
970 ; src/usb_handler.c:186: EP0_buffer[0] = 0x00;
0001B1 90 00 00 [24] 971 mov dptr,#_EP0_buffer
0001B4 E4 [12] 972 clr a
0001B5 F0 [24] 973 movx @dptr,a
974 ; src/usb_handler.c:187: EP0_buffer[1] = 0x00;
0001B6 90 00 01 [24] 975 mov dptr,#(_EP0_buffer + 0x0001)
0001B9 F0 [24] 976 movx @dptr,a
977 ; src/usb_handler.c:188: if(USB_SetupLen > 2) USB_SetupLen = 2;
0001BA AD*04 [24] 978 mov r5,_USB_SetupLen
0001BC AE*05 [24] 979 mov r6,(_USB_SetupLen + 1)
0001BE C3 [12] 980 clr c
0001BF 74 02 [12] 981 mov a,#0x02
0001C1 9D [12] 982 subb a,r5
0001C2 E4 [12] 983 clr a
0001C3 9E [12] 984 subb a,r6
0001C4 50 06 [24] 985 jnc 00131$
0001C6 75*04 02 [24] 986 mov _USB_SetupLen,#0x02
0001C9 75*05 00 [24] 987 mov (_USB_SetupLen + 1),#0x00
0001CC 988 00131$:
989 ; src/usb_handler.c:189: len = USB_SetupLen;
0001CC AF*04 [24] 990 mov r7,_USB_SetupLen
991 ; src/usb_handler.c:190: break;
0001CE 02r02r90 [24] 992 ljmp 00172$
993 ; src/usb_handler.c:192: case USB_CLEAR_FEATURE:
0001D1 994 00132$:
995 ; src/usb_handler.c:193: if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_DEVICE) {
0001D1 E5*01 [12] 996 mov a,_USB_SetupTyp
0001D3 54 1F [12] 997 anl a,#0x1f
0001D5 70 1E [24] 998 jnz 00147$
999 ; src/usb_handler.c:194: if(USB_SetupBuf->wValueL == 0x01) {
0001D7 90 00 02 [24] 1000 mov dptr,#(_EP0_buffer + 0x0002)
0001DA E0 [24] 1001 movx a,@dptr
0001DB FE [12] 1002 mov r6,a
0001DC BE 01 11 [24] 1003 cjne r6,#0x01,00137$
1004 ; src/usb_handler.c:195: if(((uint8_t*)&CfgDescr)[7] & 0x20) {
0001DF 90r00r07 [24] 1005 mov dptr,#(_CfgDescr + 0x0007)
0001E2 E4 [12] 1006 clr a
0001E3 93 [24] 1007 movc a,@a+dptr
0001E4 FE [12] 1008 mov r6,a
0001E5 30 E5 03 [24] 1009 jnb acc.5,00309$
0001E8 02r02r90 [24] 1010 ljmp 00172$
0001EB 1011 00309$:
1012 ; src/usb_handler.c:198: else len = 0xff; // failed
0001EB 7F FF [12] 1013 mov r7,#0xff
0001ED 02r02r90 [24] 1014 ljmp 00172$
0001F0 1015 00137$:
1016 ; src/usb_handler.c:200: else len = 0xff; // failed
0001F0 7F FF [12] 1017 mov r7,#0xff
0001F2 02r02r90 [24] 1018 ljmp 00172$
0001F5 1019 00147$:
1020 ; src/usb_handler.c:202: else if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_ENDP) {
0001F5 AD*01 [24] 1021 mov r5,_USB_SetupTyp
0001F7 53 05 1F [24] 1022 anl ar5,#0x1f
0001FA 7E 00 [12] 1023 mov r6,#0x00
0001FC BD 02 26 [24] 1024 cjne r5,#0x02,00144$
0001FF BE 00 23 [24] 1025 cjne r6,#0x00,00144$
1026 ; src/usb_handler.c:203: switch(USB_SetupBuf->wIndexL) {
000202 90 00 04 [24] 1027 mov dptr,#(_EP0_buffer + 0x0004)
000205 E0 [24] 1028 movx a,@dptr
000206 FE [12] 1029 mov r6,a
000207 BE 01 02 [24] 1030 cjne r6,#0x01,00312$
00020A 80 05 [24] 1031 sjmp 00139$
00020C 1032 00312$:
1033 ; src/usb_handler.c:205: case 0x01:
00020C BE 81 12 [24] 1034 cjne r6,#0x81,00141$
00020F 80 06 [24] 1035 sjmp 00140$
000211 1036 00139$:
1037 ; src/usb_handler.c:206: UEP1_CTRL = (UEP1_CTRL & ~(bUEP_R_TOG | MASK_UEP_R_RES)) | UEP_R_RES_ACK;
000211 53 D2 73 [24] 1038 anl _UEP1_CTRL,#0x73
1039 ; src/usb_handler.c:207: break;
000214 02r02r90 [24] 1040 ljmp 00172$
1041 ; src/usb_handler.c:210: case 0x81:
000217 1042 00140$:
1043 ; src/usb_handler.c:211: UEP1_CTRL = (UEP1_CTRL & ~(bUEP_T_TOG | MASK_UEP_T_RES)) | UEP_T_RES_NAK;
000217 74 BC [12] 1044 mov a,#0xbc
000219 55 D2 [12] 1045 anl a,_UEP1_CTRL
00021B 44 02 [12] 1046 orl a,#0x02
00021D F5 D2 [12] 1047 mov _UEP1_CTRL,a
1048 ; src/usb_handler.c:212: break;
1049 ; src/usb_handler.c:244: default:
00021F 80 6F [24] 1050 sjmp 00172$
000221 1051 00141$:
1052 ; src/usb_handler.c:245: len = 0xff; // unsupported endpoint
000221 7F FF [12] 1053 mov r7,#0xff
1054 ; src/usb_handler.c:247: }
000223 80 6B [24] 1055 sjmp 00172$
000225 1056 00144$:
1057 ; src/usb_handler.c:249: else len = 0xff; // unsupported for non-endpoint
000225 7F FF [12] 1058 mov r7,#0xff
1059 ; src/usb_handler.c:250: break;
1060 ; src/usb_handler.c:252: case USB_SET_FEATURE:
000227 80 67 [24] 1061 sjmp 00172$
000229 1062 00149$:
1063 ; src/usb_handler.c:253: if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_DEVICE) {
000229 E5*01 [12] 1064 mov a,_USB_SetupTyp
00022B 54 1F [12] 1065 anl a,#0x1f
00022D 70 19 [24] 1066 jnz 00166$
1067 ; src/usb_handler.c:254: if(USB_SetupBuf->wValueL == 0x01) {
00022F 90 00 02 [24] 1068 mov dptr,#(_EP0_buffer + 0x0002)
000232 E0 [24] 1069 movx a,@dptr
000233 FE [12] 1070 mov r6,a
000234 BE 01 0D [24] 1071 cjne r6,#0x01,00153$
1072 ; src/usb_handler.c:255: if( !(((uint8_t*)&CfgDescr)[7] & 0x20) ) len = 0xff; // failed
000237 90r00r07 [24] 1073 mov dptr,#(_CfgDescr + 0x0007)
00023A E4 [12] 1074 clr a
00023B 93 [24] 1075 movc a,@a+dptr
00023C FE [12] 1076 mov r6,a
00023D 20 E5 50 [24] 1077 jb acc.5,00172$
000240 7F FF [12] 1078 mov r7,#0xff
000242 80 4C [24] 1079 sjmp 00172$
000244 1080 00153$:
1081 ; src/usb_handler.c:257: else len = 0xff; // failed
000244 7F FF [12] 1082 mov r7,#0xff
000246 80 48 [24] 1083 sjmp 00172$
000248 1084 00166$:
1085 ; src/usb_handler.c:259: else if((USB_SetupTyp & USB_REQ_RECIP_MASK) == USB_REQ_RECIP_ENDP) {
000248 AD*01 [24] 1086 mov r5,_USB_SetupTyp
00024A 53 05 1F [24] 1087 anl ar5,#0x1f
00024D 7E 00 [12] 1088 mov r6,#0x00
00024F BD 02 34 [24] 1089 cjne r5,#0x02,00163$
000252 BE 00 31 [24] 1090 cjne r6,#0x00,00163$
1091 ; src/usb_handler.c:260: if(USB_SetupBuf->wValueL == 0x00) {
000255 90 00 02 [24] 1092 mov dptr,#(_EP0_buffer + 0x0002)
000258 E0 [24] 1093 movx a,@dptr
000259 70 27 [24] 1094 jnz 00160$
1095 ; src/usb_handler.c:261: switch(USB_SetupBuf->wIndexL) {
00025B 90 00 04 [24] 1096 mov dptr,#(_EP0_buffer + 0x0004)
00025E E0 [24] 1097 movx a,@dptr
00025F FE [12] 1098 mov r6,a
000260 BE 01 02 [24] 1099 cjne r6,#0x01,00322$
000263 80 05 [24] 1100 sjmp 00155$
000265 1101 00322$:
1102 ; src/usb_handler.c:263: case 0x01:
000265 BE 81 16 [24] 1103 cjne r6,#0x81,00157$
000268 80 0A [24] 1104 sjmp 00156$
00026A 1105 00155$:
1106 ; src/usb_handler.c:264: UEP1_CTRL = (UEP1_CTRL & ~bUEP_R_TOG) | UEP_R_RES_STALL;
00026A 74 7F [12] 1107 mov a,#0x7f
00026C 55 D2 [12] 1108 anl a,_UEP1_CTRL
00026E 44 0C [12] 1109 orl a,#0x0c
000270 F5 D2 [12] 1110 mov _UEP1_CTRL,a
1111 ; src/usb_handler.c:265: break;
1112 ; src/usb_handler.c:268: case 0x81:
000272 80 1C [24] 1113 sjmp 00172$
000274 1114 00156$:
1115 ; src/usb_handler.c:269: UEP1_CTRL = (UEP1_CTRL & ~bUEP_T_TOG) | UEP_T_RES_STALL;
000274 74 BF [12] 1116 mov a,#0xbf
000276 55 D2 [12] 1117 anl a,_UEP1_CTRL
000278 44 03 [12] 1118 orl a,#0x03
00027A F5 D2 [12] 1119 mov _UEP1_CTRL,a
1120 ; src/usb_handler.c:270: break;
1121 ; src/usb_handler.c:302: default:
00027C 80 12 [24] 1122 sjmp 00172$
00027E 1123 00157$:
1124 ; src/usb_handler.c:303: len = 0xff; // failed
00027E 7F FF [12] 1125 mov r7,#0xff
1126 ; src/usb_handler.c:305: }
000280 80 0E [24] 1127 sjmp 00172$
000282 1128 00160$:
1129 ; src/usb_handler.c:307: else len = 0xff; // failed
000282 7F FF [12] 1130 mov r7,#0xff
000284 80 0A [24] 1131 sjmp 00172$
000286 1132 00163$:
1133 ; src/usb_handler.c:309: else len = 0xff; // failed
000286 7F FF [12] 1134 mov r7,#0xff
1135 ; src/usb_handler.c:310: break;
1136 ; src/usb_handler.c:312: default:
000288 80 06 [24] 1137 sjmp 00172$
00028A 1138 00168$:
1139 ; src/usb_handler.c:313: len = 0xff; // failed
00028A 7F FF [12] 1140 mov r7,#0xff
1141 ; src/usb_handler.c:315: }
00028C 80 02 [24] 1142 sjmp 00172$
00028E 1143 00171$:
1144 ; src/usb_handler.c:330: else len = 0xff;
00028E 7F FF [12] 1145 mov r7,#0xff
000290 1146 00172$:
1147 ; src/usb_handler.c:332: if(len == 0xff) { // stall
000290 BF FF 07 [24] 1148 cjne r7,#0xff,00174$
1149 ; src/usb_handler.c:333: USB_SetupReq = 0xff;
000293 75*00 FF [24] 1150 mov _USB_SetupReq,#0xff
1151 ; src/usb_handler.c:334: UEP0_CTRL = bUEP_R_TOG | bUEP_T_TOG | UEP_R_RES_STALL | UEP_T_RES_STALL; // STALL
000296 75 DC CF [24] 1152 mov _UEP0_CTRL,#0xcf
000299 22 [24] 1153 ret
00029A 1154 00174$:
1155 ; src/usb_handler.c:337: USB_SetupLen -= len;
00029A 8F 05 [24] 1156 mov ar5,r7
00029C 7E 00 [12] 1157 mov r6,#0x00
00029E AB*04 [24] 1158 mov r3,_USB_SetupLen
0002A0 AC*05 [24] 1159 mov r4,(_USB_SetupLen + 1)
0002A2 EB [12] 1160 mov a,r3
0002A3 C3 [12] 1161 clr c
0002A4 9D [12] 1162 subb a,r5
0002A5 FB [12] 1163 mov r3,a
0002A6 EC [12] 1164 mov a,r4
0002A7 9E [12] 1165 subb a,r6
0002A8 FC [12] 1166 mov r4,a
0002A9 8B*04 [24] 1167 mov _USB_SetupLen,r3
0002AB 8C*05 [24] 1168 mov (_USB_SetupLen + 1),r4
1169 ; src/usb_handler.c:338: UEP0_T_LEN = len;
0002AD 8F DD [24] 1170 mov _UEP0_T_LEN,r7
1171 ; src/usb_handler.c:339: UEP0_CTRL = bUEP_R_TOG | bUEP_T_TOG | UEP_R_RES_ACK | UEP_T_RES_ACK;
0002AF 75 DC C0 [24] 1172 mov _UEP0_CTRL,#0xc0
1173 ; src/usb_handler.c:341: }
0002B2 22 [24] 1174 ret
1175 ;------------------------------------------------------------
1176 ;Allocation info for local variables in function 'USB_EP0_IN'
1177 ;------------------------------------------------------------
1178 ;len Allocated to registers r6
1179 ;------------------------------------------------------------
1180 ; src/usb_handler.c:344: void USB_EP0_IN(void) {
1181 ; -----------------------------------------
1182 ; function USB_EP0_IN
1183 ; -----------------------------------------
0002B3 1184 _USB_EP0_IN:
1185 ; src/usb_handler.c:361: switch(USB_SetupReq) {
0002B3 AF*00 [24] 1186 mov r7,_USB_SetupReq
0002B5 BF 05 02 [24] 1187 cjne r7,#0x05,00121$
0002B8 80 3A [24] 1188 sjmp 00102$
0002BA 1189 00121$:
0002BA BF 06 45 [24] 1190 cjne r7,#0x06,00103$
1191 ; src/usb_handler.c:363: len = USB_SetupLen >= EP0_SIZE ? EP0_SIZE : USB_SetupLen;
0002BD AE*04 [24] 1192 mov r6,_USB_SetupLen
0002BF AF*05 [24] 1193 mov r7,(_USB_SetupLen + 1)
0002C1 C3 [12] 1194 clr c
0002C2 EE [12] 1195 mov a,r6
0002C3 94 08 [12] 1196 subb a,#0x08
0002C5 EF [12] 1197 mov a,r7
0002C6 94 00 [12] 1198 subb a,#0x00
0002C8 92*02 [24] 1199 mov _USB_EP0_IN_sloc0_1_0,c
0002CA 40 06 [24] 1200 jc 00107$
0002CC 7E 08 [12] 1201 mov r6,#0x08
0002CE 7F 00 [12] 1202 mov r7,#0x00
0002D0 80 04 [24] 1203 sjmp 00108$
0002D2 1204 00107$:
0002D2 AE*04 [24] 1205 mov r6,_USB_SetupLen
0002D4 AF*05 [24] 1206 mov r7,(_USB_SetupLen + 1)
0002D6 1207 00108$:
1208 ; src/usb_handler.c:364: USB_EP0_copyDescr(len); // copy descriptor to EP0
0002D6 8E 82 [24] 1209 mov dpl,r6
0002D8 12r00r27 [24] 1210 lcall _USB_EP0_copyDescr
1211 ; src/usb_handler.c:365: USB_SetupLen -= len;
0002DB 8E 05 [24] 1212 mov ar5,r6
0002DD 7F 00 [12] 1213 mov r7,#0x00
0002DF AB*04 [24] 1214 mov r3,_USB_SetupLen
0002E1 AC*05 [24] 1215 mov r4,(_USB_SetupLen + 1)
0002E3 EB [12] 1216 mov a,r3
0002E4 C3 [12] 1217 clr c
0002E5 9D [12] 1218 subb a,r5
0002E6 FB [12] 1219 mov r3,a
0002E7 EC [12] 1220 mov a,r4
0002E8 9F [12] 1221 subb a,r7
0002E9 FC [12] 1222 mov r4,a
0002EA 8B*04 [24] 1223 mov _USB_SetupLen,r3
0002EC 8C*05 [24] 1224 mov (_USB_SetupLen + 1),r4
1225 ; src/usb_handler.c:366: UEP0_T_LEN = len;
0002EE 8E DD [24] 1226 mov _UEP0_T_LEN,r6
1227 ; src/usb_handler.c:367: UEP0_CTRL ^= bUEP_T_TOG; // switch between DATA0 and DATA1
0002F0 63 DC 40 [24] 1228 xrl _UEP0_CTRL,#0x40
1229 ; src/usb_handler.c:368: break;
1230 ; src/usb_handler.c:370: case USB_SET_ADDRESS:
0002F3 22 [24] 1231 ret
0002F4 1232 00102$:
1233 ; src/usb_handler.c:371: USB_DEV_AD = USB_DEV_AD & bUDA_GP_BIT | USB_Addr;
0002F4 E5 E3 [12] 1234 mov a,_USB_DEV_AD
0002F6 54 80 [12] 1235 anl a,#0x80
0002F8 FF [12] 1236 mov r7,a
0002F9 E5*03 [12] 1237 mov a,_USB_Addr
0002FB 4F [12] 1238 orl a,r7
0002FC F5 E3 [12] 1239 mov _USB_DEV_AD,a
1240 ; src/usb_handler.c:372: UEP0_CTRL = bUEP_R_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK;
0002FE 75 DC 82 [24] 1241 mov _UEP0_CTRL,#0x82
1242 ; src/usb_handler.c:373: break;
1243 ; src/usb_handler.c:375: default:
000301 22 [24] 1244 ret
000302 1245 00103$:
1246 ; src/usb_handler.c:376: UEP0_CTRL = bUEP_R_TOG | UEP_T_RES_NAK | UEP_R_RES_ACK;
000302 75 DC 82 [24] 1247 mov _UEP0_CTRL,#0x82
1248 ; src/usb_handler.c:378: }
1249 ; src/usb_handler.c:379: }
000305 22 [24] 1250 ret
1251 ;------------------------------------------------------------
1252 ;Allocation info for local variables in function 'USB_EP0_OUT'
1253 ;------------------------------------------------------------
1254 ; src/usb_handler.c:382: void USB_EP0_OUT(void) {
1255 ; -----------------------------------------
1256 ; function USB_EP0_OUT
1257 ; -----------------------------------------
000306 1258 _USB_EP0_OUT:
1259 ; src/usb_handler.c:397: UEP0_CTRL = bUEP_T_TOG | UEP_T_RES_ACK | UEP_R_RES_ACK;
000306 75 DC 40 [24] 1260 mov _UEP0_CTRL,#0x40
1261 ; src/usb_handler.c:398: }
000309 22 [24] 1262 ret
1263 ;------------------------------------------------------------
1264 ;Allocation info for local variables in function 'USB_interrupt'
1265 ;------------------------------------------------------------
1266 ;callIndex Allocated to registers r7
1267 ;------------------------------------------------------------
1268 ; src/usb_handler.c:405: void USB_interrupt(void) {
1269 ; -----------------------------------------
1270 ; function USB_interrupt
1271 ; -----------------------------------------
00030A 1272 _USB_interrupt:
1273 ; src/usb_handler.c:408: if(UIF_TRANSFER) {
00030A 30 D9 4F [24] 1274 jnb _UIF_TRANSFER,00114$
1275 ; src/usb_handler.c:410: uint8_t callIndex = USB_INT_ST & MASK_UIS_ENDP;
00030D E5 D9 [12] 1276 mov a,_USB_INT_ST
00030F 54 0F [12] 1277 anl a,#0x0f
000311 FF [12] 1278 mov r7,a
1279 ; src/usb_handler.c:411: switch (USB_INT_ST & MASK_UIS_TOKEN) {
000312 AD D9 [24] 1280 mov r5,_USB_INT_ST
000314 53 05 30 [24] 1281 anl ar5,#0x30
000317 7E 00 [12] 1282 mov r6,#0x00
000319 BD 00 05 [24] 1283 cjne r5,#0x00,00168$
00031C BE 00 02 [24] 1284 cjne r6,#0x00,00168$
00031F 80 27 [24] 1285 sjmp 00107$
000321 1286 00168$:
000321 BD 20 05 [24] 1287 cjne r5,#0x20,00169$
000324 BE 00 02 [24] 1288 cjne r6,#0x00,00169$
000327 80 0B [24] 1289 sjmp 00102$
000329 1290 00169$:
000329 BD 30 2E [24] 1291 cjne r5,#0x30,00112$
00032C BE 00 2B [24] 1292 cjne r6,#0x00,00112$
1293 ; src/usb_handler.c:414: EP0_SETUP_callback();
00032F 12r00r4B [24] 1294 lcall _USB_EP0_SETUP
1295 ; src/usb_handler.c:415: break;
1296 ; src/usb_handler.c:417: case UIS_TOKEN_IN:
000332 80 26 [24] 1297 sjmp 00112$
000334 1298 00102$:
1299 ; src/usb_handler.c:418: switch (callIndex) {
000334 BF 00 02 [24] 1300 cjne r7,#0x00,00172$
000337 80 05 [24] 1301 sjmp 00103$
000339 1302 00172$:
1303 ; src/usb_handler.c:419: case 0: EP0_IN_callback(); break;
000339 BF 01 1E [24] 1304 cjne r7,#0x01,00112$
00033C 80 05 [24] 1305 sjmp 00104$
00033E 1306 00103$:
00033E 12r02rB3 [24] 1307 lcall _USB_EP0_IN
1308 ; src/usb_handler.c:421: case 1: EP1_IN_callback(); break;
000341 80 17 [24] 1309 sjmp 00112$
000343 1310 00104$:
000343 12r00r00 [24] 1311 lcall _HID_EP1_IN
1312 ; src/usb_handler.c:436: case UIS_TOKEN_OUT:
000346 80 12 [24] 1313 sjmp 00112$
000348 1314 00107$:
1315 ; src/usb_handler.c:437: switch (callIndex) {
000348 BF 00 02 [24] 1316 cjne r7,#0x00,00174$
00034B 80 05 [24] 1317 sjmp 00108$
00034D 1318 00174$:
1319 ; src/usb_handler.c:438: case 0: EP0_OUT_callback(); break;
00034D BF 01 0A [24] 1320 cjne r7,#0x01,00112$
000350 80 05 [24] 1321 sjmp 00109$
000352 1322 00108$:
000352 12r03r06 [24] 1323 lcall _USB_EP0_OUT
1324 ; src/usb_handler.c:440: case 1: EP1_OUT_callback(); break;
000355 80 03 [24] 1325 sjmp 00112$
000357 1326 00109$:
000357 12r00r00 [24] 1327 lcall _HID_EP1_OUT
1328 ; src/usb_handler.c:454: }
00035A 1329 00112$:
1330 ; src/usb_handler.c:455: UIF_TRANSFER = 0; // clear interrupt flag
1331 ; assignBit
00035A C2 D9 [12] 1332 clr _UIF_TRANSFER
00035C 1333 00114$:
1334 ; src/usb_handler.c:459: if(UIF_SUSPEND) {
1335 ; src/usb_handler.c:460: UIF_SUSPEND = 0; // clear interrupt flag
1336 ; assignBit
00035C 10 DA 02 [24] 1337 jbc _UIF_SUSPEND,00176$
00035F 80 1A [24] 1338 sjmp 00118$
000361 1339 00176$:
1340 ; src/usb_handler.c:462: if(USB_MIS_ST & bUMS_SUSPEND) {
000361 E5 DA [12] 1341 mov a,_USB_MIS_ST
000363 30 E2 15 [24] 1342 jnb acc.2,00118$
1343 ; src/usb_handler.c:463: SAFE_MOD = 0x55;
000366 75 A1 55 [24] 1344 mov _SAFE_MOD,#0x55
1345 ; src/usb_handler.c:464: SAFE_MOD = 0xAA;
000369 75 A1 AA [24] 1346 mov _SAFE_MOD,#0xaa
1347 ; src/usb_handler.c:465: WAKE_CTRL |= bWAK_BY_USB; // enable wakeup by USB
00036C 43 A9 80 [24] 1348 orl _WAKE_CTRL,#0x80
1349 ; src/usb_handler.c:466: USB_SUSPEND_handler(); // custom suspend handler (PCON |= PD;)
00036F 12r00r00 [24] 1350 lcall _ring_probe_release
1351 ; src/usb_handler.c:467: SAFE_MOD = 0x55;
000372 75 A1 55 [24] 1352 mov _SAFE_MOD,#0x55
1353 ; src/usb_handler.c:468: SAFE_MOD = 0xAA;
000375 75 A1 AA [24] 1354 mov _SAFE_MOD,#0xaa
1355 ; src/usb_handler.c:469: WAKE_CTRL &= ~bWAK_BY_USB; // disable wakeup by USB
000378 53 A9 7F [24] 1356 anl _WAKE_CTRL,#0x7f
00037B 1357 00118$:
1358 ; src/usb_handler.c:475: if(UIF_BUS_RST) {
00037B 30 D8 0C [24] 1359 jnb _UIF_BUS_RST,00121$
1360 ; src/usb_handler.c:477: USB_RESET_handler(); // custom reset handler
00037E 12r00r00 [24] 1361 lcall _ring_probe_release
1362 ; src/usb_handler.c:479: USB_EP_init(); // reset endpoints
000381 12r00r00 [24] 1363 lcall _USB_EP_init
1364 ; src/usb_handler.c:480: USB_DEV_AD = 0x00; // reset device address
000384 75 E3 00 [24] 1365 mov _USB_DEV_AD,#0x00
1366 ; src/usb_handler.c:481: USB_INT_FG = 0x1f; // clear all interrupt flags
000387 75 D8 1F [24] 1367 mov _USB_INT_FG,#0x1f
00038A 1368 00121$:
1369 ; src/usb_handler.c:483: }
00038A 22 [24] 1370 ret
1371 .area CSEG (CODE)
1372 .area CONST (CODE)
1373 .area CABS (ABS,CODE)