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 + -
显示快捷键?