📄 hal_key.s51
字号:
// 510 else if ((adc >= 45) && (adc <= 56))
MOV A,R2
CLR C
SUBB A,#0x2d
JC ??HalKeyPoll_9
MOV A,R2
CLR C
SUBB A,#0x39
JC ??HalKeyPoll_10
// 511 {
// 512 ksave0 |= HAL_KEY_LEFT;
// 513 }
// 514 else if (adc <= 10)
// 515 {
// 516 ksave0 |= HAL_KEY_DOWN;
// 517 }
// 518 else if ((adc >= 105) && (adc <= 121))
// 519 {
// 520 }
// 521 }
// 522
// 523
// 524 } while (ksave0 != ksave1);
??HalKeyPoll_4:
MOV A,R7
XRL A,R6
JNZ ??HalKeyPoll_1
// 525
// 526 keys |= ksave0;
MOV A,R6
ORL ?V0 + 0,A
// 527
// 528 #endif
// 529
// 530 /* Exit if polling and no keys have changed */
// 531 if (!Hal_KeyIntEnable)
MOV DPTR,#Hal_KeyIntEnable
MOVX A,@DPTR
JNZ ??HalKeyPoll_12
// 532 {
// 533 if (keys == halKeySavedKeys)
MOV DPTR,#??halKeySavedKeys
MOVX A,@DPTR
XRL A,?V0 + 0
JZ ??HalKeyPoll_13
// 534 {
// 535 return;
// 536 }
// 537 halKeySavedKeys = keys; /* Store the current keys for comparation next time */
MOV A,?V0 + 0
MOVX @DPTR,A
// 538 }
// 539
// 540 /* Invoke Callback if new keys were depressed */
// 541 if (keys && (pHalKeyProcessFunction))
??HalKeyPoll_12:
MOV A,?V0 + 0
JZ ??HalKeyPoll_13
MOV DPTR,#??pHalKeyProcessFunction
LCALL ?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_1:
MOV R2,#0x0
MOV A,R4
ORL A,R5
ORL A,R6
JZ ??HalKeyPoll_13
// 542 {
// 543 (pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);
; Setup parameters for indirect call
MOV R1,?V0 + 0
MOVX A,@DPTR
MOV DPL,R4
MOV DPH,R5
LCALL ?BCALL ; Banked call to: DPTR()
??HalKeyPoll_13:
LJMP ?Subroutine2 & 0xFFFF
CFI EndBlock cfiBlock5
// 544 }
// 545
// 546 #endif /* HAL_KEY */
// 547
// 548 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiCond6 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_0
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 9)
CFI Block cfiCond7 Using cfiCommon0
CFI (cfiCond7) NoFunction
CFI (cfiCond7) Conditional ??CrossCallReturnLabel_1
CFI (cfiCond7) R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI (cfiCond7) VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI (cfiCond7) V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI (cfiCond7) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI (cfiCond7) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI (cfiCond7) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI (cfiCond7) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI (cfiCond7) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI (cfiCond7) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI (cfiCond7) CFA_SP SP+0
CFI (cfiCond7) CFA_XSP16 add(XSP16, 9)
CFI Block cfiPicker8 Using cfiCommon1
CFI (cfiPicker8) NoFunction
CFI (cfiPicker8) Picker
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
INC DPTR
MOVX A,@DPTR
MOV R6,A
RET
CFI EndBlock cfiCond6
CFI EndBlock cfiCond7
CFI EndBlock cfiPicker8
// 549
// 550
// 551 /**************************************************************************************************
// 552 * @fn halProcessKeyInterrupt
// 553 *
// 554 * @brief Checks to see if it's a valid key interrupt, saves interrupt driven key states for
// 555 * processing by HalKeyRead(), and debounces keys by scheduling HalKeyRead() 25ms later.
// 556 *
// 557 * @param
// 558 *
// 559 * @return
// 560 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 561 void halProcessKeyInterrupt (void)
halProcessKeyInterrupt:
CFI Block cfiBlock9 Using cfiCommon0
CFI Function halProcessKeyInterrupt
// 562 {
FUNCALL halProcessKeyInterrupt, osal_start_timerEx
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 563
// 564 #if (HAL_KEY == TRUE)
// 565
// 566 bool valid=FALSE;
MOV R2,#0x0
// 567
// 568 #if defined (HAL_KEY_SW_6_ENABLE)
// 569 if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT) /* Interrupt Flag has been set */
MOV A,0x89
MOV C,0xE0 /* A */.1
JNC ??halProcessKeyInterrupt_0
// 570 {
// 571 HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear Interrupt Flag */
MOV 0x89,#-0x3
// 572 valid = TRUE;
INC R2
// 573 }
// 574 #endif
// 575
// 576 #if defined (HAL_KEY_SW_5_ENABLE)
// 577 if (HAL_KEY_SW_5_PXIFG & HAL_KEY_SW_5_BIT) /* Interrupt Flag has been set */
??halProcessKeyInterrupt_0:
MOV A,0x89
MOV C,0xE0 /* A */.5
JNC ??halProcessKeyInterrupt_1
// 578 {
// 579 HAL_KEY_SW_5_PXIFG = ~(HAL_KEY_SW_5_BIT); /* Clear Interrupt Flag */
MOV 0x89,#-0x21
// 580 valid = TRUE;
SJMP ??halProcessKeyInterrupt_2
// 581 }
// 582 #endif
// 583
// 584 if (valid)
??halProcessKeyInterrupt_1:
MOV A,R2
JZ ??halProcessKeyInterrupt_3
// 585 {
// 586 osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);
??halProcessKeyInterrupt_2:
; Setup parameters for call to function osal_start_timerEx
MOV R4,#0x19
MOV R5,#0x0
MOV R2,#0x1
MOV R3,#0x0
MOV DPTR,#Hal_TaskID
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(osal_start_timerEx & 0xffff)
MOV A,#((osal_start_timerEx >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 587 }
// 588 #endif /* HAL_KEY */
// 589 }
??halProcessKeyInterrupt_3:
LJMP ?Subroutine1 & 0xFFFF
CFI EndBlock cfiBlock9
// 590
// 591 /**************************************************************************************************
// 592 * @fn HalKeyEnterSleep
// 593 *
// 594 * @brief - Get called to enter sleep mode
// 595 *
// 596 * @param
// 597 *
// 598 * @return
// 599 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 600 void HalKeyEnterSleep ( void )
HalKeyEnterSleep:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function HalKeyEnterSleep
// 601 {
; Saved register size: 0
; Auto size: 0
// 602 /* Sleep!!! */
// 603 }
LJMP ?BRET
CFI EndBlock cfiBlock10
// 604
// 605 /**************************************************************************************************
// 606 * @fn HalKeyExitSleep
// 607 *
// 608 * @brief - Get called when sleep is over
// 609 *
// 610 * @param
// 611 *
// 612 * @return - return saved keys
// 613 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 614 uint8 HalKeyExitSleep ( void )
HalKeyExitSleep:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function HalKeyExitSleep
// 615 {
FUNCALL HalKeyExitSleep, HalKeyRead
LOCFRAME ISTACK, 2, STACK
ARGFRAME ISTACK, 2, STACK
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 0
// 616 /* Wake up and read keys */
// 617 return ( HalKeyRead () );
; Setup parameters for call to function HalKeyRead
MOV DPTR,#(HalKeyRead & 0xffff)
MOV A,#((HalKeyRead >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
LJMP ?Subroutine1 & 0xFFFF
CFI EndBlock cfiBlock11
// 618 }
// 619
// 620 /***************************************************************************************************
// 621 * INTERRUPT SERVICE ROUTINE
// 622 ***************************************************************************************************/
// 623
// 624 /**************************************************************************************************
// 625 * @fn halKeyPort0Isr
// 626 *
// 627 * @brief Port0 ISR
// 628 *
// 629 * @param
// 630 *
// 631 * @return
// 632 **************************************************************************************************/
RSEG NEAR_CODE:CODE:NOROOT(0)
// 633 HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )
halKeyPort0Isr:
CFI Block cfiBlock12 Using cfiCommon1
CFI Function halKeyPort0Isr
// 634 {
FUNCALL halKeyPort0Isr, halProcessKeyInterrupt
LOCFRAME ISTACK, 15, STACK
ARGFRAME ISTACK, 15, STACK
PUSH A
CFI A Frame(CFA_SP, 3)
CFI CFA_SP SP+-3
MOV A,#-0xe
LCALL ?INTERRUPT_ENTER_XSP
CFI B load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI PSW load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI R5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI R4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI R3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI R2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI R1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI R0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI CFA_XSP16 add(XSP16, 14)
; Saved register size: 15
; Auto size: 0
// 635 /* P0IF is cleared by HW for CHVER < REV_E */
// 636
// 637 halProcessKeyInterrupt();
; Setup par
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -