📄 usb.src
字号:
; bEPPflags.bits.control_state = USB_TRANSMIT;
; SOURCE LINE # 157
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
ORL A,#040H
MOV bEPPflags,A
; ENABLE;
; SOURCE LINE # 158
SETB EA
; }
; SOURCE LINE # 159
RET
?C0025:
; else
; {
; SOURCE LINE # 161
; D12_WriteEndpoint(1, ControlData.wLength, pRomData);//发送16字节内数据
; SOURCE LINE # 162
MOV R5,ControlData+09H
MOV R2,pRomData?843
MOV R1,pRomData?843+01H
MOV R3,#0FFH
MOV R7,#01H
LCALL _D12_WriteEndpoint
; ControlData.wCount += ControlData.wLength;
; SOURCE LINE # 163
MOV A,ControlData+09H
ADD A,ControlData+0BH
MOV ControlData+0BH,A
MOV A,ControlData+08H
ADDC A,ControlData+0AH
MOV ControlData+0AH,A
; DISABLE;
; SOURCE LINE # 164
CLR EA
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 165
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
; ENABLE;
; SOURCE LINE # 166
SETB EA
; }
; SOURCE LINE # 167
; }
; SOURCE LINE # 168
?C0027:
RET
; END OF _code_transmit
;
; //LED和按键处理子程序
; void check_key_LED(void)
RSEG ?PR?check_key_LED?USB
check_key_LED:
USING 0
; SOURCE LINE # 171
; {
; SOURCE LINE # 172
; static unsigned char c, last_key = 0xf;
;
; c = MCU_SWM0 & MCU_SWM1;
; SOURCE LINE # 175
MOV C,MCU_SWM1
ANL C,MCU_SWM0
CLR A
RLC A
MOV c?945,A
; c &= 0x0f;
; SOURCE LINE # 176
ANL c?945,#0FH
; if (c != last_key)
; SOURCE LINE # 177
MOV A,c?945
XRL A,last_key?946
JZ ?C0028
; {
; SOURCE LINE # 178
; D12_WriteEndpoint(3, 1, &c);//发送按键状态
; SOURCE LINE # 179
MOV R3,#00H
MOV R2,#HIGH (c?945)
MOV R1,#LOW (c?945)
MOV R5,#01H
MOV R7,#03H
LCALL _D12_WriteEndpoint
; }
; SOURCE LINE # 180
?C0028:
; last_key = c;
; SOURCE LINE # 181
MOV last_key?946,c?945
; if(bEPPflags.bits.ep1_rxdone)
; SOURCE LINE # 182
MOV R7,bEPPflags+01H
MOV A,R7
RRC A
RRC A
ANL A,#03FH
JNB ACC.0,?C0030
; {
; SOURCE LINE # 183
; DISABLE;
; SOURCE LINE # 184
CLR EA
; bEPPflags.bits.ep1_rxdone = 0;
; SOURCE LINE # 185
MOV R7,bEPPflags+01H
MOV A,R7
ANL A,#0FBH
MOV bEPPflags+01H,A
; ENABLE;
; SOURCE LINE # 186
SETB EA
; MCU_LED0 = !(GenEpBuf[3] & 0x1);//改变LED状态
; SOURCE LINE # 187
MOV R0,#LOW (GenEpBuf+03H)
MOV A,@R0
MOV R7,A
RRC A
CPL C
MOV MCU_LED0,C
; MCU_LED1 = !(GenEpBuf[3] & 0x2);
; SOURCE LINE # 188
MOV A,R7
MOV C,ACC.1
CPL C
MOV MCU_LED1,C
; }
; SOURCE LINE # 189
; }
; SOURCE LINE # 190
?C0030:
RET
; END OF check_key_LED
;
; void help_devreq(unsigned char typ, unsigned char req)
RSEG ?PR?_help_devreq?USB
_help_devreq:
USING 0
;---- Variable 'typ?1047' assigned to Register 'R7' ----
;---- Variable 'req?1048' assigned to Register 'R5' ----
; SOURCE LINE # 192
; {
; SOURCE LINE # 193
; typ >>= 5;
; SOURCE LINE # 194
MOV A,R7
SWAP A
RRC A
ANL A,#07H
MOV R7,A
; if(typ == USB_STANDARD_REQUEST)
; SOURCE LINE # 195
JZ ?C0034
; {
; SOURCE LINE # 196
; }
; SOURCE LINE # 197
?C0031:
; else if(bEPPflags.bits.verbose) printf("Request Type = %s, bRequest = 0x%bx.\n", _NAME_USB_REQUEST_TYPE[typ],req);
; SOURCE LINE # 198
MOV R6,bEPPflags+01H
MOV A,R6
CLR C
RRC A
JNB ACC.0,?C0034
MOV A,R7
MOV B,#03H
MUL AB
ADD A,#LOW (_NAME_USB_REQUEST_TYPE)
MOV DPL,A
CLR A
ADDC A,#HIGH (_NAME_USB_REQUEST_TYPE)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV R3,A
MOV A,#01H
MOVC A,@A+DPTR
MOV R2,A
MOV A,#02H
MOVC A,@A+DPTR
MOV ?_printf?BYTE+03H,R3
MOV ?_printf?BYTE+04H,R2
MOV ?_printf?BYTE+05H,A
MOV ?_printf?BYTE+06H,R5
MOV R3,#0FFH
MOV R2,#HIGH (?SC_291)
MOV R1,#LOW (?SC_291)
LCALL _printf
; }
; SOURCE LINE # 199
?C0034:
RET
; END OF _help_devreq
;
; //请求处理子程序
; void control_handler()
RSEG ?PR?control_handler?USB
control_handler:
USING 0
; SOURCE LINE # 202
; {
; SOURCE LINE # 203
; unsigned char type, req;
; type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK;
; SOURCE LINE # 205
MOV A,ControlData
ANL A,#060H
MOV type?1149,A
; req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK;
; SOURCE LINE # 206
MOV A,ControlData+01H
ANL A,#0FH
MOV req?1150,A
; help_devreq(type, req); //显示设备请求
; SOURCE LINE # 207
MOV R5,A
MOV R7,type?1149
LCALL _help_devreq
; if (type == USB_STANDARD_REQUEST) (*StandardDeviceRequest[req])();//调用标准请求
; SOURCE LINE # 208
MOV A,type?1149
JNZ ?C0035
MOV A,req?1150
MOV B,#03H
MUL AB
ADD A,#LOW (StandardDeviceRequest)
MOV DPL,A
CLR A
ADDC A,#HIGH (StandardDeviceRequest)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV A,#01H
MOVC A,@A+DPTR
MOV R2,A
MOV A,#02H
MOVC A,@A+DPTR
MOV R1,A
LJMP ?C?ICALL
?C0035:
; else if (type == USB_VENDOR_REQUEST) (*VendorDeviceRequest[req])();//调用厂商请求
; SOURCE LINE # 209
MOV A,type?1149
CJNE A,#040H,?C0037
MOV A,req?1150
MOV B,#03H
MUL AB
ADD A,#LOW (VendorDeviceRequest)
MOV DPL,A
CLR A
ADDC A,#HIGH (VendorDeviceRequest)
MOV DPH,A
CLR A
MOVC A,@A+DPTR
MOV A,#01H
MOVC A,@A+DPTR
MOV R2,A
MOV A,#02H
MOVC A,@A+DPTR
MOV R1,A
LJMP ?C?ICALL
?C0037:
; else stall_ep0();
; SOURCE LINE # 210
LCALL stall_ep0
; }
; SOURCE LINE # 211
?C0039:
RET
; END OF control_handler
CSEG AT 0000BH
LJMP timer_isr
;
;
; //定时器0中断处理
; timer_isr() interrupt 1
RSEG ?PR?timer_isr?USB
USING 0
timer_isr:
PUSH ACC
PUSH PSW
MOV PSW,#00H
PUSH AR7
USING 0
; SOURCE LINE # 215
; {
; DISABLE;
; SOURCE LINE # 217
CLR EA
; ClockTicks++;
; SOURCE LINE # 218
MOV A,ClockTicks+03H
ADD A,#01H
MOV ClockTicks+03H,A
CLR A
ADDC A,ClockTicks+02H
MOV ClockTicks+02H,A
CLR A
ADDC A,ClockTicks+01H
MOV ClockTicks+01H,A
CLR A
ADDC A,ClockTicks
MOV ClockTicks,A
; bEPPflags.bits.timer = 1;
; SOURCE LINE # 219
MOV R7,bEPPflags
MOV A,R7
ORL A,#01H
MOV bEPPflags,A
; ENABLE;
; SOURCE LINE # 220
SETB EA
; }
; SOURCE LINE # 221
POP AR7
POP PSW
POP ACC
RETI
; END OF timer_isr
CSEG AT 00003H
LJMP usb_isr
;
; //USB中断处理
; usb_isr() interrupt 0
RSEG ?PR?usb_isr?USB
USING 0
usb_isr:
PUSH ACC
PUSH B
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW,#00H
PUSH AR0
PUSH AR1
PUSH AR2
PUSH AR3
PUSH AR4
PUSH AR5
PUSH AR6
PUSH AR7
USING 0
; SOURCE LINE # 224
; {
; DISABLE;
; SOURCE LINE # 226
CLR EA
; fn_usb_isr();
; SOURCE LINE # 227
LCALL fn_usb_isr
; ENABLE;
; SOURCE LINE # 228
SETB EA
; }
; SOURCE LINE # 229
POP AR7
POP AR6
POP AR5
POP AR4
POP AR3
POP AR2
POP AR1
POP AR0
POP PSW
POP DPL
POP DPH
POP B
POP ACC
RETI
; END OF usb_isr
;
; //USB中断服务子程序
; void fn_usb_isr()
RSEG ?PR?fn_usb_isr?USB
fn_usb_isr:
USING 0
; SOURCE LINE # 232
; {
; SOURCE LINE # 233
; unsigned int i_st;
;
; bEPPflags.bits.in_isr = 1;
; SOURCE LINE # 236
MOV R7,bEPPflags
MOV A,R7
ORL A,#020H
MOV bEPPflags,A
;
; i_st = D12_ReadInterruptRegister();//读取中断寄存器
; SOURCE LINE # 238
LCALL D12_ReadInterruptRegister
MOV i_st?1451,R6
MOV i_st?1451+01H,R7
;
; if(i_st != 0)
; SOURCE LINE # 240
MOV A,i_st?1451+01H
ORL A,i_st?1451
JZ ?C0042
; {
; SOURCE LINE # 241
; if(i_st & D12_INT_BUSRESET)
; SOURCE LINE # 242
MOV A,i_st?1451+01H
JNB ACC.6,?C0043
; {
; SOURCE LINE # 243
; bus_reset();//USB总线服务
; SOURCE LINE # 244
LCALL bus_reset
; bEPPflags.bits.bus_reset = 1;
; SOURCE LINE # 245
MOV R7,bEPPflags
MOV A,R7
ORL A,#02H
MOV bEPPflags,A
; }
; SOURCE LINE # 246
?C0043:
; if(i_st & D12_INT_EOT)
; SOURCE LINE # 247
MOV A,i_st?1451
JNB ACC.0,?C0044
; dma_eot();//DMA传输结束
; SOURCE LINE # 248
LCALL dma_eot
?C0044:
; if(i_st & D12_INT_SUSPENDCHANGE)
; SOURCE LINE # 249
MOV A,i_st?1451+01H
JNB ACC.7,?C0045
; bEPPflags.bits.suspend = 1;//挂起改变
; SOURCE LINE # 250
MOV R7,bEPPflags
MOV A,R7
ORL A,#04H
MOV bEPPflags,A
?C0045:
; if(i_st & D12_INT_ENDP0IN)
; SOURCE LINE # 251
MOV A,i_st?1451+01H
JNB ACC.1,?C0046
; ep0_txdone();//端点0IN中断
; SOURCE LINE # 252
LCALL ep0_txdone
?C0046:
; if(i_st & D12_INT_ENDP0OUT)
; SOURCE LINE # 253
MOV A,i_st?1451+01H
JNB ACC.0,?C0047
; ep0_rxdone();//端点0OUT中断
; SOURCE LINE # 254
LCALL ep0_rxdone
?C0047:
; if(i_st & D12_INT_ENDP1IN)
; SOURCE LINE # 255
MOV A,i_st?1451+01H
JNB ACC.3,?C0048
; ep1_txdone();//端点1IN中断
; SOURCE LINE # 256
LCALL ep1_txdone
?C0048:
; if(i_st & D12_INT_ENDP1OUT)
; SOURCE LINE # 257
MOV A,i_st?1451+01H
JNB ACC.2,?C0049
; ep1_rxdone();//端点1OUT中断
; SOURCE LINE # 258
LCALL ep1_rxdone
?C0049:
; if(i_st & D12_INT_ENDP2IN)
; SOURCE LINE # 259
MOV A,i_st?1451+01H
JNB ACC.5,?C0050
; main_txdone();//端点2IN中断
; SOURCE LINE # 260
LCALL main_txdone
?C0050:
; if(i_st & D12_INT_ENDP2OUT)
; SOURCE LINE # 261
MOV A,i_st?1451+01H
JNB ACC.4,?C0042
; main_rxdone();//端点2OUT中断
; SOURCE LINE # 262
LCALL main_rxdone
; }
; SOURCE LINE # 263
?C0042:
; bEPPflags.bits.in_isr = 0;
; SOURCE LINE # 264
MOV R7,bEPPflags
MOV A,R7
ANL A,#0DFH
MOV bEPPflags,A
; }
; SOURCE LINE # 265
RET
; END OF fn_usb_isr
;
; //总线复位处理子程序
; void bus_reset(void)
RSEG ?PR?bus_reset?USB
bus_reset:
; SOURCE LINE # 268
; {
; SOURCE LINE # 269
; }
; SOURCE LINE # 270
RET
; END OF bus_reset
;
; //端点0OUT中断
; void ep0_rxdone(void)
RSEG ?PR?ep0_rxdone?USB
ep0_rxdone:
USING 0
; SOURCE LINE # 273
; {
; SOURCE LINE # 274
; unsigned char ep_last, i;
; ep_last = D12_ReadLastTransactionStatus(0); //清中断标志
; SOURCE LINE # 276
CLR A
MOV R7,A
LCALL _D12_ReadLastTransactionStatus
;---- Variable 'ep_last?1652' assigned to Register 'R7' ----
; if (ep_last & D12_SETUPPACKET)
; SOURCE LINE # 277
MOV A,R7
JB ACC.5,$ + 6H
LJMP ?C0054
; {
; SOURCE LINE # 278
; //接收到SETUP包
; ControlData.wLength = 0;
; SOURCE LINE # 280
CLR A
MOV ControlData+08H,A
MOV ControlData+09H,A
; ControlData.wCount = 0;
; SOURCE LINE # 281
MOV ControlData+0AH,A
MOV ControlData+0BH,A
; if( D12_ReadEndpoint(0, sizeof(ControlData.DeviceRequest),
; (unsigned char *)(&(ControlData.DeviceRequest))) != sizeof(DEVICE_REQUEST) )
; SOURCE LINE # 283
MOV R3,A
MOV R2,#HIGH (ControlData)
MOV R1,#LOW (ControlData)
MOV R5,#08H
MOV R7,A
LCALL _D12_ReadEndpoint
MOV A,R7
XRL A,#08H
JZ ?C0055
; {
; SOURCE LINE # 284
; //SETUP包出错,返回
; D12_SetEndpointStatus(0, 1);
; SOURCE LINE # 286
LCALL L?0215
; D12_SetEndpointStatus(1, 1);
; SOURCE LINE # 287
MOV R5,#01H
MOV R7,#01H
LCALL _D12_SetEndpointStatus
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 288
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
MOV bEPPflags,A
RET
; return;
; }
; SOURCE LINE # 290
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -