📄 hal_key.s51
字号:
; 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 + -