📄 mac_mcu.s51
字号:
; Saved register size: 0
; Auto size: 0
// 279 /* clock the random generator to get a new random value */
// 280 ADCCON1 = (ADCCON1 & ~RCTRL_BITS) | RCTRL_CLOCK_LFSR;
MOV A,#-0xd
ANL A,0xb4
ORL A,#0x4
MOV 0xb4,A
// 281
// 282 /* return new randomized value from hardware */
// 283 return(RNDH);
MOV R1,0xbd
LJMP ?BRET
CFI EndBlock cfiBlock1
// 284 }
// 285
// 286
// 287 /**************************************************************************************************
// 288 * @fn macMcuTimerCount
// 289 *
// 290 * @brief Returns the upper eight bits of hardware timer count. The full 16-bit timer
// 291 * count is not returned because the timer compare feature only compares one byte.
// 292 *
// 293 * @param none
// 294 *
// 295 * @return upper eight bits of hardware timer count
// 296 **************************************************************************************************
// 297 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 298 uint8 macMcuTimerCount(void)
macMcuTimerCount:
CFI Block cfiBlock2 Using cfiCommon0
CFI Function macMcuTimerCount
// 299 {
PUSH DPL
CFI DPL0 Frame(CFA_SP, 4)
CFI CFA_SP SP+-4
PUSH DPH
CFI DPH0 Frame(CFA_SP, 5)
CFI CFA_SP SP+-5
; Saved register size: 2
; Auto size: 1
MOV A,#-0x1
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 1)
// 300 uint8 volatile temp;
// 301
// 302 /* reading T2TLD latches T2THD */
// 303 temp = T2TLD;
MOV A,0xa6
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 304 return(T2THD);
MOV R1,0xa7
MOV A,#0x1
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 XSP16+0
LJMP ?Subroutine3 & 0xFFFF
CFI EndBlock cfiBlock2
// 305 }
// 306
// 307
// 308 /**************************************************************************************************
// 309 * @fn macMcuTimerCapture
// 310 *
// 311 * @brief Returns the last timer capture. This capture should have occurred at the
// 312 * receive time of the last frame (the last time SFD transitioned to active).
// 313 *
// 314 * @param none
// 315 *
// 316 * @return last capture of hardware timer (full 16-bit value)
// 317 **************************************************************************************************
// 318 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 319 uint16 macMcuTimerCapture(void)
macMcuTimerCapture:
CFI Block cfiBlock3 Using cfiCommon0
CFI Function macMcuTimerCapture
// 320 {
; Saved register size: 2
; Auto size: 0
// 321 uint16 timerCapture;
// 322
// 323 timerCapture = T2CAPLPL;
MOV R2,0xa4
// 324 timerCapture |= T2CAPHPH << 8;
MOV A,0xa5
MOV R3,A
// 325
// 326 return (timerCapture);
LJMP ?BRET
CFI EndBlock cfiBlock3
// 327 }
// 328
// 329
// 330 /**************************************************************************************************
// 331 * @fn macMcuOverflowCount
// 332 *
// 333 * @brief Returns the value of the overflow counter which is a special hardware feature.
// 334 * The overflow count actually is only 20 bits of information.
// 335 *
// 336 * @param none
// 337 *
// 338 * @return value of overflow counter
// 339 **************************************************************************************************
// 340 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 341 uint32 macMcuOverflowCount(void)
macMcuOverflowCount:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function macMcuOverflowCount
// 342 {
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: 4
MOV A,#-0x4
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 16)
// 343 uint32 overflowCount;
// 344
// 345 /* for efficiency, the 32-bit value is encoded using endian abstracted indexing */
// 346
// 347 /* must read T2OF0 first, this latches T2OF1 and T2OF2 */
// 348 ((uint8 *)&overflowCount)[UINT32_NDX0] = T2OF0;
MOV A,0xa1
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 349 ((uint8 *)&overflowCount)[UINT32_NDX1] = T2OF1;
MOV A,0xa2
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 350 ((uint8 *)&overflowCount)[UINT32_NDX2] = T2OF2;
MOV A,0xa3
SJMP ?Subroutine5
CFI EndBlock cfiBlock4
// 351 ((uint8 *)&overflowCount)[UINT32_NDX3] = 0;
// 352
// 353 return (overflowCount);
// 354 }
// 355
// 356
// 357 /**************************************************************************************************
// 358 * @fn macMcuOverflowCapture
// 359 *
// 360 * @brief Returns the last capture of the overflow counter. A special hardware feature
// 361 * captures the overflow counter when the regular hardware timer is captured.
// 362 *
// 363 * @param none
// 364 *
// 365 * @return last capture of overflow count
// 366 **************************************************************************************************
// 367 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 368 uint32 macMcuOverflowCapture(void)
macMcuOverflowCapture:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function macMcuOverflowCapture
// 369 {
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: 4
MOV A,#-0x4
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 16)
// 370 uint32 overflowCapture;
// 371
// 372 /* for efficiency, the 32-bit value is encoded using endian abstracted indexing */
// 373
// 374 ((uint8 *)&overflowCapture)[UINT32_NDX0] = T2PEROF0;
MOV A,0x9c
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX @DPTR,A
// 375 ((uint8 *)&overflowCapture)[UINT32_NDX1] = T2PEROF1;
MOV A,0x9d
PUSH A
CFI CFA_SP SP+-1
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
POP A
CFI CFA_SP SP+0
MOVX @DPTR,A
// 376 ((uint8 *)&overflowCapture)[UINT32_NDX2] = T2PEROF2 & PEROF2_BITS;
MOV A,#0xf
ANL A,0x9e
SJMP ?Subroutine5
CFI EndBlock cfiBlock5
// 377 ((uint8 *)&overflowCapture)[UINT32_NDX3] = 0;
// 378
// 379 return (overflowCapture);
// 380 }
// 381
// 382
// 383 /**************************************************************************************************
// 384 * @fn macMcuOverflowSetCount
// 385 *
// 386 * @brief Sets the value of the hardware overflow counter.
// 387 *
// 388 * @param count - new overflow count value
// 389 *
// 390 * @return none
// 391 **************************************************************************************************
// 392 */
RSEG BANKED_CODE:CODE:NOROOT(0)
// 393 void macMcuOverflowSetCount(uint32 count)
macMcuOverflowSetCount:
CFI Block cfiBlock6 Using cfiCommon0
CFI Function macMcuOverflowSetCount
// 394 {
FUNCALL macMcuOverflowSetCount, halAssertHandler
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
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: 4
MOV A,#-0x4
LCALL ?ALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 16)
LCALL ?Subroutine0 & 0xFFFF
// 395 MAC_ASSERT(!((count >> 16) & ~PEROF2_BITS)); /* illegal count value */
??CrossCallReturnLabel_2:
LCALL ?L_MOV_X
MOV A,#0x10
MOV R0,#?V0 + 0
LCALL ?UL_SHR
LCALL ?Subroutine1 & 0xFFFF
??CrossCallReturnLabel_0:
JNZ ??macMcuOverflowSetCount_0
MOV A,R1
??macMcuOverflowSetCount_0:
JZ ??macMcuOverflowSetCount_1
; Setup parameters for call to function halAssertHandler
MOV DPTR,#(halAssertHandler & 0xffff)
MOV A,#((halAssertHandler >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 396
// 397 /* for efficiency, the 32-bit value is decoded using endian abstracted indexing */
// 398
// 399 /* T2OF2 must be written last */
// 400 T2OF0 = ((uint8 *)&count)[UINT32_NDX0];
??macMcuOverflowSetCount_1:
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV 0xa1,A
// 401 T2OF1 = ((uint8 *)&count)[UINT32_NDX1];
MOV A,#0x1
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV 0xa2,A
// 402 T2OF2 = ((uint8 *)&count)[UINT32_NDX2];
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV 0xa3,A
// 403 }
SJMP ??Subroutine5_0
CFI EndBlock cfiBlock6
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine5:
CFI Block cfiBlock7 Using cfiCommon0
CFI NoFunction
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 16)
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-11)))
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(-12)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-10)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -