📄 mainloop.src
字号:
CLR A
MOV bEPPflags,A
MOV bEPPflags+01H,A
; ENABLE;
; SOURCE LINE # 292
SETB EA
;
; // disable normal+sof interrupt
; D12_SetDMA(0x00);
; SOURCE LINE # 295
MOV R7,A
LCALL _D12_SetDMA
;
; // Initialize D12 working mode
; D12_SetMode(D12_NOLAZYCLOCK|D12_CLOCKRUNNING|D12_SOFTCONNECT, D12_SETTOONE | D12_CLOCK_12M);
; SOURCE LINE # 298
MOV R5,#043H
MOV R7,#016H
LJMP _D12_SetMode
; END OF connect_USB
; //D12_SetMode(D12_SOFTCONNECT, 0x00); /* Enable softconnect */
; }
;
;
; void reconnect_USB(void)
RSEG ?PR?reconnect_USB?MAINLOOP
reconnect_USB:
USING 0
; SOURCE LINE # 303
; {
; SOURCE LINE # 304
; unsigned long clk_cnt;
;
; //Turn on LEDs
; MCU_LED0 = 0;
; SOURCE LINE # 308
CLR MCU_LED0
; MCU_LED1 = 0;
; SOURCE LINE # 309
CLR MCU_LED1
;
; //D12SUSPD = 0; /* wakeup D12 */
; disconnect_USB();
; SOURCE LINE # 312
LCALL disconnect_USB
;
; clk_cnt = ClockTicks;
; SOURCE LINE # 314
MOV clk_cnt?946+03H,ClockTicks+03H
MOV clk_cnt?946+02H,ClockTicks+02H
MOV clk_cnt?946+01H,ClockTicks+01H
MOV clk_cnt?946,ClockTicks
?C0025:
; while(ClockTicks < clk_cnt + 20)
; SOURCE LINE # 315
MOV A,clk_cnt?946+03H
ADD A,#014H
MOV R7,A
CLR A
ADDC A,clk_cnt?946+02H
MOV R6,A
CLR A
ADDC A,clk_cnt?946+01H
MOV R5,A
CLR A
ADDC A,clk_cnt?946
MOV R4,A
MOV R3,ClockTicks+03H
MOV R2,ClockTicks+02H
MOV R1,ClockTicks+01H
MOV R0,ClockTicks
CLR C
LCALL ?C?ULCMP
JC ?C0025
?C0026:
; ;
;
; connect_USB();
; SOURCE LINE # 318
LCALL connect_USB
;
; //Trun off LEDs
; MCU_LED0 = 1;
; SOURCE LINE # 321
SETB MCU_LED0
; MCU_LED1 = 1;
; SOURCE LINE # 322
SETB MCU_LED1
;
; }
; SOURCE LINE # 324
RET
; END OF reconnect_USB
;
; void init_unconfig(void)
RSEG ?PR?init_unconfig?MAINLOOP
init_unconfig:
USING 0
; SOURCE LINE # 326
; {
; SOURCE LINE # 327
; unsigned char i;
;
; D12_SetEndpointEnable(0); /* Disable all endpoints but EPP0. */
; SOURCE LINE # 330
CLR A
MOV R7,A
LJMP _D12_SetEndpointEnable
; END OF init_unconfig
; }
;
; void init_config(void)
RSEG ?PR?init_config?MAINLOOP
init_config:
USING 0
; SOURCE LINE # 333
; {
; SOURCE LINE # 334
; D12_SetEndpointEnable(1); /* Enable generic/iso endpoints. */
; SOURCE LINE # 335
MOV R7,#01H
LJMP _D12_SetEndpointEnable
; END OF init_config
; }
;
; void single_transmit(unsigned char * buf, unsigned char len)
RSEG ?PR?_single_transmit?MAINLOOP
_single_transmit:
USING 0
; SOURCE LINE # 338
;---- Variable 'len?1249' assigned to Register 'R5' ----
;---- Variable 'buf?1248' assigned to Register 'R1/R2/R3' ----
; {
; SOURCE LINE # 339
; if( len <= EP0_PACKET_SIZE) {
; SOURCE LINE # 340
MOV A,R5
SETB C
SUBB A,#010H
JNC ?C0031
; D12_WriteEndpoint(1, buf, len);
; SOURCE LINE # 341
MOV ?_D12_WriteEndpoint?BYTE+04H,R5
MOV R7,#01H
LCALL _D12_WriteEndpoint
; }
; SOURCE LINE # 342
; }
; SOURCE LINE # 343
?C0031:
RET
; END OF _single_transmit
;
; void code_transmit(unsigned char code * pRomData, unsigned short len)
RSEG ?PR?_code_transmit?MAINLOOP
_code_transmit:
USING 0
; SOURCE LINE # 345
MOV pRomData?1350,R6
MOV pRomData?1350+01H,R7
;---- Variable 'len?1351' assigned to Register 'R4/R5' ----
; {
; SOURCE LINE # 346
; ControlData.wCount = 0;
; SOURCE LINE # 347
CLR A
MOV ControlData+0AH,A
MOV ControlData+0BH,A
; if(ControlData.wLength > len)
; SOURCE LINE # 348
SETB C
MOV A,ControlData+09H
SUBB A,R5
MOV A,ControlData+08H
SUBB A,R4
JC ?C0032
; ControlData.wLength = len;
; SOURCE LINE # 349
MOV ControlData+08H,R4
MOV ControlData+09H,R5
?C0032:
;
; ControlData.pData = pRomData;
; SOURCE LINE # 351
MOV ControlData+0CH,#0FFH
MOV ControlData+0DH,pRomData?1350
MOV ControlData+0EH,pRomData?1350+01H
; if( ControlData.wLength >= EP0_PACKET_SIZE) {
; SOURCE LINE # 352
CLR C
MOV A,ControlData+09H
SUBB A,#010H
MOV A,ControlData+08H
SUBB A,#00H
JC ?C0033
; D12_WriteEndpoint(1, ControlData.pData, EP0_PACKET_SIZE);
; SOURCE LINE # 353
MOV R3,ControlData+0CH
MOV R2,ControlData+0DH
MOV R1,ControlData+0EH
MOV ?_D12_WriteEndpoint?BYTE+04H,#010H
MOV R7,#01H
LCALL _D12_WriteEndpoint
; ControlData.wCount += EP0_PACKET_SIZE;
; SOURCE LINE # 354
MOV A,#010H
ADD A,ControlData+0BH
MOV ControlData+0BH,A
CLR A
ADDC A,ControlData+0AH
MOV ControlData+0AH,A
;
; DISABLE;
; SOURCE LINE # 356
CLR EA
; bEPPflags.bits.control_state = USB_TRANSMIT;
; SOURCE LINE # 357
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
ORL A,#040H
; ENABLE;
; SOURCE LINE # 358
; }
; SOURCE LINE # 359
SJMP ?C0057
?C0033:
; else {
; SOURCE LINE # 360
; D12_WriteEndpoint(1, pRomData, ControlData.wLength);
; SOURCE LINE # 361
MOV R2,pRomData?1350
MOV R1,pRomData?1350+01H
MOV R3,#0FFH
MOV ?_D12_WriteEndpoint?BYTE+04H,ControlData+09H
MOV R7,#01H
LCALL _D12_WriteEndpoint
; ControlData.wCount += ControlData.wLength;
; SOURCE LINE # 362
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 # 363
CLR EA
; bEPPflags.bits.control_state = USB_IDLE;
; SOURCE LINE # 364
MOV R7,bEPPflags
MOV A,R7
ANL A,#03FH
?C0057:
MOV bEPPflags,A
; ENABLE;
; SOURCE LINE # 365
SETB EA
; }
; SOURCE LINE # 366
; }
; SOURCE LINE # 367
?C0035:
RET
; END OF _code_transmit
;
; /* LED and Key Processing subroutine */
; void check_key_LED(void)
RSEG ?PR?check_key_LED?MAINLOOP
check_key_LED:
USING 0
; SOURCE LINE # 370
; {
; SOURCE LINE # 371
; static unsigned char c, last_key = 0xf;
;
; // Key processing (infor current key status to host)
; c = MCU_SWM0 & MCU_SWM1; /* get two keys status */
; SOURCE LINE # 375
MOV C,MCU_SWM1
ANL C,MCU_SWM0
CLR A
RLC A
MOV c?1452,A
; c &= 0x0f;
; SOURCE LINE # 376
ANL c?1452,#0FH
; if (c != last_key & bEPPflags.bits.ep1_sxdone) { /* Keys status have been changed */
; SOURCE LINE # 377
MOV A,c?1452
XRL A,last_key?1453
JZ ?C0037
MOV R7,#01H
SJMP ?C0038
?C0037:
MOV R7,#00H
?C0038:
MOV R6,bEPPflags+01H
MOV A,R6
RRC A
RRC A
RRC A
ANL A,#01H
ANL A,R7
JZ ?C0036
; bEPPflags.bits.ep1_sxdone = 0;
; SOURCE LINE # 378
MOV R7,bEPPflags+01H
MOV A,R7
ANL A,#0F7H
MOV bEPPflags+01H,A
; D12_WriteEndpoint(3, &c, 1); /* send key information to host */
; SOURCE LINE # 379
MOV R3,#00H
MOV R2,#HIGH (c?1452)
MOV R1,#LOW (c?1452)
MOV ?_D12_WriteEndpoint?BYTE+04H,#01H
MOV R7,#03H
LCALL _D12_WriteEndpoint
; }
; SOURCE LINE # 380
?C0036:
; last_key = c; /* store current key status */
; SOURCE LINE # 381
MOV last_key?1453,c?1452
;
; // LED processing (get LED info, and set LED
; if(bEPPflags.bits.ep1_rxdone) { /* Get LED control command */
; SOURCE LINE # 384
MOV R7,bEPPflags+01H
MOV A,R7
RRC A
RRC A
ANL A,#03FH
JNB ACC.0,?C0040
; DISABLE;
; SOURCE LINE # 385
CLR EA
; bEPPflags.bits.ep1_rxdone = 0; /* Clear the endpoint receiving flag */
; SOURCE LINE # 386
MOV R7,bEPPflags+01H
MOV A,R7
ANL A,#0FBH
MOV bEPPflags+01H,A
; ENABLE;
; SOURCE LINE # 387
SETB EA
;
; MCU_LED0 = !(GenEpBuf[3] & 0x1); /* Cnage LED status */
; SOURCE LINE # 389
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 # 390
MOV A,R7
MOV C,ACC.1
CPL C
MOV MCU_LED1,C
; }
; SOURCE LINE # 391
; }
; SOURCE LINE # 392
?C0040:
RET
; END OF check_key_LED
;
;
; void control_handler()
RSEG ?PR?control_handler?MAINLOOP
control_handler:
USING 0
; SOURCE LINE # 395
; {
; SOURCE LINE # 396
; unsigned char type, req;
;
; type = ControlData.DeviceRequest.bmRequestType & USB_REQUEST_TYPE_MASK; /*0x60*/
; SOURCE LINE # 399
MOV A,ControlData
ANL A,#060H
MOV type?1554,A
; req = ControlData.DeviceRequest.bRequest & USB_REQUEST_MASK; /*0x0F*/
; SOURCE LINE # 400
MOV A,ControlData+01H
ANL A,#0FH
MOV req?1555,A
;
; if (type == USB_STANDARD_REQUEST)
; SOURCE LINE # 402
MOV A,type?1554
JNZ ?C0041
; (*StandardDeviceRequest[req])();
; SOURCE LINE # 403
MOV A,req?1555
MOV B,#03H
MUL AB
ADD A,#LOW (StandardDeviceRequest)
MOV DPL,A
CLR A
ADDC A,#HIGH (StandardDeviceRequest)
SJMP ?C0058
?C0041:
; // if (type == USB_CLASS_REQUEST) {
; //blinkLED(0);
; // (*ClassRequest[req])();
; // }
; else if (type == USB_VENDOR_REQUEST)
; SOURCE LINE # 408
MOV A,type?1554
CJNE A,#040H,?C0043
; (*VendorDeviceRequest[req])();
; SOURCE LINE # 409
MOV A,req?1555
MOV B,#03H
MUL AB
ADD A,#LOW (VendorDeviceRequest)
MOV DPL,A
CLR A
ADDC A,#HIGH (VendorDeviceRequest)
?C0058:
MOV DPH,A
MOV A,#01H
MOVC A,@A+DPTR
MOV R2,A
MOV A,#02H
MOVC A,@A+DPTR
MOV R1,A
LJMP ?C?ICALL
?C0043:
; else
; stall_ep0();
; SOURCE LINE # 411
LCALL stall_ep0
; }
; SOURCE LINE # 412
?C0045:
RET
; END OF control_handler
;
; void loop_delay(const unsigned int nDelay)
RSEG ?PR?_loop_delay?MAINLOOP
_loop_delay:
USING 0
; SOURCE LINE # 414
;---- Variable 'nDelay?1656' assigned to Register 'R6/R7' ----
; {
; SOURCE LINE # 415
; unsigned int x, y;
; for (x=0; x<=nDelay;x++) {
; SOURCE LINE # 417
;---- Variable 'x?1657' assigned to Register 'R4/R5' ----
CLR A
MOV R5,A
MOV R4,A
?C0046:
SETB C
MOV A,R5
SUBB A,R7
MOV A,R4
SUBB A,R6
JNC ?C0052
; for (y=0;y<=110;y++) ;
; SOURCE LINE # 418
;---- Variable 'y?1658' assigned to Register 'R2/R3' ----
CLR A
MOV R3,A
MOV R2,A
?C0049:
INC R3
CJNE R3,#00H,?C0054
INC R2
?C0054:
MOV A,R3
XRL A,#06FH
ORL A,R2
JNZ ?C0049
; }
; SOURCE LINE # 419
?C0048:
INC R5
CJNE R5,#00H,?C0055
INC R4
?C0055:
SJMP ?C0046
; } ; SOURCE LINE # 420
?C0052:
RET
; END OF _loop_delay
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -