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

📄 mac_backoff_timer.lst

📁 CC2430上开关控制灯和温度传感器采集两个例子
💻 LST
📖 第 1 页 / 共 5 页
字号:
    177           *
    178           * @brief       Sets the count of the backoff timer.
    179           *
    180           * @param       backoff - new count
    181           *
    182           * @return      none
    183           **************************************************************************************************
    184           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    185          void macBackoffTimerSetCount(uint32 backoff)
   \                     macBackoffTimerSetCount:
    186          {
   \   000000   74F0         MOV     A,#-0x10
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 16
   \   000005                ; Auto size: 0
   \   000005   8A..         MOV     ?V0 + 0,R2
   \   000007   8B..         MOV     ?V0 + 1,R3
   \   000009   8C..         MOV     ?V0 + 2,R4
   \   00000B   8D..         MOV     ?V0 + 3,R5
    187            halIntState_t  s;
    188          
    189            MAC_ASSERT(compareState == COMPARE_STATE_ROLLOVER);   /* trigger cannot be active if changing count */
   \   00000D   90....       MOV     DPTR,#??compareState
   \   000010   E0           MOVX    A,@DPTR
   \   000011   6401         XRL     A,#0x1
   \   000013   6008         JZ      ??macBackoffTimerSetCount_0
   \   000015                ; Setup parameters for call to function halAssertHandler
   \   000015   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000018   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   00001A   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    190            MAC_ASSERT(backoff < backoffTimerRollover);  /* count must be less than rollover value */
   \                     ??macBackoffTimerSetCount_0:
   \   00001D   90....       MOV     DPTR,#??backoffTimerRollover
   \   000020   78..         MOV     R0,#?V0 + 4
   \   000022   12....       LCALL   ?L_MOV_X
   \   000025   78..         MOV     R0,#?V0 + 4
   \   000027   79..         MOV     R1,#?V0 + 0
   \   000029   12....       LCALL   ?UL_GT
   \   00002C   4008         JC      ??macBackoffTimerSetCount_1
   \   00002E                ; Setup parameters for call to function halAssertHandler
   \   00002E   90....       MOV     DPTR,#(halAssertHandler & 0xffff)
   \   000031   74..         MOV     A,#((halAssertHandler >> 16) & 0xff)
   \   000033   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
    191          
    192            HAL_ENTER_CRITICAL_SECTION(s);
   \                     ??macBackoffTimerSetCount_1:
   \   000036   A2AF         MOV     C,0xa8.7
   \   000038   E4           CLR     A
   \   000039   92E0         MOV     0xE0 /* A   */.0,C
   \   00003B   FE           MOV     R6,A
   \   00003C   C2AF         CLR     0xa8.7
    193            MAC_RADIO_BACKOFF_SET_COUNT(backoff);
   \   00003E                ; Setup parameters for call to function macMcuOverflowSetCount
   \   00003E   AA..         MOV     R2,?V0 + 0
   \   000040   AB..         MOV     R3,?V0 + 1
   \   000042   AC..         MOV     R4,?V0 + 2
   \   000044   AD..         MOV     R5,?V0 + 3
   \   000046   90....       MOV     DPTR,#(macMcuOverflowSetCount & 0xffff)
   \   000049   74..         MOV     A,#((macMcuOverflowSetCount >> 16) & 0xff)
   \   00004B   80..         SJMP    ??Subroutine2_0
    194            HAL_EXIT_CRITICAL_SECTION(s);
    195          }
    196          
    197          
    198          /**************************************************************************************************
    199           * @fn          macBackoffTimerCount
    200           *
    201           * @brief       Returns the current backoff count.
    202           *
    203           * @param       none
    204           *
    205           * @return      current backoff count
    206           **************************************************************************************************
    207           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    208          uint32 macBackoffTimerCount(void)
   \                     macBackoffTimerCount:
    209          {
   \   000000   74F0         MOV     A,#-0x10
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 16
   \   000005                ; Auto size: 0
    210            halIntState_t  s;
    211            uint32 backoffCount;
    212          
    213            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
    214            backoffCount = MAC_RADIO_BACKOFF_COUNT();
   \   00000D                ; Setup parameters for call to function macMcuOverflowCount
   \   00000D   90....       MOV     DPTR,#(macMcuOverflowCount & 0xffff)
   \   000010   74..         MOV     A,#((macMcuOverflowCount >> 16) & 0xff)
   \   000012   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   000015   8A..         MOV     ?V0 + 0,R2
   \   000017   8B..         MOV     ?V0 + 1,R3
   \   000019   8C..         MOV     ?V0 + 2,R4
   \   00001B   8D..         MOV     ?V0 + 3,R5
    215            HAL_EXIT_CRITICAL_SECTION(s);
   \   00001D   EE           MOV     A,R6
   \   00001E   A2E0         MOV     C,0xE0 /* A   */.0
   \   000020   92AF         MOV     0xa8.7,C
    216            
    217          #ifdef MAC_RADIO_FEATURE_HARDWARE_OVERFLOW_NO_ROLLOVER
    218            /*
    219             *  Extra processing is required if the radio has a special hardware overflow
    220             *  count feature.  Unfortunately this feature does not provide for setting a
    221             *  rollover value.  This must be done manually.
    222             *
    223             *  This means there is a small window in time when reading the hardware count
    224             *  will be inaccurate.  It's possible it could be one more than the allowable
    225             *  count.  This happens if the count has just incremented beyond the maximum
    226             *  and is queried before the ISR has a chance to run and reset the backoff
    227             *  count back to zero.  (Pure software implementation of backoff count does
    228             *  not have this problem.)
    229             *
    230             *  To solve this, before returning a value for the backoff count, the value
    231             *  must be tested to see if it is beyond the maximum value.  If so, a rollover
    232             *  interrupt that will set backoff count to zero is imminent.  In that case,
    233             *  the correct backoff count of zero is returned.
    234             */
    235            if (backoffCount >= backoffTimerRollover)
   \   000022   90....       MOV     DPTR,#??backoffTimerRollover
   \   000025   78..         MOV     R0,#?V0 + 4
   \   000027   12....       LCALL   ?L_MOV_X
   \   00002A   78..         MOV     R0,#?V0 + 4
   \   00002C   79..         MOV     R1,#?V0 + 0
   \   00002E   12....       LCALL   ?UL_GT
   \   000031   4008         JC      ??macBackoffTimerCount_0
    236            {
    237              return(0);
   \   000033   7A00         MOV     R2,#0x0
   \   000035   7B00         MOV     R3,#0x0
   \   000037   7C00         MOV     R4,#0x0
   \   000039   7D00         MOV     R5,#0x0
    238            }
    239          #endif
    240            
    241            return(backoffCount);
   \                     ??macBackoffTimerCount_0:
   \   00003B   80..         SJMP    ??Subroutine2_1
    242          }
    243          
    244          
    245          /**************************************************************************************************
    246           * @fn          macBackoffTimerCapture
    247           *
    248           * @brief       Returns the most recently captured backoff count
    249           *
    250           * @param       none
    251           *
    252           * @return      last backoff count that was captured
    253           **************************************************************************************************
    254           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next
    255          uint32 macBackoffTimerCapture(void)
   \                     macBackoffTimerCapture:
    256          {
   \   000000   74F0         MOV     A,#-0x10
   \   000002   12....       LCALL   ?BANKED_ENTER_XDATA
   \   000005                ; Saved register size: 16
   \   000005                ; Auto size: 0
    257            halIntState_t  s;
    258            uint32 backoffCapture;
    259          
    260            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
    261            backoffCapture = MAC_RADIO_BACKOFF_CAPTURE();
   \   00000D                ; Setup parameters for call to function macMcuOverflowCapture
   \   00000D   90....       MOV     DPTR,#(macMcuOverflowCapture & 0xffff)
   \   000010   74..         MOV     A,#((macMcuOverflowCapture >> 16) & 0xff)
   \   000012   12....       LCALL   ?BCALL               ; Banked call to: DPTR()
   \   000015   8A..         MOV     ?V0 + 0,R2
   \   000017   8B..         MOV     ?V0 + 1,R3
   \   000019   8C..         MOV     ?V0 + 2,R4
   \   00001B   8D..         MOV     ?V0 + 3,R5
    262            HAL_EXIT_CRITICAL_SECTION(s);
   \   00001D   EE           MOV     A,R6
   \   00001E   A2E0         MOV     C,0xE0 /* A   */.0
   \   000020   92AF         MOV     0xa8.7,C
    263          
    264          #ifdef MAC_RADIO_FEATURE_HARDWARE_OVERFLOW_NO_ROLLOVER
    265            /*
    266             *  See other instance of this #ifdef for detailed comments.
    267             *  Those comments apply to the backoff capture value too.
    268             */
    269            if (backoffCapture >= backoffTimerRollover)
   \   000022   90....       MOV     DPTR,#??backoffTimerRollover
   \   000025   78..         MOV     R0,#?V0 + 4
   \   000027   12....       LCALL   ?L_MOV_X
   \   00002A   78..         MOV     R0,#?V0 + 4
   \   00002C   79..         MOV     R1,#?V0 + 0
   \   00002E   12....       LCALL   ?UL_GT
   \   000031   4008         JC      ??macBackoffTimerCapture_0
    270            {
    271              return(0);
   \   000033   7A00         MOV     R2,#0x0
   \   000035   7B00         MOV     R3,#0x0
   \   000037   7C00         MOV     R4,#0x0
   \   000039   7D00         MOV     R5,#0x0
    272            }
    273          #endif
    274            
    275            return(backoffCapture);
   \                     ??macBackoffTimerCapture_0:
   \   00003B   80..         SJMP    ??Subroutine2_1
    276          }
    277          
    278          
    279          /**************************************************************************************************
    280           * @fn          macBackoffTimerGetTrigger
    281           *
    282           * @brief       Returns the trigger set for the backoff timer.
    283           *
    284           * @param       none
    285           *
    286           * @return      backoff count of trigger
    287           **************************************************************************************************
    288           */

   \                                 In segment BANKED_CODE, align 1, keep-with-next

⌨️ 快捷键说明

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