⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logo.lst

📁 利用CY单片机CY7C637XX编写的USB鼠标程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
0200 83 40 [05]                         jmp             request_not_supported   ; alternate than 0, stall.      
0202                            alternate_supported:
0202 19 02 [04]                         mov             A, NO_CHANGE_PENDING
0204 31 27 [05]                         mov             [ep0_in_flag], A
0206 83 35 [05]                         jmp             initialize_no_data_control
                
                
0208                    get_interface_status:                                   ; GET STATUS
0208 19 02 [04]                 mov             A, INTERFACE_STATUS_LENGTH
020A 31 25 [05]                 mov             [maximum_data_count], A
020C 19 6E [04]                 mov             A, (interface_status_table - control_read_table)
020E 31 23 [05]                 mov             [data_start], A
0210 83 0C [05]                 jmp             initialize_control_read
                                
                
0212                    get_interface_interface:                                ; GET INTERFACE
0212 19 01 [04]                 mov             A, INTERFACE_ALTERNATE_LENGTH
0214 31 25 [05]                 mov             [maximum_data_count], A
0216 19 70 [04]                 mov             A, (interface_alternate_table - control_read_table)
0218 31 23 [05]                 mov             [data_start], A
021A 83 0C [05]                 jmp             initialize_control_read
                
                
021C                    set_interface_idle:                                             ; SET IDLE
021C 1A FB [05]                 mov             A, [wValuehi]                           ; test if new idle time 
021E 16 00 [05]                 cmp             A, 00h                                          ; disables idle timer
0220 A2 30 [05]                 jz              idle_timer_disable
                
0222 1A 30 [05]                 mov             A, [idle_timer]                         ; test if less than 4ms left
0224 16 01 [05]                 cmp             A, 01h
0226 A2 34 [05]                 jz              set_idle_last_not_expired
                
0228 1A FB [05]                 mov             A, [wValuehi]                           ; test if time left less than
022A 08 30 [06]                 sub             A, [idle_timer]                         ; new idle value
022C D2 44 [05]                 jnc             set_idle_new_timer_less
                
022E 82 50 [05]                 jmp             set_idle_normal
                
0230                            idle_timer_disable:
0230 31 2A [05]                         mov             [idle], A                               ; disable idle timer
0232 82 5A [05]                         jmp             set_idle_done
                
0234                            set_idle_last_not_expired:
0234 19 02 [04]                         mov             A, EVENT_PENDING                ; send report immediately
0236 31 2D [05]                         mov             [event_machine], A
0238 19 00 [04]                         mov             A, 00h                                  ; reset idle prescaler
023A 31 31 [05]                         mov             [idle_prescaler], A
023C 1A FB [05]                         mov             A, [wValuehi]                   ; set new idle value
023E 31 30 [05]                         mov             [idle_timer], A
0240 31 2A [05]                         mov             [idle], A
0242 82 5A [05]                         jmp             set_idle_done
                
0244                            set_idle_new_timer_less:                        
0244 19 00 [04]                         mov             A, 00h
0246 31 31 [05]                         mov             [idle_prescaler], A             ; reset idle prescaler
0248 1A FB [05]                         mov             A, [wValuehi]
024A 31 30 [05]                         mov             [idle_timer], A                 ; update idle time value
024C 31 2A [05]                         mov             [idle], A
024E 82 5A [05]                         jmp             set_idle_done
                
0250                            set_idle_normal:
0250 19 00 [04]                         mov             A, 00h                                  ; reset idle prescaler
0252 31 31 [05]                         mov             [idle_prescaler], A
0254 1A FB [05]                         mov             A, [wValuehi]                   ; update idle time value
0256 31 30 [05]                         mov             [idle_timer], A
0258 31 2A [05]                         mov             [idle], A
                
025A                            set_idle_done:
025A 19 02 [04]                         mov             A, NO_CHANGE_PENDING    ; respond with no-data control
025C 31 27 [05]                         mov             [ep0_in_flag], A                ; transaction
025E 83 35 [05]                         jmp             initialize_no_data_control
                
                
0260                    set_interface_protocol:                                 ; SET PROTOCOL
0260 1A FA [05]                 mov             A, [wValuelo]
0262 31 2B [05]                 mov             [protocol], A                           ; set protocol value
0264 19 02 [04]                 mov             A, NO_CHANGE_PENDING
0266 31 27 [05]                 mov             [ep0_in_flag], A                        ; respond with no-data control
0268 83 35 [05]                 jmp             initialize_no_data_control      ; transaction
                
                
026A                    get_interface_report:                                   ; GET REPORT
026A 19 80 [04]                 mov             A, DATA_TOGGLE                          ; set data toggle to DATA ONE
026C 31 22 [05]                 mov             [ep0_data_toggle], A
026E 19 01 [04]                 mov             A, NAK_IN_OUT                           ; clear setup bit to write to
0270 2A 12 [05]                 iowr    ep0_mode                                        ; endpoint fifo
                
0272 1A F0 [05]                 mov             A, [ep1_dmabuff0]                       ; copy over button data
0274 31 F8 [05]                 mov             [ep0_dmabuff0], A
                
0276 1A F1 [05]                 mov             A, [ep1_dmabuff1]                       ; copy horizontal data
0278 31 F9 [05]                 mov             [ep0_dmabuff1], A
                
027A 1A F2 [05]                 mov             A, [ep1_dmabuff2]                       ; copy vertical data
027C 31 FA [05]                 mov             [ep0_dmabuff2], A
                
027E 19 02 [04]                 mov             A, CONTROL_READ_DATA            ; set state machine state
0280 31 26 [05]                 mov             [ep0_in_machine], A                     
0282 1C 03 [04]                 mov             X, 03h                                          ; set number of byte to transfer to 3
0284 83 69 [05]                 jmp             dmabuffer_load_done                     ; jump to finish transfer
                                
                        
0286                    get_interface_idle:                                             ; GET IDLE
0286 19 80 [04]                 mov             A, DATA_TOGGLE                          ; set data toggle to DATA ONE
0288 31 22 [05]                 mov             [ep0_data_toggle], A
028A 19 01 [04]                 mov             A, NAK_IN_OUT                           ; clear setup bit to write to
028C 2A 12 [05]                 iowr    ep0_mode                                        ; endpoint fifo
                
028E 1A 2A [05]                 mov             A, [idle]                                       ; copy over idle time
0290 31 F8 [05]                 mov             [ep0_dmabuff0], A
                
0292 19 02 [04]                 mov             A, CONTROL_READ_DATA            ; set state machine state
0294 31 26 [05]                 mov             [ep0_in_machine], A                     
0296 1C 01 [04]                 mov             X, 01h                                          ; set number of byte to transfer to 3
0298 83 69 [05]                 jmp             dmabuffer_load_done                     ; jump to finish transfer
                
                        
029A                    get_interface_protocol:                                 ; GET PROTOCOL
029A 19 01 [04]                 mov             A, INTERFACE_PROTOCOL_LENGTH
029C 31 25 [05]                 mov             [maximum_data_count], A         ; get offset of device descriptor table
029E 1A 2B [05]                 mov             A, [protocol]
02A0 10 01 [04]                 and             A, 01h
02A2 A2 AA [05]                 jz              boot_protocol
02A4                            report_protocol:
02A4 19 72 [04]                         mov             A, (interface_report_protocol - control_read_table)
02A6 31 23 [05]                         mov             [data_start], A
02A8 83 0C [05]                         jmp             initialize_control_read ; get ready to send data
02AA                            boot_protocol:
02AA 19 71 [04]                         mov             A, (interface_boot_protocol - control_read_table)
02AC 31 23 [05]                         mov             [data_start], A
02AE 83 0C [05]                         jmp             initialize_control_read ; get ready to send data
                
                
02B0                    get_interface_hid:
02B0 1A FB [05]                 mov             A, [wValuehi]
02B2 16 21 [05]                 cmp             A, 21h
02B4 A2 BC [05]                 jz              get_interface_hid_descriptor
02B6 16 22 [05]                 cmp             A, 22h
02B8 A2 C8 [05]                 jz              get_interface_hid_report
02BA 83 40 [05]                 jmp             request_not_supported
                
02BC                    get_interface_hid_descriptor:                   ; GET HID CLASS DESCRIPTOR
02BC 19 00 [04]                 mov             A, 00h                                          ; get hid decriptor length
02BE F7 24 [14]                 index   hid_desc_table
02C0 31 25 [05]                 mov             [maximum_data_count], A         ; get offset of device descriptor table
02C2 19 24 [04]                 mov             A, (hid_desc_table - control_read_table)
02C4 31 23 [05]                 mov             [data_start], A
02C6 83 0C [05]                 jmp             initialize_control_read         ; get ready to send data
                
                
02C8                    get_interface_hid_report:                               ; GET HID REPORT DESCRIPTOR
02C8 19 07 [04]                 mov             A, 07h                                          ; get hid report descriptor length
02CA F7 24 [14]                 index   hid_desc_table
02CC 31 25 [05]                 mov             [maximum_data_count], A         ; get offset of device descriptor table
02CE 19 34 [04]                 mov             A, (hid_report_desc_table - control_read_table)
02D0 31 23 [05]                 mov             [data_start], A
02D2 83 0C [05]                 jmp             initialize_control_read         ; get ready to send data
                
                
                        ;;************ ENDPOINT REQUESTS ************
                
02D4                    clear_endpoint_feature:                                 ; CLEAR FEATURE
02D4 1A FA [05]                 mov             A, [wValuelo]
02D6 16 00 [05]                 cmp             A, ENDPOINT_STALL
02D8 B3 40 [05]                 jnz             request_not_supported           
02DA 19 00 [04]                 mov             A, 00h                                          ; clear endpoint 1 stall
02DC 31 29 [05]                 mov             [ep1_stall], A
02DE 19 02 [04]                 mov             A, NO_CHANGE_PENDING            ; respond with no-data control
02E0 31 27 [05]                 mov             [ep0_in_flag], A
02E2 83 35 [05]                 jmp             initialize_no_data_control
                
02E4                    set_endpoint_feature:                                   ; SET FEATURE
02E4 1A FA [05]                 mov             A, [wValuelo]
02E6 16 00 [05]                 cmp             A, ENDPOINT_STALL
02E8 B3 40 [05]                 jnz             request_not_supported           
02EA 19 FF [04]                 mov             A, FFh                                          ; stall endpoint 1
02EC 31 29 [05]                 mov             [ep1_stall], A
02EE 19 02 [04]                 mov             A, NO_CHANGE_PENDING            ; respond with no-data control
02F0 31 27 [05]                 mov             [ep0_in_flag], A
02F2 83 35 [05]                 jmp             initialize_no_data_control
                
02F4                    get_endpoint_status:                                    ; GET STATUS
02F4 19 02 [04]                 mov             A, ENDPOINT_STALL_LENGTH
02F6 31 25 [05]                 mov             [maximum_data_count], A
02F8 1A 29 [05]                 mov             A, [ep1_stall]                          ; test if endpoint 1 stalled
02FA 10 FF [04]                 and             A, FFh
02FC B3 06 [05]                 jnz             endpoint_stalled
02FE                            endpoint_not_stalled:                           ; send no-stall status
02FE 20    [04]         NOP
02FF 1F    [04]         XPAGE
0300 19 6A [04]                         mov             A, (endpoint_nostall_table - control_read_table)
0302 31 23 [05]                         mov             [data_start], A
0304 83 0C [05]                         jmp             initialize_control_read
0306                            endpoint_stalled:                                       ; send stall status
0306 19 6C [04]                         mov             A, (endpoint_stall_table - control_read_table)
0308 31 23 [05]                         mov             [data_start], A
030A 83 0C [05]                         jmp             initialize_control_read
                                
                ;;***************** CONTROL READ TRANSACTION **************
                
030C                    initialize_control_read:
030C 19 02 [04]                 mov             A, TRANS_CONTROL_READ           ; set transaction type to control read
030E 31 33 [05]                 mov             [ep0_transtype], A
                
0310 19 80 [04]                 mov             A, DATA_TOGGLE                          ; set data toggle to DATA ONE
0312 31 22 [05]                 mov             [ep0_data_toggle], A
                
                                ; if wLengthhi == 0
0314 1A FF [05]                 mov             A, [wLengthhi]                          ; find lesser of requested and maximum
0316 16 00 [05]                 cmp             A, 00h
0318 B3 24 [05]                 jnz             initialize_control_read_done
                                ; and wLengthlo < maximum_data_count
031A 1A FE [05]                 mov             A, [wLengthlo]                          ; find lesser of requested and maximum
031C 17 25 [07]                 cmp             A, [maximum_data_count]         ; response lengths
031E D3 24 [05]                 jnc             initialize_control_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -