⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal_key.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
        ; Saved register size: 2
        ; Auto size: 0
//  207 #if (HAL_KEY == TRUE)
//  208   /* Initialize previous key to 0 */
//  209   halKeySavedKeys = 0;
        CLR	A
        MOV	DPTR,#??halKeySavedKeys
        MOVX	@DPTR,A
//  210 
//  211 #if defined (HAL_KEY_SW_6_ENABLE)
//  212   HAL_KEY_SW_6_SEL &= ~(HAL_KEY_SW_6_BIT);    /* Set pin function to GPIO */
        ANL	0xf3,#0xfd
//  213   HAL_KEY_SW_6_DIR &= ~(HAL_KEY_SW_6_BIT);    /* Set pin direction to Input */
        ANL	0xfd,#0xfd
//  214 #endif
//  215 
//  216 #if defined (HAL_KEY_SW_5_ENABLE)
//  217   HAL_KEY_SW_5_SEL &= ~(HAL_KEY_SW_5_BIT);    /* Set pin function to GPIO */
        ANL	0xf5,#0xfe
//  218   HAL_KEY_SW_5_DIR &= ~(HAL_KEY_SW_5_BIT);    /* Set pin direction to Input */
        ANL	0xff,#0xfe
//  219   HAL_KEY_SW_5_INP |= HAL_KEY_SW_5_BIT;       /* Set pin input mode to tri-state */
        ORL	0xf7,#0x1
//  220 #endif
//  221 
//  222   /* Initialize callback function */
//  223   pHalKeyProcessFunction  = NULL;
        MOV	DPTR,#??pHalKeyProcessFunction
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
//  224 
//  225   /* Start with key is not configured */
//  226   HalKeyConfigured = FALSE;
        MOV	DPTR,#??HalKeyConfigured
        MOVX	@DPTR,A
        CFI EndBlock cfiBlock0
//  227 #endif /* HAL_KEY */
//  228 }
        REQUIRE ?Subroutine1
        ; // Fall through to label ?Subroutine1

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine1:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+-5
        CFI DPL0 Frame(CFA_SP, 4)
        CFI DPH0 Frame(CFA_SP, 5)
        POP	DPH
        CFI CFA_SP SP+-4
        CFI DPH0 SameValue
        POP	DPL
        CFI CFA_SP SP+-3
        CFI DPL0 SameValue
        LJMP	?BRET
        CFI EndBlock cfiBlock1
//  229 
//  230 /**************************************************************************************************
//  231  * @fn      HalKeyConfig
//  232  *
//  233  * @brief   Configure the Key serivce
//  234  *
//  235  * @param   interruptEnable - TRUE/FALSE, enable/disable interrupt
//  236  *          cback - pointer to the CallBack function
//  237  *
//  238  * @return  None
//  239  **************************************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  240 void HalKeyConfig (bool interruptEnable, halKeyCBack_t cback)
HalKeyConfig:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function HalKeyConfig
//  241 {
        FUNCALL HalKeyConfig, osal_stop_timerEx
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        FUNCALL HalKeyConfig, osal_start_timerEx
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        MOV	A,#-0x9
        LCALL	?BANKED_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        ; Saved register size: 9
        ; Auto size: 0
        MOV	A,#0x9
        LCALL	?XSTACK_DISP0_8
        LCALL	?Subroutine0 & 0xFFFF
//  242 #if (HAL_KEY == TRUE)
//  243   /* Enable/Disable Interrupt or */
//  244   Hal_KeyIntEnable = interruptEnable;
??CrossCallReturnLabel_0:
        MOV	A,R1
        MOV	DPTR,#Hal_KeyIntEnable
        MOVX	@DPTR,A
//  245 
//  246   /* Register the callback fucntion */
//  247   pHalKeyProcessFunction = cback;
        MOV	DPTR,#??pHalKeyProcessFunction
        MOV	A,R4
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R5
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R6
        MOVX	@DPTR,A
//  248 
//  249   /* Determine if interrupt is enable or not */
//  250   if (Hal_KeyIntEnable)
        MOV	DPTR,#Hal_KeyIntEnable
        MOVX	A,@DPTR
        JZ	??HalKeyConfig_0
//  251   {
//  252 
//  253     /*
//  254        Work around for CC2430DB when interrupt is enabled and SW5 (center joystick)
//  255        is used. This SW5 uses P2 which also has debug lines connected to it. This
//  256        causes contant interruption on P2INT_VECTOR. Disable the usage of P2 interrupt
//  257        will stop this problem.
//  258     */
//  259     #if defined (HAL_BOARD_CC2430DB)
//  260       #undef HAL_KEY_SW_5_ENABLE                      /* Dis-allow SW5 when key interrupt is enable */
//  261     #endif
//  262 
//  263 #if defined (HAL_KEY_SW_5_ENABLE)
//  264     PICTL &= ~(HAL_KEY_SW_5_EDGEBIT);                 /* Set rising or falling edge */
//  265   #if (HAL_KEY_SW_5_EDGE == HAL_KEY_FALLING_EDGE)
//  266     PICTL |= HAL_KEY_SW_5_EDGEBIT;
//  267   #endif
//  268     HAL_KEY_SW_5_ICTL |= HAL_KEY_SW_5_ICTLBIT;        /* Set interrupt enable bit */
//  269     HAL_KEY_SW_5_IEN |= HAL_KEY_SW_5_IENBIT;
//  270     HAL_KEY_SW_5_PXIFG = ~(HAL_KEY_SW_5_BIT);        /* Clear any pending interrupts */
//  271 #endif
//  272 
//  273 #if defined (HAL_KEY_SW_6_ENABLE)
//  274     PICTL &= ~(HAL_KEY_SW_6_EDGEBIT);                 /* Set rising or falling edge */
        ANL	0x8c,#0xfe
//  275   #if (HAL_KEY_SW_6_EDGE == HAL_KEY_FALLING_EDGE)
//  276     PICTL |= HAL_KEY_SW_6_EDGEBIT;
//  277   #endif
//  278     HAL_KEY_SW_6_ICTL |= HAL_KEY_SW_6_ICTLBIT;        /* Set interrupt enable bit */
        ORL	0x8c,#0x8
//  279     HAL_KEY_SW_6_IEN |= HAL_KEY_SW_6_IENBIT;
        SETB	0xb8.5
//  280     HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT);        /* Clear any pending interrupts */
        MOV	0x89,#-0x3
//  281 #endif
//  282 
//  283     /* Do this only after the hal_key is configured - to work with sleep stuff */
//  284     if (HalKeyConfigured == TRUE)
        MOV	DPTR,#??HalKeyConfigured
        MOVX	A,@DPTR
        XRL	A,#0x1
        JNZ	??HalKeyConfig_1
//  285     {
//  286       osal_stop_timerEx( Hal_TaskID, HAL_KEY_EVENT);  /* Cancel polling if active */
        ; Setup parameters for call to function osal_stop_timerEx
        MOV	R2,#0x1
        MOV	R3,#0x0
        MOV	DPTR,#Hal_TaskID
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPTR,#(osal_stop_timerEx & 0xffff)
        MOV	A,#((osal_stop_timerEx >> 16) & 0xff)
        SJMP	??HalKeyConfig_2
//  287     }
//  288   }
//  289   else    /* Interrupts NOT enabled */
//  290   {
//  291 
//  292     /*
//  293        Work around for CC2430DB when interrupt is enabled and SW5 (center joystick)
//  294        is used. This SW5 uses P2 which also has debug lines connected to it. This
//  295        causes contant interruption on P2INT_VECTOR. Disable the usage of P2 interrupt
//  296        will stop this problem.
//  297     */
//  298     #if defined (HAL_BOARD_CC2430DB)
//  299       #define HAL_KEY_SW_5_ENABLE                     /* Allow SW5 only when key interrupt is disable */
//  300     #endif
//  301 
//  302 #if defined (HAL_KEY_SW_6_ENABLE)
//  303     HAL_KEY_SW_6_ICTL &= ~(HAL_KEY_SW_6_ICTLBIT);     /* Clear interrupt enable bit */
??HalKeyConfig_0:
        ANL	0x8c,#0xf7
//  304     HAL_KEY_SW_6_IEN &= ~(HAL_KEY_SW_6_IENBIT);
        CLR	0xb8.5
//  305 #endif
//  306 
//  307 #if defined (HAL_KEY_SW_5_ENABLE)
//  308     HAL_KEY_SW_5_ICTL &= ~(HAL_KEY_SW_5_ICTLBIT);     /* Clear interrupt enable bit */
        ANL	0x8c,#0xdf
//  309     HAL_KEY_SW_5_IEN &= ~(HAL_KEY_SW_5_IENBIT);
        ANL	0x9a,#0xfd
//  310 #endif
//  311     osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_POLLING_VALUE);    /* Kick off polling */
        ; Setup parameters for call to function osal_start_timerEx
        MOV	R4,#0x64
        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)
??HalKeyConfig_2:
        LCALL	?BCALL               ; Banked call to: DPTR()
//  312   }
//  313 
//  314   /* Key now is configured */
//  315   HalKeyConfigured = TRUE;
??HalKeyConfig_1:
        MOV	A,#0x1
        MOV	DPTR,#??HalKeyConfigured
        MOVX	@DPTR,A
//  316 #endif /* HAL_KEY */
//  317 }
        MOV	R7,A
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock2
//  318 
//  319 /**************************************************************************************************
//  320  * @fn      HalKeyRead
//  321  *
//  322  * @brief   Read the current value of a key
//  323  *
//  324  * @param   None
//  325  *
//  326  * @return  keys - current keys status
//  327  **************************************************************************************************/
//  328 

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  329 uint8 HalKeyRead ( void )
HalKeyRead:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function HalKeyRead
//  330 {
        FUNCALL HalKeyRead, HalAdcRead
        LOCFRAME XSTACK, 9, STACK
        ARGFRAME XSTACK, 9, STACK
        MOV	A,#-0x9
        LCALL	?BANKED_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        ; Saved register size: 9
        ; Auto size: 0
//  331 
//  332   uint8 keys = 0;
        MOV	R6,#0x0
//  333 
//  334 #if (HAL_KEY == TRUE)
//  335 
//  336 #if defined (HAL_KEY_JOYSTICK_ENABLE)
//  337   uint8 ksave0 = 0;
        MOV	R7,#0x0
//  338   uint8 ksave1;
//  339   uint8 adc;
//  340 #endif
//  341 
//  342 #if defined (HAL_KEY_SW_6_ENABLE)
//  343   if (!(HAL_KEY_SW_6_PORT & HAL_KEY_SW_6_BIT))    /* Key is active low */
        MOV	C,0x80.1
        JC	??HalKeyRead_0
//  344   {
//  345     keys |= HAL_KEY_SW_6;
        MOV	R6,#0x20
//  346   }
//  347 #endif
//  348 #if defined (HAL_KEY_SW_5_ENABLE)
//  349   if (HAL_KEY_SW_5_PORT & HAL_KEY_SW_5_BIT)       /* Key is active high */
??HalKeyRead_0:
        MOV	C,0xa0.0
        JNC	??HalKeyRead_1
//  350   {
//  351     keys |= HAL_KEY_SW_5;
        MOV	A,R6
        SETB	0xE0 /* A   */.2
        MOV	R6,A
//  352   }
//  353 #endif
//  354 
//  355 #if defined (HAL_KEY_JOYSTICK_ENABLE)
//  356 /*
//  357 *  The joystick control is encoded as an analog voltage.  Keep on reading
//  358 *  the ADC until two consecutive key decisions are the same.
//  359 */
//  360 
//  361   do
//  362   {
//  363     ksave1 = ksave0;    /* save previouse key reading */
??HalKeyRead_1:
        MOV	?V0 + 0,R7
//  364 
//  365     adc = HalAdcRead (HAL_KEY_JOY_CHN, HAL_ADC_RESOLUTION_8);
        ; Setup parameters for call to function HalAdcRead
        MOV	R2,#0x1
        MOV	R1,#0x6
        MOV	DPTR,#(HalAdcRead & 0xffff)
        MOV	A,#((HalAdcRead >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  366 
//  367     if  (CHVER == 0x01)
        MOV	DPTR,#-0x20a0
        MOVX	A,@DPTR

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -