📄 osal_timers.s51
字号:
LJMP ?Subroutine4 & 0xFFFF
CFI EndBlock cfiBlock16
// 268 }
// 269
// 270 /*********************************************************************
// 271 * @fn osal_start_timerEx
// 272 *
// 273 * @brief
// 274 *
// 275 * This function is called to start a timer to expire in n mSecs.
// 276 * When the timer expires, the calling task will get the specified event.
// 277 *
// 278 * @param byte taskID - task id to set timer for
// 279 * @param UINT16 event_id - event to be notified with
// 280 * @param UNINT16 timeout_value - in milliseconds.
// 281 *
// 282 * @return ZSUCCESS, or NO_TIMER_AVAIL.
// 283 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 284 byte osal_start_timerEx( byte taskID, UINT16 event_id, UINT16 timeout_value )
osal_start_timerEx:
CFI Block cfiBlock17 Using cfiCommon0
CFI Function osal_start_timerEx
// 285 {
FUNCALL osal_start_timerEx, osalAddTimer
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL osal_start_timerEx, osal_timer_activate
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
MOV A,#-0xc
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 V3 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 12)
; Saved register size: 12
; Auto size: 0
// 286 halIntState_t intState;
// 287 osalTimerRec_t *newTimer;
// 288
// 289 HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
MOV C,0xa8.7
CLR A
MOV 0xE0 /* A */.0,C
MOV ?V0 + 0,A
CLR 0xa8.7
// 290
// 291 // Add timer
// 292 newTimer = osalAddTimer( taskID, event_id, timeout_value );
; Setup parameters for call to function osalAddTimer
MOV DPTR,#(osalAddTimer & 0xffff)
MOV A,#((osalAddTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV ?V0 + 2,R2
MOV ?V0 + 3,R3
MOV R6,?V0 + 2
MOV R7,?V0 + 3
// 293 if ( newTimer )
MOV A,R6
JNZ ??osal_start_timerEx_0
MOV A,R7
??osal_start_timerEx_0:
JZ ??osal_start_timerEx_1
// 294 {
// 295 #ifdef POWER_SAVING
// 296 // Update timer registers
// 297 osal_retune_timers();
// 298 (void)timerActive;
// 299 #endif
// 300 // Does the timer need to be started?
// 301 if ( timerActive == FALSE )
MOV DPTR,#timerActive
MOVX A,@DPTR
JNZ ??osal_start_timerEx_1
// 302 {
// 303 osal_timer_activate( TRUE );
; Setup parameters for call to function osal_timer_activate
MOV R1,#0x1
MOV DPTR,#(osal_timer_activate & 0xffff)
MOV A,#((osal_timer_activate >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 304 }
// 305 }
// 306
// 307 HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.
??osal_start_timerEx_1:
MOV A,?V0 + 0
MOV C,0xE0 /* A */.0
MOV 0xa8.7,C
// 308
// 309 return ( (newTimer != NULL) ? ZSUCCESS : NO_TIMER_AVAIL );
MOV A,R6
JNZ ??osal_start_timerEx_2
MOV A,R7
??osal_start_timerEx_2:
JZ ??osal_start_timerEx_3
MOV R1,#0x0
SJMP ??osal_start_timerEx_4
??osal_start_timerEx_3:
MOV R1,#0xc
??osal_start_timerEx_4:
LJMP ?Subroutine3 & 0xFFFF
CFI EndBlock cfiBlock17
// 310 }
// 311
// 312 /*********************************************************************
// 313 * @fn osal_stop_timer
// 314 *
// 315 * @brief
// 316 *
// 317 * This function is called to stop a timer that has already been started.
// 318 * If ZSUCCESS, the function will cancel the timer and prevent the event
// 319 * associated with the timer from being set for the calling task.
// 320 *
// 321 * @param UINT16 event_id - identifier of the timer that is to be stopped
// 322 *
// 323 * @return ZSUCCESS or INVALID_EVENT_ID
// 324 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 325 byte osal_stop_timer( UINT16 event_id )
osal_stop_timer:
CFI Block cfiBlock18 Using cfiCommon0
CFI Function osal_stop_timer
// 326 {
FUNCALL osal_stop_timer, osal_self
LOCFRAME XSTACK, 9, STACK
ARGFRAME XSTACK, 9, STACK
FUNCALL osal_stop_timer, osal_stop_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
// 327 return osal_stop_timerEx( osal_self(), event_id );
; Setup parameters for call to function osal_stop_timerEx
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
; Setup parameters for call to function osal_self
MOV DPTR,#(osal_self & 0xffff)
MOV A,#((osal_self >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R6
MOV R2,A
MOV A,R7
MOV R3,A
MOV DPTR,#(osal_stop_timerEx & 0xffff)
MOV A,#((osal_stop_timerEx >> 16) & 0xff)
LJMP ?Subroutine4 & 0xFFFF
CFI EndBlock cfiBlock18
// 328 }
// 329
// 330 /*********************************************************************
// 331 * @fn osal_stop_timerEx
// 332 *
// 333 * @brief
// 334 *
// 335 * This function is called to stop a timer that has already been started.
// 336 * If ZSUCCESS, the function will cancel the timer and prevent the event
// 337 * associated with the timer from being set for the calling task.
// 338 *
// 339 * @param byte task_id - task id of timer to stop
// 340 * @param UINT16 event_id - identifier of the timer that is to be stopped
// 341 *
// 342 * @return ZSUCCESS or INVALID_EVENT_ID
// 343 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 344 byte osal_stop_timerEx( byte task_id, UINT16 event_id )
osal_stop_timerEx:
CFI Block cfiBlock19 Using cfiCommon0
CFI Function osal_stop_timerEx
// 345 {
FUNCALL osal_stop_timerEx, osalFindTimer
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
FUNCALL osal_stop_timerEx, osalDeleteTimer
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
MOV A,#-0xc
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 V3 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 12)
; Saved register size: 12
; Auto size: 0
// 346 halIntState_t intState;
// 347 osalTimerRec_t *foundTimer;
// 348
// 349 HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
MOV C,0xa8.7
CLR A
MOV 0xE0 /* A */.0,C
MOV ?V0 + 0,A
CLR 0xa8.7
// 350
// 351 // Find the timer to stop
// 352 foundTimer = osalFindTimer( task_id, event_id );
; Setup parameters for call to function osalFindTimer
MOV DPTR,#(osalFindTimer & 0xffff)
MOV A,#((osalFindTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV ?V0 + 2,R2
MOV ?V0 + 3,R3
MOV R6,?V0 + 2
MOV R7,?V0 + 3
// 353 if ( foundTimer )
MOV A,R6
JNZ ??osal_stop_timerEx_0
MOV A,R7
??osal_stop_timerEx_0:
JZ ??osal_stop_timerEx_1
// 354 {
// 355 osalDeleteTimer( foundTimer );
; Setup parameters for call to function osalDeleteTimer
MOV DPTR,#(osalDeleteTimer & 0xffff)
MOV A,#((osalDeleteTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 356
// 357 #ifdef POWER_SAVING
// 358 osal_retune_timers();
// 359 #endif
// 360 }
// 361
// 362 HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.
??osal_stop_timerEx_1:
MOV A,?V0 + 0
MOV C,0xE0 /* A */.0
MOV 0xa8.7,C
// 363
// 364 return ( (foundTimer != NULL) ? ZSUCCESS : INVALID_EVENT_ID );
MOV A,R6
JNZ ??osal_stop_timerEx_2
MOV A,R7
??osal_stop_timerEx_2:
JZ ??osal_stop_timerEx_3
MOV R1,#0x0
SJMP ??osal_stop_timerEx_4
??osal_stop_timerEx_3:
MOV R1,#0x7
??osal_stop_timerEx_4:
SJMP ?Subroutine3
CFI EndBlock cfiBlock19
// 365 }
// 366
// 367 /*********************************************************************
// 368 * @fn osal_get_timeoutEx
// 369 *
// 370 * @brief
// 371 *
// 372 * @param byte task_id - task id of timer to check
// 373 * @param UINT16 event_id - identifier of timer to be checked
// 374 *
// 375 * @return Return the timer's tick count if found, zero otherwise.
// 376 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 377 UINT16 osal_get_timeoutEx( byte task_id, UINT16 event_id )
osal_get_timeoutEx:
CFI Block cfiBlock20 Using cfiCommon0
CFI Function osal_get_timeoutEx
// 378 {
FUNCALL osal_get_timeoutEx, osalFindTimer
LOCFRAME XSTACK, 12, STACK
ARGFRAME XSTACK, 12, STACK
MOV A,#-0xc
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 V3 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 12)
; Saved register size: 12
; Auto size: 0
// 379 halIntState_t intState;
// 380 uint16 rtrn = 0;
MOV R6,#0x0
MOV R7,#0x0
// 381 osalTimerRec_t *tmr;
// 382
// 38
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -