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

📄 osal_timers.lst

📁 cc2430应用实例
💻 LST
📖 第 1 页 / 共 5 页
字号:
     98            // Initialize the rollover modulo
     99            tmr_count = TICK_TIME;
   \   000005   90....       MOV     DPTR,#__Constant_3e8
   \   000008   78..         MOV     R0,#?V0 + 0
   \   00000A   12....       LCALL   ?L_MOV_X
   \   00000D   90....       MOV     DPTR,#tmr_count
   \   000010   78..         MOV     R0,#?V0 + 0
   \   000012   12....       LCALL   ?L_MOV_TO_X
    100            tmr_decr_time = TIMER_DECR_TIME;
   \   000015   90....       MOV     DPTR,#tmr_decr_time
   \   000018   7401         MOV     A,#0x1
   \   00001A   F0           MOVX    @DPTR,A
   \   00001B   A3           INC     DPTR
   \   00001C   E4           CLR     A
   \   00001D   F0           MOVX    @DPTR,A
    101          
    102            // Initialize the system timer
    103            osal_timer_activate( false );
   \   00001E                ; Setup parameters for call to function osal_timer_activate
   \   00001E   F9           MOV     R1,A
   \   00001F   90....       MOV     DPTR,#(osal_timer_activate & 0xffff)
   \   000022   74..         MOV     A,#((osal_timer_activate >> 16) & 0xff)
   \   000024   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    104            timerActive = false;
   \   000027   E4           CLR     A
   \   000028   90....       MOV     DPTR,#timerActive
   \   00002B   F0           MOVX    @DPTR,A
    105          
    106            osal_systemClock = 0;
   \   00002C   90....       MOV     DPTR,#__Constant_0
   \   00002F   78..         MOV     R0,#?V0 + 0
   \   000031   12....       LCALL   ?L_MOV_X
   \   000034   90....       MOV     DPTR,#??osal_systemClock
   \   000037   78..         MOV     R0,#?V0 + 0
   \   000039   12....       LCALL   ?L_MOV_TO_X
    107          }
   \   00003C   02....       LJMP    ?Subroutine3 & 0xFFFF

   \                                 In segment BANKED_CODE, align 1, keep-with-next
   \                     ?Subroutine3:
   \   000000   7F04         MOV     R7,#0x4
   \   000002   02....       LJMP    ?BANKED_LEAVE_XDATA
    108          
    109          /*********************************************************************
    110           * @fn      osalAddTimer
    111           *
    112           * @brief   Add a timer to the timer list.
    113           *          Ints must be disabled.
    114           *
    115           * @param   task_id
    116           * @param   event_flag
    117           * @param   timeout
    118           *
    119           * @return  osalTimerRec_t * - pointer to newly created timer
    120           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    121          osalTimerRec_t * osalAddTimer( byte task_id, UINT16 event_flag, UINT16 timeout )
   \                     osalAddTimer:
    122          {
   \   000000   74F2         MOV     A,#-0xe
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 14
   \   000005                ; Auto size: 0
   \   000005   89..         MOV     ?V0 + 2,R1
   \   000007   8A..         MOV     ?V0 + 0,R2
   \   000009   8B..         MOV     ?V0 + 1,R3
   \   00000B   EC           MOV     A,R4
   \   00000C   FE           MOV     R6,A
   \   00000D   ED           MOV     A,R5
   \   00000E   FF           MOV     R7,A
    123            osalTimerRec_t *newTimer;
    124            osalTimerRec_t *srchTimer;
    125          
    126            // Look for an existing timer first
    127            newTimer = osalFindTimer( task_id, event_flag );
   \   00000F                ; Setup parameters for call to function osalFindTimer
   \   00000F   90....       MOV     DPTR,#(osalFindTimer & 0xffff)
   \   000012   74..         MOV     A,#((osalFindTimer >> 16) & 0xff)
   \   000014   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    128            if ( newTimer )
   \   000017   EA           MOV     A,R2
   \   000018   7001         JNZ     ??osalAddTimer_0
   \   00001A   EB           MOV     A,R3
   \                     ??osalAddTimer_0:
   \   00001B   600D         JZ      ??osalAddTimer_1
    129            {
    130              // Timer is found - update it.
    131              newTimer->timeout = timeout;
   \   00001D   8A82         MOV     DPL,R2
   \   00001F   8B83         MOV     DPH,R3
   \   000021   A3           INC     DPTR
   \   000022   A3           INC     DPTR
   \   000023   EE           MOV     A,R6
   \   000024   F0           MOVX    @DPTR,A
   \   000025   A3           INC     DPTR
   \   000026   EF           MOV     A,R7
   \                     ??osalAddTimer_2:
   \   000027   F0           MOVX    @DPTR,A
   \   000028   806A         SJMP    ??osalAddTimer_3
    132          
    133              return ( newTimer );
    134            }
    135            else
    136            {
    137              // New Timer
    138              newTimer = osal_mem_alloc( sizeof( osalTimerRec_t ) );
   \                     ??osalAddTimer_1:
   \   00002A                ; Setup parameters for call to function osal_mem_alloc
   \   00002A   7A07         MOV     R2,#0x7
   \   00002C   7B00         MOV     R3,#0x0
   \   00002E   90....       MOV     DPTR,#(osal_mem_alloc & 0xffff)
   \   000031   74..         MOV     A,#((osal_mem_alloc >> 16) & 0xff)
   \   000033   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    139          
    140              if ( newTimer )
   \   000036   EA           MOV     A,R2
   \   000037   7001         JNZ     ??osalAddTimer_4
   \   000039   EB           MOV     A,R3
   \                     ??osalAddTimer_4:
   \   00003A   6054         JZ      ??osalAddTimer_5
    141              {
    142                // Fill in new timer
    143                newTimer->task_id = task_id;
   \   00003C   8A82         MOV     DPL,R2
   \   00003E   8B83         MOV     DPH,R3
   \   000040   A3           INC     DPTR
   \   000041   A3           INC     DPTR
   \   000042   A3           INC     DPTR
   \   000043   A3           INC     DPTR
   \   000044   A3           INC     DPTR
   \   000045   A3           INC     DPTR
   \   000046   E5..         MOV     A,?V0 + 2
   \   000048   F0           MOVX    @DPTR,A
    144                newTimer->event_flag = event_flag;
   \   000049   8A82         MOV     DPL,R2
   \   00004B   8B83         MOV     DPH,R3
   \   00004D   A3           INC     DPTR
   \   00004E   A3           INC     DPTR
   \   00004F   A3           INC     DPTR
   \   000050   A3           INC     DPTR
   \   000051   E5..         MOV     A,?V0 + 0
   \   000053   F0           MOVX    @DPTR,A
   \   000054   A3           INC     DPTR
   \   000055   E5..         MOV     A,?V0 + 1
   \   000057   F0           MOVX    @DPTR,A
    145                newTimer->timeout = timeout;
   \   000058   8A82         MOV     DPL,R2
   \   00005A   8B83         MOV     DPH,R3
   \   00005C   A3           INC     DPTR
   \   00005D   A3           INC     DPTR
   \   00005E   EE           MOV     A,R6
   \   00005F   F0           MOVX    @DPTR,A
   \   000060   A3           INC     DPTR
   \   000061   EF           MOV     A,R7
   \   000062   F0           MOVX    @DPTR,A
    146                newTimer->next = (void *)NULL;
   \   000063   8A82         MOV     DPL,R2
   \   000065   8B83         MOV     DPH,R3
   \   000067   E4           CLR     A
   \   000068   F0           MOVX    @DPTR,A
   \   000069   A3           INC     DPTR
   \   00006A   F0           MOVX    @DPTR,A
    147          
    148                // Does the timer list already exist
    149                if ( timerHead == NULL )
   \   00006B   90....       MOV     DPTR,#timerHead
   \   00006E   E0           MOVX    A,@DPTR
   \   00006F   7002         JNZ     ??osalAddTimer_6
   \   000071   A3           INC     DPTR
   \   000072   E0           MOVX    A,@DPTR
   \                     ??osalAddTimer_6:
   \   000073   90....       MOV     DPTR,#timerHead
   \                     ??osalAddTimer_7:
   \   000076   7006         JNZ     ??osalAddTimer_8
    150                {
    151                  // Start task list
    152                  timerHead = newTimer;
   \   000078   EA           MOV     A,R2
   \   000079   F0           MOVX    @DPTR,A
   \   00007A   A3           INC     DPTR
   \   00007B   EB           MOV     A,R3
   \   00007C   80A9         SJMP    ??osalAddTimer_2
    153                }
    154                else
    155                {
    156                  // Add it to the end of the timer list
    157                  srchTimer = timerHead;
    158          
    159                  // Stop at the last record
    160                  while ( srchTimer->next )
    161                    srchTimer = srchTimer->next;
   \                     ??osalAddTimer_8:
   \   00007E   12....       LCALL   ?Subroutine2 & 0xFFFF
   \                     ??CrossCallReturnLabel_6:
   \   000081   8882         MOV     DPL,R0
   \   000083   8983         MOV     DPH,R1
   \   000085   E0           MOVX    A,@DPTR
   \   000086   7002         JNZ     ??osalAddTimer_9
   \   000088   A3           INC     DPTR
   \   000089   E0           MOVX    A,@DPTR
   \                     ??osalAddTimer_9:
   \   00008A   8882         MOV     DPL,R0
   \   00008C   8983         MOV     DPH,R1
   \   00008E   80E6         SJMP    ??osalAddTimer_7
    162          
    163                  // Add to the list
    164                  srchTimer->next = newTimer;
    165                }
    166          
    167                return ( newTimer );
    168              }
    169              else
    170                return ( (osalTimerRec_t *)NULL );
   \                     ??osalAddTimer_5:
   \   000090   7A00         MOV     R2,#0x0
   \   000092   7B00         MOV     R3,#0x0
   \                     ??osalAddTimer_3:
   \   000094   7F06         MOV     R7,#0x6
   \   000096   02....       LJMP    ?BANKED_LEAVE_XDATA
    171            }
    172          }

   \                                 In segment BANKED_CODE, align 1, keep-with-next
   \                     ?Subroutine2:
   \   000000   E0           MOVX    A,@DPTR
   \   000001   F8           MOV     R0,A
   \   000002   A3           INC     DPTR
   \   000003   E0           MOVX    A,@DPTR
   \   000004   F9           MOV     R1,A
   \   000005   22           RET
    173          
    174          /*********************************************************************
    175           * @fn      osalFindTimer
    176           *
    177           * @brief   Find a timer in a timer list.
    178           *          Ints must be disabled.
    179           *
    180           * @param   task_id
    181           * @param   event_flag
    182           *
    183           * @return  osalTimerRec_t *
    184           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    185          osalTimerRec_t *osalFindTimer( byte task_id, uint16 event_flag )
   \                     osalFindTimer:
    186          {
   \   000000   74F7         MOV     A,#-0x9
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 9
   \   000005                ; Auto size: 0
    187            osalTimerRec_t *srchTimer;
    188          
    189            // Head of the timer list
    190            srchTimer = timerHead;
   \   000005   90....       MOV     DPTR,#timerHead
   \   000008   8004         SJMP    ??osalFindTimer_0
    191          
    192            // Stop when found or at the end
    193            while ( srchTimer )
    194            {

⌨️ 快捷键说明

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