📄 osal_timers.lst
字号:
389 rtrn = tmr->timeout;
\ 000026 A3 INC DPTR
\ 000027 A3 INC DPTR
\ 000028 E0 MOVX A,@DPTR
\ 000029 FE MOV R6,A
\ 00002A A3 INC DPTR
\ 00002B E0 MOVX A,@DPTR
\ 00002C FF MOV R7,A
390 }
391
392 HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.
\ ??osal_get_timeoutEx_1:
\ 00002D E5.. MOV A,?V0 + 0
\ 00002F A2E0 MOV C,0xE0 /* A */.0
\ 000031 92AF MOV 0xa8.7,C
393
394 return rtrn;
\ 000033 EE MOV A,R6
\ 000034 FA MOV R2,A
\ 000035 EF MOV A,R7
\ 000036 FB MOV R3,A
\ 000037 REQUIRE ?Subroutine3
\ 000037 ; // Fall through to label ?Subroutine3
395 }
396
397 /*********************************************************************
398 * @fn osal_timer_activate
399 *
400 * @brief
401 *
402 * Turns the hardware timer on or off
403 *
404 * @param byte turn_on - false - turn off, true - turn on
405 *
406 * @return none
407 */
\ In segment BANKED_CODE, align 1, keep-with-next
408 void osal_timer_activate( byte turn_on )
\ osal_timer_activate:
409 {
\ 000000 74F7 MOV A,#-0x9
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 9
\ 000005 ; Auto size: 0
\ 000005 E9 MOV A,R1
\ 000006 FE MOV R6,A
410 osal_timer_hw_setup( turn_on );
\ 000007 ; Setup parameters for call to function osal_timer_hw_setup
\ 000007 90.... MOV DPTR,#(osal_timer_hw_setup & 0xffff)
\ 00000A 74.. MOV A,#((osal_timer_hw_setup >> 16) & 0xff)
\ 00000C 12.... LCALL ?BCALL ; Banked call to: DPTR()
411 timerActive = turn_on;
\ 00000F EE MOV A,R6
\ 000010 90.... MOV DPTR,#timerActive
\ 000013 F0 MOVX @DPTR,A
412 }
\ 000014 02.... LJMP ??Subroutine4_0 & 0xFFFF
413
414 /*********************************************************************
415 * @fn osal_timer_num_active
416 *
417 * @brief
418 *
419 * This function counts the number of active timers.
420 *
421 * @return byte - number of timers
422 */
\ In segment BANKED_CODE, align 1, keep-with-next
423 byte osal_timer_num_active( void )
\ osal_timer_num_active:
424 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
425 halIntState_t intState;
426 byte num_timers = 0;
\ 000004 7900 MOV R1,#0x0
427 osalTimerRec_t *srchTimer;
428
429 HAL_ENTER_CRITICAL_SECTION( intState ); // Hold off interrupts.
\ 000006 A2AF MOV C,0xa8.7
\ 000008 E4 CLR A
\ 000009 92E0 MOV 0xE0 /* A */.0,C
\ 00000B C2AF CLR 0xa8.7
430
431 // Head of the timer list
432 srchTimer = timerHead;
\ 00000D 90.... MOV DPTR,#timerHead
\ 000010 8001 SJMP ??osal_timer_num_active_0
433
434 // Count timers in the list
435 while ( srchTimer != NULL )
436 {
437 num_timers++;
\ ??osal_timer_num_active_1:
\ 000012 09 INC R1
438 srchTimer = srchTimer->next;
\ ??osal_timer_num_active_0:
\ 000013 E0 MOVX A,@DPTR
\ 000014 FA MOV R2,A
\ 000015 A3 INC DPTR
\ 000016 E0 MOVX A,@DPTR
\ 000017 FB MOV R3,A
\ 000018 8A82 MOV DPL,R2
\ 00001A 8B83 MOV DPH,R3
439 }
\ 00001C E582 MOV A,DPL
\ 00001E 7002 JNZ ??osal_timer_num_active_2
\ 000020 E583 MOV A,DPH
\ ??osal_timer_num_active_2:
\ 000022 70EE JNZ ??osal_timer_num_active_1
440
441 HAL_EXIT_CRITICAL_SECTION( intState ); // Re-enable interrupts.
\ 000024 92AF MOV 0xa8.7,C
442
443 return num_timers;
\ 000026 80.. SJMP ??Subroutine5_0
444 }
\ In segment BANKED_CODE, align 1, keep-with-next
\ ?Subroutine5:
\ 000000 12.... LCALL ?BCALL ; Banked call to: DPTR()
\ ??Subroutine5_0:
\ 000003 D083 POP DPH
\ 000005 D082 POP DPL
\ 000007 02.... LJMP ?BRET
445
446 /*********************************************************************
447 * @fn osal_timer_hw_setup
448 *
449 * @brief
450 *
451 * Setup the timer hardware.
452 *
453 * @param byte turn_on
454 *
455 * @return void
456 */
\ In segment BANKED_CODE, align 1, keep-with-next
457 void osal_timer_hw_setup( byte turn_on )
\ osal_timer_hw_setup:
458 {
\ 000000 74F4 MOV A,#-0xc
\ 000002 12.... LCALL ?BANKED_ENTER_XDATA
\ 000005 ; Saved register size: 12
\ 000005 ; Auto size: 0
459 if (turn_on)
\ 000005 E9 MOV A,R1
\ 000006 6019 JZ ??osal_timer_hw_setup_0
460 {
461 HalTimerStart (OSAL_TIMER, tmr_count );
\ 000008 ; Setup parameters for call to function HalTimerStart
\ 000008 90.... MOV DPTR,#tmr_count
\ 00000B 78.. MOV R0,#?V0 + 0
\ 00000D 12.... LCALL ?L_MOV_X
\ 000010 AA.. MOV R2,?V0 + 0
\ 000012 AB.. MOV R3,?V0 + 1
\ 000014 AC.. MOV R4,?V0 + 2
\ 000016 AD.. MOV R5,?V0 + 3
\ 000018 7902 MOV R1,#0x2
\ 00001A 90.... MOV DPTR,#(HalTimerStart & 0xffff)
\ 00001D 74.. MOV A,#((HalTimerStart >> 16) & 0xff)
\ 00001F 8007 SJMP ??osal_timer_hw_setup_1
462 }
463 else
464 {
465 HalTimerStop (OSAL_TIMER);
\ ??osal_timer_hw_setup_0:
\ 000021 ; Setup parameters for call to function HalTimerStop
\ 000021 7902 MOV R1,#0x2
\ 000023 90.... MOV DPTR,#(HalTimerStop & 0xffff)
\ 000026 74.. MOV A,#((HalTimerStop >> 16) & 0xff)
\ ??osal_timer_hw_setup_1:
\ 000028 12.... LCALL ?BCALL ; Banked call to: DPTR()
466 }
467 }
\ 00002B 80.. SJMP ?Subroutine3
468
469 #if defined( POWER_SAVING )
470 /*********************************************************************
471 * @fn osal_sleep_timers
472 *
473 * @brief
474 *
475 * This function will enable interrupts if timers are running.
476 *
477 * @param none
478 *
479 * @return none
480 */
481 void osal_sleep_timers( void )
482 {
483 #ifndef TIMER_INT
484 if ( osal_timer_num_active() )
485 osal_set_timer_interrupt( TRUE );
486 #endif
487 }
488
489 /*********************************************************************
490 * @fn osal_unsleep_timers
491 *
492 * @brief
493 *
494 * This function will disable interrupts if timers are running.
495 *
496 * @param none
497 *
498 * @return none
499 */
500 void osal_unsleep_timers( void )
501 {
502 #ifndef TIMER_INT
503 osal_set_timer_interrupt( FALSE );
504 #endif
505 }
506 #endif
507
508 /*********************************************************************
509 * @fn osal_set_timer_interrupt
510 *
511 * @brief
512 *
513 * Setup the timer hardware interrupt.
514 *
515 * @param byte turn_on
516 *
517 * @return void
518 *********************************************************************/
\ In segment BANKED_CODE, align 1, keep-with-next
519 void osal_set_timer_interrupt( byte turn_on )
\ osal_set_timer_interrupt:
520 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
521 // Enable or disable timer interrupts
522 HalTimerInterruptEnable ( OSAL_TIMER, HAL_TIMER_CH_MODE_OUTPUT_COMPARE, turn_on);
\ 000004 ; Setup parameters for call to function HalTimerInterruptEnable
\ 000004 E9 MOV A,R1
\ 000005 FB MOV R3,A
\ 000006 7A02 MOV R2,#0x2
\ 000008 7902 MOV R1,#0x2
\ 00000A 90.... MOV DPTR,#(HalTimerInterruptEnable & 0xffff)
\ 00000D 74.. MOV A,#((HalTimerInterruptEnable >> 16) & 0xff)
\ 00000F REQUIRE ?Subroutine5
\ 00000F ; // Fall through to label ?Subroutine5
523 }
524
525 /*********************************************************************
526 * @fn osalTimerUpdate
527 *
528 * @brief Update the timer s
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -