📄 mac_backoff_timer.s51
字号:
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)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -