hal_key.s51
来自「cc2430讀取短地址程式」· S51 代码 · 共 1,630 行 · 第 1/5 页
S51
1,630 行
// 510 ksave0 |= HAL_KEY_RIGHT;
// 511 }
// 512 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
// 513 {
// 514 ksave0 |= HAL_KEY_LEFT;
// 515 }
// 516 else if (adc <= 10)
// 517 {
// 518 ksave0 |= HAL_KEY_DOWN;
// 519 }
// 520 else if ((adc >= 105) && (adc <= 121))
// 521 {
// 522 }
// 523 }
// 524
// 525
// 526 } while (ksave0 != ksave1);
??HalKeyPoll_4:
MOV A,R7
XRL A,R6
JNZ ??HalKeyPoll_1
// 527
// 528 keys |= ksave0;
MOV A,R6
ORL ?V0 + 0,A
// 529
// 530 #endif
// 531
// 532 /* Exit if polling and no keys have changed */
// 533 if (!Hal_KeyIntEnable)
MOV DPTR,#Hal_KeyIntEnable
MOVX A,@DPTR
JNZ ??HalKeyPoll_12
// 534 {
// 535 if (keys == halKeySavedKeys)
MOV DPTR,#??halKeySavedKeys
MOVX A,@DPTR
XRL A,?V0 + 0
JZ ??HalKeyPoll_13
// 536 {
// 537 return;
// 538 }
// 539 halKeySavedKeys = keys; /* Store the current keys for comparation next time */
MOV A,?V0 + 0
MOVX @DPTR,A
// 540 }
// 541
// 542 /* Invoke Callback if new keys were depressed */
// 543 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
// 544 {
// 545 (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
// 546 }
// 547
// 548 #endif /* HAL_KEY */
// 549
// 550 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
CFI Block cfiCond6 Using cfiCommon0
CFI NoFunction
CFI Conditional ??CrossCallReturnLabel_1
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_0
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
// 551
// 552
// 553 /**************************************************************************************************
// 554 * @fn halProcessKeyInterrupt
// 555 *
// 556 * @brief Checks to see if it's a valid key interrupt, saves interrupt driven key states for
// 557 * processing by HalKeyRead(), and debounces keys by scheduling HalKeyRead() 25ms later.
// 558 *
// 559 * @param
// 560 *
// 561 * @return
// 562 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 563 void halProcessKeyInterrupt (void)
halProcessKeyInterrupt:
CFI Block cfiBlock9 Using cfiCommon0
CFI Function halProcessKeyInterrupt
// 564 {
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
// 565
// 566 #if (HAL_KEY == TRUE)
// 567
// 568 bool valid=FALSE;
MOV R2,#0x0
// 569
// 570 #if defined (HAL_KEY_SW_6_ENABLE)
// 571 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
// 572 {
// 573 HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT); /* Clear Interrupt Flag */
MOV 0x89,#-0x3
// 574 valid = TRUE;
INC R2
// 575 }
// 576 #endif
// 577
// 578 #if defined (HAL_KEY_SW_5_ENABLE)
// 579 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
// 580 {
// 581 HAL_KEY_SW_5_PXIFG = ~(HAL_KEY_SW_5_BIT); /* Clear Interrupt Flag */
MOV 0x89,#-0x21
// 582 valid = TRUE;
SJMP ??halProcessKeyInterrupt_2
// 583 }
// 584 #endif
// 585
// 586 if (valid)
??halProcessKeyInterrupt_1:
MOV A,R2
JZ ??halProcessKeyInterrupt_3
// 587 {
// 588 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()
// 589 }
// 590 #endif /* HAL_KEY */
// 591 }
??halProcessKeyInterrupt_3:
LJMP ?Subroutine1 & 0xFFFF
CFI EndBlock cfiBlock9
// 592
// 593 /**************************************************************************************************
// 594 * @fn HalKeyEnterSleep
// 595 *
// 596 * @brief - Get called to enter sleep mode
// 597 *
// 598 * @param
// 599 *
// 600 * @return
// 601 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 602 void HalKeyEnterSleep ( void )
HalKeyEnterSleep:
CFI Block cfiBlock10 Using cfiCommon0
CFI Function HalKeyEnterSleep
// 603 {
; Saved register size: 0
; Auto size: 0
// 604 /* Sleep!!! */
// 605 }
LJMP ?BRET
CFI EndBlock cfiBlock10
// 606
// 607 /**************************************************************************************************
// 608 * @fn HalKeyExitSleep
// 609 *
// 610 * @brief - Get called when sleep is over
// 611 *
// 612 * @param
// 613 *
// 614 * @return - return saved keys
// 615 **************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 616 uint8 HalKeyExitSleep ( void )
HalKeyExitSleep:
CFI Block cfiBlock11 Using cfiCommon0
CFI Function HalKeyExitSleep
// 617 {
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
// 618 /* Wake up and read keys */
// 619 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
// 620 }
// 621
// 622 /***************************************************************************************************
// 623 * INTERRUPT SERVICE ROUTINE
// 624 ***************************************************************************************************/
// 625
// 626 /**************************************************************************************************
// 627 * @fn halKeyPort0Isr
// 628 *
// 629 * @brief Port0 ISR
// 630 *
// 631 * @param
// 632 *
// 633 * @return
// 634 **************************************************************************************************/
RSEG NEAR_CODE:CODE:NOROOT(0)
// 635 HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )
halKeyPort0Isr:
CFI Block cfiBlock12 Using cfiCommon1
CFI Function halKeyPort0Isr
// 636 {
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
// 637 /* P0IF is cleared by HW for CHVER < REV_E */
// 638
// 639 halProcess
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?