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

📄 mac_backoff_timer.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
        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
//  291   return(backoffTimerTrigger);
        MOV	DPTR,#??backoffTimerTrigger
        MOV	R0,#?V0 + 0
        LCALL	?L_MOV_X
        MOV	R2,?V0 + 0
        MOV	R3,?V0 + 1
        MOV	R4,?V0 + 2
        MOV	R5,?V0 + 3
        LJMP	?Subroutine1 & 0xFFFF
        CFI EndBlock cfiBlock7
//  292 }
//  293 
//  294 
//  295 /**************************************************************************************************
//  296  * @fn          macBackoffTimerSetTrigger
//  297  *
//  298  * @brief       Sets the trigger count for the backoff counter.  A callback is exectuted when
//  299  *              the backoff count reaches the trigger
//  300  *
//  301  * @param       triggerBackoff - backoff count for new trigger
//  302  *
//  303  * @return      none
//  304  **************************************************************************************************
//  305  */

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  306 void macBackoffTimerSetTrigger(uint32 triggerBackoff)
macBackoffTimerSetTrigger:
        CFI Block cfiBlock8 Using cfiCommon0
        CFI Function macBackoffTimerSetTrigger
//  307 {
        FUNCALL macBackoffTimerSetTrigger, halAssertHandler
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL macBackoffTimerSetTrigger, macMcuOverflowCount
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL macBackoffTimerSetTrigger, macMcuOverflowSetCompare
        LOCFRAME XSTACK, 16, STACK
        ARGFRAME XSTACK, 16, STACK
        FUNCALL macBackoffTimerSetTrigger, macMcuOverflowSetCompare
        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)))

⌨️ 快捷键说明

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