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

📄 mac_backoff_timer.lst

📁 CC2430上开关控制灯和温度传感器采集两个例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
   \   00001E   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000021   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   000023   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    382          
    383            /*-------------------------------------------------------------------------------
    384             *  Calculate the delta backoff difference between expected backoff count,
    385             *  which is zero, and the backoff count of the received frame.
    386             */
    387          
    388            /* since expected receive time is zero, the delta is simply the receive time */
    389            backoffDelta = pMsg->mac.timestamp;
   \                     ??macBackoffTimerRealign_0:
   \   000026   EE           MOV     A,R6
   \   000027   2424         ADD     A,#0x24
   \   000029   F582         MOV     DPL,A
   \   00002B   EF           MOV     A,R7
   \   00002C   3400         ADDC    A,#0x0
   \   00002E   F583         MOV     DPH,A
   \   000030   78..         MOV     R0,#?V0 + 4
   \   000032   12....       LCALL   ?L_MOV_X
    390          
    391            /* if the frame was received more than halfway to the rollover count, use a negative delta value */
    392            if (((uint32) backoffDelta) > (backoffTimerRollover / 2))
   \   000035   90....       MOV     DPTR,#??backoffTimerRollover
   \   000038   78..         MOV     R0,#?V0 + 0
   \   00003A   12....       LCALL   ?L_MOV_X
   \   00003D   7401         MOV     A,#0x1
   \   00003F   78..         MOV     R0,#?V0 + 0
   \   000041   12....       LCALL   ?UL_SHR
   \   000044   78..         MOV     R0,#?V0 + 4
   \   000046   79..         MOV     R1,#?V0 + 0
   \   000048   12....       LCALL   ?UL_GT
   \   00004B   5008         JNC     ??macBackoffTimerRealign_1
    393            {
    394              backoffDelta = backoffDelta - backoffTimerRollover;    /* result will be negative */
   \   00004D   90....       MOV     DPTR,#??backoffTimerRollover
   \   000050   78..         MOV     R0,#?V0 + 4
   \   000052   12....       LCALL   ?L_SUB_X
    395            }
    396          
    397            /*-------------------------------------------------------------------------------
    398             *  Calculate the number of timer ticks to delay that will align the internal
    399             *  time base with the received frame.
    400             */
    401          
    402            /* retrieve the timer count when frame was received */
    403            timerDelayTicks = pMsg->mac.timestamp2;
   \                     ??macBackoffTimerRealign_1:
   \   000055   EE           MOV     A,R6
   \   000056   2428         ADD     A,#0x28
   \   000058   F582         MOV     DPL,A
   \   00005A   EF           MOV     A,R7
   \   00005B   3400         ADDC    A,#0x0
   \   00005D   F583         MOV     DPH,A
   \   00005F   E0           MOVX    A,@DPTR
   \   000060   FE           MOV     R6,A
   \   000061   A3           INC     DPTR
   \   000062   E0           MOVX    A,@DPTR
   \   000063   FF           MOV     R7,A
    404          
    405            /*
    406             *  Subtract the expected SFD time from the actual SFD time to find the needed
    407             *  timer adjustment. If subtracting the offset would result in a negative value,
    408             *  the tick delay must wrap around.
    409             */
    410            if (timerDelayTicks >= TIMER_TICKS_EXPECTED_AT_SFD)
   \   000064   C3           CLR     C
   \   000065   EE           MOV     A,R6
   \   000066   9466         SUBB    A,#0x66
   \   000068   EF           MOV     A,R7
   \   000069   9404         SUBB    A,#0x4
   \   00006B   EE           MOV     A,R6
   \   00006C   4009         JC      ??macBackoffTimerRealign_2
    411            {
    412              /* since delay count is greater than or equal to offset, subtract it directly */
    413              timerDelayTicks = timerDelayTicks - TIMER_TICKS_EXPECTED_AT_SFD;
   \   00006E   249A         ADD     A,#-0x66
   \   000070   FE           MOV     R6,A
   \   000071   EF           MOV     A,R7
   \   000072   34FB         ADDC    A,#-0x5
   \   000074   FF           MOV     R7,A
   \   000075   800F         SJMP    ??macBackoffTimerRealign_3
    414            }
    415            else
    416            {
    417              /*
    418               *  The expected time is greater that actualy time so it cannot be subtracted directly.
    419               *  The tick count per backoff is added to wrap around within the backoff.
    420               *  Since a wrap around did happen, the backoff delta is adjusted by one.
    421               */
    422              timerDelayTicks = timerDelayTicks - TIMER_TICKS_EXPECTED_AT_SFD + MAC_RADIO_TIMER_TICKS_PER_BACKOFF();
   \                     ??macBackoffTimerRealign_2:
   \   000077   249A         ADD     A,#-0x66
   \   000079   FE           MOV     R6,A
   \   00007A   EF           MOV     A,R7
   \   00007B   3423         ADDC    A,#0x23
   \   00007D   FF           MOV     R7,A
    423              backoffDelta--;
   \   00007E   90....       MOV     DPTR,#__Constant_ffffffff
   \   000081   78..         MOV     R0,#?V0 + 4
   \   000083   12....       LCALL   ?L_ADD_X
    424            }
    425          
    426            /*-------------------------------------------------------------------------------
    427             *  Calculate the new backoff count.
    428             */
    429          
    430            backoffCount = MAC_RADIO_BACKOFF_COUNT() - backoffDelta;
   \                     ??macBackoffTimerRealign_3:
   \   000086                ; Setup parameters for call to function macMcuOverflowCount
   \   000086   90....       MOV     DPTR,#(macMcuOverflowCount & 0xffff)
   \   000089   74..         MOV     A,#((macMcuOverflowCount >> 16) & 0xff)
   \   00008B   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   00008E   8A..         MOV     ?V0 + 0,R2
   \   000090   8B..         MOV     ?V0 + 1,R3
   \   000092   8C..         MOV     ?V0 + 2,R4
   \   000094   8D..         MOV     ?V0 + 3,R5
   \   000096   78..         MOV     R0,#?V0 + 0
   \   000098   79..         MOV     R1,#?V0 + 4
   \   00009A   12....       LCALL   ?L_SUB
   \   00009D   85..82       MOV     DPL,?XSP + 0
   \   0000A0   85..83       MOV     DPH,?XSP + 1
   \   0000A3   78..         MOV     R0,#?V0 + 0
   \   0000A5   12....       LCALL   ?L_MOV_TO_X
    431          
    432            if (backoffCount >= ((int32) backoffTimerRollover))
   \   0000A8   85..82       MOV     DPL,?XSP + 0
   \   0000AB   85..83       MOV     DPH,?XSP + 1
   \   0000AE   C082         PUSH    DPL
   \   0000B0   C083         PUSH    DPH
   \   0000B2   90....       MOV     DPTR,#??backoffTimerRollover
   \   0000B5   78..         MOV     R0,#?V0 + 0
   \   0000B7   12....       LCALL   ?L_MOV_X
   \   0000BA   D083         POP     DPH
   \   0000BC   D082         POP     DPL
   \   0000BE   78..         MOV     R0,#?V0 + 0
   \   0000C0   12....       LCALL   ?SL_GT_X
   \   0000C3   85..82       MOV     DPL,?XSP + 0
   \   0000C6   85..83       MOV     DPH,?XSP + 1
   \   0000C9   4007         JC      ??macBackoffTimerRealign_4
    433            {
    434              backoffCount -= backoffTimerRollover;
   \   0000CB   78..         MOV     R0,#?V0 + 0
   \   0000CD   12....       LCALL   ?L_SUB_FROM_X
   \   0000D0   802A         SJMP    ??macBackoffTimerRealign_5
    435            }
    436            else if (backoffCount < 0)
   \                     ??macBackoffTimerRealign_4:
   \   0000D2   C082         PUSH    DPL
   \   0000D4   C083         PUSH    DPH
   \   0000D6   90....       MOV     DPTR,#__Constant_0
   \   0000D9   78..         MOV     R0,#?V0 + 0
   \   0000DB   12....       LCALL   ?L_MOV_X
   \   0000DE   D083         POP     DPH
   \   0000E0   D082         POP     DPL
   \   0000E2   78..         MOV     R0,#?V0 + 0
   \   0000E4   12....       LCALL   ?SL_GT_X
   \   0000E7   5013         JNC     ??macBackoffTimerRealign_5
    437            {
    438              backoffCount += backoffTimerRollover;
   \   0000E9   90....       MOV     DPTR,#??backoffTimerRollover
   \   0000EC   78..         MOV     R0,#?V0 + 0
   \   0000EE   12....       LCALL   ?L_MOV_X
   \   0000F1   85..82       MOV     DPL,?XSP + 0
   \   0000F4   85..83       MOV     DPH,?XSP + 1
   \   0000F7   78..         MOV     R0,#?V0 + 0
   \   0000F9   12....       LCALL   ?L_ADD_TO_X
    439            }
    440          
    441            MAC_RADIO_TIMER_FORCE_DELAY(timerDelayTicks);
   \                     ??macBackoffTimerRealign_5:
   \   0000FC   EE           MOV     A,R6
   \   0000FD   F5A6         MOV     0xa6,A
   \   0000FF   EF           MOV     A,R7
   \   000100   F5A7         MOV     0xa7,A
    442            MAC_RADIO_BACKOFF_SET_COUNT(backoffCount);
   \   000102                ; Setup parameters for call to function macMcuOverflowSetCount
   \   000102   85..82       MOV     DPL,?XSP + 0
   \   000105   85..83       MOV     DPH,?XSP + 1
   \   000108   78..         MOV     R0,#?V0 + 0
   \   00010A   12....       LCALL   ?L_MOV_X
   \   00010D   AA..         MOV     R2,?V0 + 0
   \   00010F   AB..         MOV     R3,?V0 + 1
   \   000111   AC..         MOV     R4,?V0 + 2
   \   000113   AD..         MOV     R5,?V0 + 3
   \   000115   90....       MOV     DPTR,#(macMcuOverflowSetCount & 0xffff)
   \   000118   74..         MOV     A,#((macMcuOverflowSetCount >> 16) & 0xff)
   \   00011A   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    443          
    444            return(backoffDelta);
   \   00011D   AA..         MOV     R2,?V0 + 4
   \   00011F   AB..         MOV     R3,?V0 + 5
   \   000121   AC..         MOV     R4,?V0 + 6
   \   000123   AD..         MOV     R5,?V0 + 7
   \   000125   7404         MOV     A,#0x4
   \   000127   12....       LCALL   ?DEALLOC_XSTACK8
   \   00012A   02....       LJMP    ??Subroutine2_1 & 0xFFFF
    445          }
    446          
    447          
    448          /**************************************************************************************************
    449           * @fn          macBackoffTimerCompareIsr
    450           *
    451           * @brief       Interrupt service routine that fires when the backoff count is equal
    452           *              to the trigger count.
    453           *
    454           * @param       none
    455           *
    456           * @return      none
    457           **************************************************************************************************
    458           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    459          void macBackoffTimerCompareIsr(void)
   \                     macBackoffTimerCompareIsr:
    460          {
   \   000000   74F4         MOV     A,#-0xc
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 12
   \   000005                ; Auto size: 0
    461            uint8 oldState;
    462            halIntState_t  s;
    463          
    464            HAL_ENTER_CRITICAL_SECTION(s);
   \   000005   A2AF         MOV     C,0xa8.7
   \   000007   E4           CLR     A
   \   000008   92E0         MOV     0xE0 /* A   */.0,C
   \   00000A   FE           MOV     R6,A
   \   00000B   C2AF         CLR     0xa8.7

⌨️ 快捷键说明

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