mac_backoff_timer.s51

来自「TI的基于ZIGBEE2006的协议栈」· S51 代码 · 共 1,453 行 · 第 1/5 页

S51
1,453
字号
        MOV	0xE0 /* A   */.0,C
        MOV	R6,A
        CLR	0xa8.7
//  193   MAC_RADIO_BACKOFF_SET_COUNT(backoff);
        ; Setup parameters for call to function macMcuOverflowSetCount
        MOV	R2,?V0 + 0
        MOV	R3,?V0 + 1
        MOV	R4,?V0 + 2
        MOV	R5,?V0 + 3
        MOV	DPTR,#(macMcuOverflowSetCount & 0xffff)
        MOV	A,#((macMcuOverflowSetCount >> 16) & 0xff)
        SJMP	??Subroutine2_0
        CFI EndBlock cfiBlock3
//  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  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  208 uint32 macBackoffTimerCount(void)
macBackoffTimerCount:
        CFI Block cfiBlock4 Using cfiCommon0
        CFI Function macBackoffTimerCount
//  209 {
        FUNCALL macBackoffTimerCount, macMcuOverflowCount
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        MOV	A,#-0x10
        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 V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 16)
        ; Saved register size: 16
        ; Auto size: 0
//  210   halIntState_t  s;
//  211   uint32 backoffCount;
//  212 
//  213   HAL_ENTER_CRITICAL_SECTION(s);
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        MOV	R6,A
        CLR	0xa8.7
//  214   backoffCount = MAC_RADIO_BACKOFF_COUNT();
        ; Setup parameters for call to function macMcuOverflowCount
        MOV	DPTR,#(macMcuOverflowCount & 0xffff)
        MOV	A,#((macMcuOverflowCount >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	?V0 + 2,R4
        MOV	?V0 + 3,R5
//  215   HAL_EXIT_CRITICAL_SECTION(s);
        MOV	A,R6
        MOV	C,0xE0 /* A   */.0
        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)
        MOV	DPTR,#??backoffTimerRollover
        MOV	R0,#?V0 + 4
        LCALL	?L_MOV_X
        MOV	R0,#?V0 + 4
        MOV	R1,#?V0 + 0
        LCALL	?UL_GT
        JC	??macBackoffTimerCount_0
//  236   {
//  237     return(0);
        MOV	R2,#0x0
        MOV	R3,#0x0
        MOV	R4,#0x0
        MOV	R5,#0x0
//  238   }
//  239 #endif
//  240   
//  241   return(backoffCount);
??macBackoffTimerCount_0:
        SJMP	??Subroutine2_1
        CFI EndBlock cfiBlock4
//  242 }

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine2:
        CFI Block cfiBlock5 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 16)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        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)))
        MOV	R2,?V0 + 0
        MOV	R3,?V0 + 1
        MOV	R4,?V0 + 2
        MOV	R5,?V0 + 3
        MOV	DPTR,#(macMcuOverflowSetCompare & 0xffff)
        MOV	A,#((macMcuOverflowSetCompare >> 16) & 0xff)
??Subroutine2_0:
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,R6
        MOV	C,0xE0 /* A   */.0
        MOV	0xa8.7,C
??Subroutine2_1:
        MOV	R7,#0x8
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock5
//  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  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  255 uint32 macBackoffTimerCapture(void)
macBackoffTimerCapture:
        CFI Block cfiBlock6 Using cfiCommon0
        CFI Function macBackoffTimerCapture
//  256 {
        FUNCALL macBackoffTimerCapture, macMcuOverflowCapture
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        MOV	A,#-0x10
        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 V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 16)
        ; Saved register size: 16
        ; Auto size: 0
//  257   halIntState_t  s;
//  258   uint32 backoffCapture;
//  259 
//  260   HAL_ENTER_CRITICAL_SECTION(s);
        MOV	C,0xa8.7
        CLR	A
        MOV	0xE0 /* A   */.0,C
        MOV	R6,A
        CLR	0xa8.7
//  261   backoffCapture = MAC_RADIO_BACKOFF_CAPTURE();
        ; Setup parameters for call to function macMcuOverflowCapture
        MOV	DPTR,#(macMcuOverflowCapture & 0xffff)
        MOV	A,#((macMcuOverflowCapture >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	?V0 + 0,R2
        MOV	?V0 + 1,R3
        MOV	?V0 + 2,R4
        MOV	?V0 + 3,R5
//  262   HAL_EXIT_CRITICAL_SECTION(s);
        MOV	A,R6
        MOV	C,0xE0 /* A   */.0
        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)
        MOV	DPTR,#??backoffTimerRollover
        MOV	R0,#?V0 + 4
        LCALL	?L_MOV_X
        MOV	R0,#?V0 + 4
        MOV	R1,#?V0 + 0
        LCALL	?UL_GT
        JC	??macBackoffTimerCapture_0
//  270   {
//  271     return(0);
        MOV	R2,#0x0
        MOV	R3,#0x0
        MOV	R4,#0x0
        MOV	R5,#0x0
//  272   }
//  273 #endif
//  274   
//  275   return(backoffCapture);
??macBackoffTimerCapture_0:
        SJMP	??Subroutine2_1
        CFI EndBlock cfiBlock6
//  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  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  289 uint32 macBackoffTimerGetTrigger(void)
macBackoffTimerGetTrigger:
        CFI Block cfiBlock7 Using cfiCommon0
        CFI Function macBackoffTimerGetTrigger
//  290 {
        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

⌨️ 快捷键说明

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