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 + -
显示快捷键?