📄 mac_timer.s51
字号:
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
MOV A,R1
MOV R4,A
MOV A,R2
MOV R5,A
MOV A,R3
MOV R6,A
// 192 UINT8 prevCallback;
// 193 UINT8 currCallback;
// 194 UINT8 nextCallback;
// 195
// 196 DISABLE_GLOBAL_INT();
CLR 0xa8.7
// 197
// 198 prevCallback = NO_CALLBACK;
MOV ?V0 + 2,#-0x1
// 199 currCallback = firstCallback;
MOV A,firstCallback
MOV R7,A
SJMP ??mtimCancelCallback_0
// 200 while (currCallback != NO_CALLBACK) {
// 201 nextCallback = pMtimCallbacks[currCallback].nextCallback;
// 202 if ((pFunc == pMtimCallbacks[currCallback].pFunc) && pMtimCallbacks[currCallback].occupied) {
// 203
// 204 // Deactivate the entry
// 205 pMtimCallbacks[currCallback].occupied = FALSE;
// 206
// 207 // Update the link on the callback before this entry
// 208 if (prevCallback != NO_CALLBACK) {
// 209 pMtimCallbacks[prevCallback].nextCallback = nextCallback;
// 210 }
// 211
// 212 // Update the link on the next callback entry
// 213 if (nextCallback != NO_CALLBACK) {
// 214 pMtimCallbacks[nextCallback].timeout += pMtimCallbacks[currCallback].timeout;
// 215 }
// 216
// 217 // Update the firstCallback flag if we cancelled it
// 218 if (currCallback == firstCallback) {
// 219 firstCallback = nextCallback;
// 220 }
// 221
// 222 // Done :)
// 223 ENABLE_GLOBAL_INT();
// 224 return TRUE;
// 225 }
// 226
// 227 // Move on to the next entry
// 228 prevCallback = currCallback;
??mtimCancelCallback_1:
MOV ?V0 + 2,R7
// 229 currCallback = nextCallback;
MOV R7,?V0 + 4
??mtimCancelCallback_0:
MOV A,#-0x1
XRL A,R7
JNZ $+5
LJMP ??mtimCancelCallback_2
MOV A,R7
MOV B,#0x9
MUL AB
MOV R0,A
ADD A,#0x0
MOV A,B
ADDC A,#-0x20
MOV R1,A
MOV ?V0 + 1,R1
MOV DPL,R0
MOV DPH,A
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 4,A
MOV DPL,R0
MOV DPH,R1
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
LCALL ?G_EQ
JNZ ??mtimCancelCallback_1
MOV A,R0
ADD A,#0x5
MOV DPL,A
MOV A,?V0 + 1
ADDC A,#0x0
MOV DPH,A
MOVX A,@DPTR
JZ ??mtimCancelCallback_1
CLR A
MOVX @DPTR,A
MOV A,#-0x1
XRL A,?V0 + 2
JZ ??mtimCancelCallback_3
MOV A,?V0 + 2
MOV B,#0x9
MUL AB
ADD A,#0x4
MOV DPL,A
MOV A,B
ADDC A,#-0x20
MOV DPH,A
MOV A,?V0 + 4
MOVX @DPTR,A
??mtimCancelCallback_3:
MOV A,#-0x1
XRL A,?V0 + 4
JZ ??mtimCancelCallback_4
MOV DPL,R0
MOV DPH,?V0 + 1
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV A,?V0 + 4
MOV B,#0x9
MUL AB
ADD A,#0x0
MOV DPL,A
MOV A,B
ADDC A,#-0x20
MOV DPH,A
MOV R0,#?V0 + 0
LCALL ?L_ADD_TO_X
??mtimCancelCallback_4:
MOV A,firstCallback
XRL A,R7
JNZ ??mtimCancelCallback_5
MOV firstCallback,?V0 + 4
??mtimCancelCallback_5:
SETB 0xa8.7
MOV R1,#0x1
SJMP ??mtimCancelCallback_6
// 230 }
// 231 ENABLE_GLOBAL_INT();
??mtimCancelCallback_2:
SETB 0xa8.7
// 232 return FALSE;
MOV R1,#0x0
??mtimCancelCallback_6:
MOV R7,#0x5
LJMP ?FUNC_LEAVE_XDATA
CFI EndBlock cfiBlock3
// 233 } // mtimCancelCallback
// 234
// 235
// 236
// 237
// 238 //-------------------------------------------------------------------------------------------------------
// 239 // void mtimAlignWithBeacon(TIMESTAMP *pTimestamp)
// 240 //
// 241 // DESCRIPTION:
// 242 // Adjusts the timer to the last received packet (which should be a beacon!)
// 243 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 244 ROOT void mtimAlignWithBeacon(TIMESTAMP *pTimestamp) {
mtimAlignWithBeacon:
CFI Block cfiBlock4 Using cfiCommon0
CFI Function mtimAlignWithBeacon
FUNCALL mtimAlignWithBeacon, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mtimAlignWithBeacon, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mtimAlignWithBeacon, T2_GET_OVERFLOW_COUNTER
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mtimAlignWithBeacon, msupCalcCapDuration
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mtimAlignWithBeacon, msupCalcCapDuration
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
FUNCALL mtimAlignWithBeacon, msupCalcCapDuration
LOCFRAME XSTACK, 15, STACK
ARGFRAME XSTACK, 15, STACK
MOV A,#-0xf
LCALL ?FUNC_ENTER_XDATA
CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-3)))
CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-4)))
CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-5)))
CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-7)))
CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-8)))
CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-9)))
CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-10)))
CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-11)))
CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-12)))
CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-13)))
CFI VB load(1, XDATA, add(CFA_XSP16, literal(-14)))
CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-15)))
CFI CFA_SP SP+0
CFI CFA_XSP16 add(XSP16, 15)
; Saved register size: 15
; Auto size: 0
MOV A,R2
MOV R6,A
MOV A,R3
MOV R7,A
// 245
// 246 // Adjust the timestamp for extra 1/4 symbol RX/TX chain delay
// 247 pTimestamp->counter -= TRANSMITTER_DELAY;
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
ADD A,#-0x45
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ADDC A,#-0x1
MOVX @DPTR,A
MOV DPL,R6
MOV DPH,R7
CLR C
MOVX A,@DPTR
SUBB A,#0x0
INC DPTR
MOVX A,@DPTR
SUBB A,#0x0
MOV C,0xD0 /* PSW */.2
XRL A,PSW
RLC A
JNC ??mtimAlignWithBeacon_0
// 248 if (pTimestamp->counter < 0) {
// 249 pTimestamp->counter += TIMER2_BACKOFF_SLOT_COUNTER_VALUE;
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
ADD A,#0x0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ADDC A,#0x28
MOVX @DPTR,A
// 250 pTimestamp->overflowCounter--;
MOV DPTR,#__Constant_ffffffff
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOV R0,#?V0 + 0
LCALL ?L_ADD_TO_X
// 251 }
// 252
// 253 // Update the MAC timer
// 254 T2_SET_OVERFLOW_COUNTER(T2_GET_OVERFLOW_COUNTER() - pTimestamp->overflowCounter);
??mtimAlignWithBeacon_0:
; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
MOV DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
MOV A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOV R0,#?V0 + 4
LCALL ?L_MOV_X
MOV A,R2
CLR C
SUBB A,?V0 + 4
MOV 0xa1,A
; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
MOV DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
MOV A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOV R0,#?V0 + 0
LCALL ?L_MOV_X
MOV A,R2
CLR C
SUBB A,?V0 + 0
MOV A,R3
SUBB A,?V0 + 1
MOV 0xa2,A
; Setup parameters for call to function T2_GET_OVERFLOW_COUNTER
MOV DPTR,#(T2_GET_OVERFLOW_COUNTER & 0xffff)
MOV A,#((T2_GET_OVERFLOW_COUNTER >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV ?V0 + 0,R2
MOV ?V0 + 1,R3
MOV ?V0 + 2,R4
MOV ?V0 + 3,R5
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOV R0,#?V0 + 0
LCALL ?L_SUB_X
MOV A,#0x10
MOV R0,#?V0 + 0
LCALL ?UL_SHR
MOV A,?V0 + 0
MOV 0xa3,A
// 255 T2_SET_COUNTER_DELTA_DELAY(pTimestamp->counter);
MOV DPL,R6
MOV DPH,R7
MOVX A,@DPTR
MOV 0xa6,A
INC DPTR
MOVX A,@DPTR
MOV 0xa7,A
// 256
// 257 // Update the "CAP is active" indicator (used by the TX engine)
// 258 T2_SET_OVERFLOW_COUNTER_COMPARE_VALUE(msupCalcCapDuration());
; Setup parameters for call to function msupCalcCapDuration
LCALL msupCalcCapDuration
MOV A,R2
MOV 0x9c,A
; Setup parameters for call to function msupCalcCapDuration
LCALL msupCalcCapDuration
MOV A,R3
MOV 0x9d,A
MOV A,0x9e
MOV R6,A
; Setup parameters for call to function msupCalcCapDuration
LCALL msupCalcCapDuration
MOV A,R4
ANL A,#0xf
PUSH A
CFI CFA_SP SP+-1
MOV A,#-0x10
ANL A,R6
MOV R2,A
POP A
CFI CFA_SP SP+0
ORL A,R2
MOV 0x9e,A
// 259 T2_SET_CAP_ACTIVE();
ANL 0xc3,#0xdf
// 260
// 261 } // mtimAlignWithBeacon
LJMP ?Subroutine0
CFI EndBlock cfiBlock4
// 262
// 263
// 264 //-------------------------------------------------------------------------------------------------------
// 265 // void mtimStartSync (void)
// 266 //
// 267 // DESCRIPTION:
// 268 // Start Timer2 in synchronous mode. The routine waits until Timer2 has started
// 269 //-------------------------------------------------------------------------------------------------------
RSEG NEAR_CODE:CODE:NOROOT(0)
// 270 ROOT void mtimStartSync (void)
mtimStartSync:
CFI Block cfiBlock5 Using cfiCommon0
CFI Function mtimStartSync
// 271 {
; Saved register size: 0
; Auto size: 0
// 272 BYTE timer2Started;
// 273
// 274 T2_START_SYNC();
ORL 0xc3,#0x2
ORL 0xc3,#0x1
// 275 do
// 276 {
// 277 timer2Started = T2CNF & TIMER2_RUN_BM;
??mtimStartSync_0:
MOV A,0xc3
MOV C,0xE0 /* A */.0
CLR A
MOV 0xE0 /* A */.0,C
// 278 }while (timer2Started == 0);
JZ ??mtimStartSync_0
// 279 }
RET
CFI EndBlock cfiBlock5
RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_0:
DS 4
REQUIRE `?<Initializer for __Constant_0>`
REQUIRE __INIT_XDATA_I
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_0>`:
DD 0
RSEG XDATA_I:XDATA:NOROOT(0)
__Constant_ffffffff:
DS 4
REQUIRE `?<Initializer for __Constant_ffffffff>`
REQUIRE __INIT_XDATA_I
RSEG XDATA_ID:CODE:NOROOT(0)
`?<Initializer for __Constant_ffffffff>`:
DD 4294967295
ASEGN SFR_AN:DATA:NOROOT,0a8H
// union <unnamed> volatile __sfr _A_IEN0
_A_IEN0:
DS 1
ASEGN SFR_AN:DATA:NOROOT,0c0H
// union <unnamed> volatile __sfr _A_IRCON
_A_IRCON:
DS 1
END
//
// 2 bytes in segment DATA_Z
// 948 bytes in segment NEAR_CODE
// 11 bytes in segment PM0_XDATA
// 14 bytes in segment SFR_AN
// 108 bytes in segment XDATA_AN
// 8 bytes in segment XDATA_I
// 8 bytes in segment XDATA_ID
//
// 948 bytes of CODE memory (+ 8 bytes shared)
// 2 bytes of DATA memory (+ 14 bytes shared)
// 11 bytes of XDATA memory (+ 116 bytes shared)
//
//Errors: none
//Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -