📄 hal_timer.s51
字号:
MOV ?V0 + 1,R4
MOV ?V0 + 2,R5
MOV A,#0xf
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R1,A
INC DPTR
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV ?V0 + 4,R1
MOV ?V0 + 5,R2
MOV ?V0 + 6,R3
// 279 uint8 hwtimerid;
// 280
// 281 hwtimerid = halTimerRemap (timerId);
; Setup parameters for call to function halTimerRemap
MOV A,R6
MOV R1,A
MOV DPTR,#(halTimerRemap & 0xffff)
MOV A,#((halTimerRemap >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV R2,A
// 282
// 283 if ((opMode & HAL_TIMER_MODE_MASK) && (timerId < HAL_TIMER_MAX) &&
// 284 (channelMode & HAL_TIMER_CHANNEL_MASK) && (channel & HAL_TIMER_CHANNEL_MASK))
MOV A,#0x3
ANL A,R7
JZ ??HalTimerConfig_0
MOV A,R6
CLR C
SUBB A,#0x4
JNC ??HalTimerConfig_0
MOV A,#0xf
ANL A,?V0 + 1
JZ ??HalTimerConfig_0
MOV A,#0xf
ANL A,?V0 + 0
JZ ??HalTimerConfig_0
// 285 {
// 286 halTimerRecord[hwtimerid].configured = TRUE;
MOV A,R2
MOV B,#0xb
MUL AB
ADD A,#(??halTimerRecord & 0xff)
MOV R0,A
MOV A,B
ADDC A,#((??halTimerRecord >> 8) & 0xff)
MOV R1,A
MOV A,#0x1
MOV DPL,R0
MOV DPH,R1
MOVX @DPTR,A
// 287 halTimerRecord[hwtimerid].opMode = opMode;
MOV A,R7
INC DPTR
INC DPTR
LCALL ?Subroutine11 & 0xFFFF
// 288 halTimerRecord[hwtimerid].channel = channel;
??CrossCallReturnLabel_38:
MOV A,?V0 + 0
LCALL ?Subroutine1 & 0xFFFF
// 289 halTimerRecord[hwtimerid].channelMode = channelMode;
??CrossCallReturnLabel_12:
MOV A,?V0 + 1
MOVX @DPTR,A
// 290 halTimerRecord[hwtimerid].intEnable = intEnable;
MOV DPL,R0
MOV DPH,R1
INC DPTR
MOV A,?V0 + 2
LCALL ?Subroutine1 & 0xFFFF
// 291 halTimerRecord[hwtimerid].callBackFunc = cBack;
??CrossCallReturnLabel_13:
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOV A,?V0 + 4
MOVX @DPTR,A
INC DPTR
MOV A,?V0 + 5
MOVX @DPTR,A
INC DPTR
MOV A,?V0 + 6
MOVX @DPTR,A
// 292 }
// 293 else
// 294 {
// 295 return HAL_TIMER_PARAMS_ERROR;
// 296 }
// 297 return HAL_TIMER_OK;
MOV R1,#0x0
SJMP ??HalTimerConfig_1
??HalTimerConfig_0:
MOV R1,#0x2
??HalTimerConfig_1:
MOV R7,#0x7
LJMP ?BANKED_LEAVE_XDATA
CFI EndBlock cfiBlock14
// 298 }
// 299
// 300
// 301 /***************************************************************************************************
// 302 * @fn HalTimerStart
// 303 *
// 304 * @brief Start the Timer Service
// 305 *
// 306 * @param timerId - ID of the timer
// 307 * timerPerTick - number of micro sec per tick, (ticks x prescale) / clock = usec/tick
// 308 *
// 309 * @return Status - OK or Not OK
// 310 ***************************************************************************************************/
RSEG BANKED_CODE:CODE:NOROOT(0)
// 311 uint8 HalTimerStart (uint8 timerId, uint32 timePerTick)
HalTimerStart:
CFI Block cfiBlock15 Using cfiCommon0
CFI Function HalTimerStart
// 312 {
FUNCALL HalTimerStart, halTimerRemap
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL HalTimerStart, halTimerSetCount
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL HalTimerStart, halTimerSetPrescale
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL HalTimerStart, halTimerSetOpMode
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL HalTimerStart, halTimerSetChannelMode
LOCFRAME XSTACK, 16, STACK
ARGFRAME XSTACK, 16, STACK
FUNCALL HalTimerStart, HalTimerInterruptEnable
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
MOV ?V0 + 4,R2
MOV ?V0 + 5,R3
MOV ?V0 + 6,R4
MOV ?V0 + 7,R5
// 313 uint8 hwtimerid;
// 314
// 315 hwtimerid = halTimerRemap (timerId);
; Setup parameters for call to function halTimerRemap
MOV DPTR,#(halTimerRemap & 0xffff)
MOV A,#((halTimerRemap >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV ?V0 + 0,A
// 316
// 317 if (halTimerRecord[hwtimerid].configured)
MOV B,#0xb
MUL AB
ADD A,#(??halTimerRecord & 0xff)
MOV DPL,A
MOV A,B
ADDC A,#((??halTimerRecord >> 8) & 0xff)
MOV DPH,A
MOVX A,@DPTR
JNZ $+5
LJMP ??HalTimerStart_0 & 0xFFFF
// 318 {
// 319 halTimerSetCount (hwtimerid, timePerTick);
; Setup parameters for call to function halTimerSetCount
MOV R2,?V0 + 4
MOV R3,?V0 + 5
MOV R4,?V0 + 6
MOV R5,?V0 + 7
MOV DPTR,#(halTimerSetCount & 0xffff)
MOV A,#((halTimerSetCount >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 320 halTimerSetPrescale (hwtimerid, halTimerRecord[hwtimerid].prescale);
MOV A,?V0 + 0
MOV B,#0xb
MUL AB
ADD A,#(??halTimerRecord & 0xff)
MOV R6,A
MOV A,B
ADDC A,#((??halTimerRecord >> 8) & 0xff)
MOV R7,A
; Setup parameters for call to function halTimerSetPrescale
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A
MOV R1,?V0 + 0
MOV DPTR,#(halTimerSetPrescale & 0xffff)
MOV A,#((halTimerSetPrescale >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 321 halTimerSetOpMode (hwtimerid, halTimerRecord[hwtimerid].opMode);
; Setup parameters for call to function halTimerSetOpMode
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A
MOV R1,?V0 + 0
MOV DPTR,#(halTimerSetOpMode & 0xffff)
MOV A,#((halTimerSetOpMode >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 322 halTimerSetChannelMode (hwtimerid, halTimerRecord[hwtimerid].channelMode);
; Setup parameters for call to function halTimerSetChannelMode
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A
MOV R1,?V0 + 0
MOV DPTR,#(halTimerSetChannelMode & 0xffff)
MOV A,#((halTimerSetChannelMode >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 323
// 324 if (hwtimerid == HW_TIMER_3)
MOV A,#0x1
XRL A,?V0 + 0
JNZ ??HalTimerStart_1
// 325 {
// 326 T3CTL |= HAL_TIMER34_START;
ORL 0xcb,#0x10
SJMP ??HalTimerStart_2
// 327 }
// 328 if (hwtimerid == HW_TIMER_4)
??HalTimerStart_1:
MOV A,#0x2
XRL A,?V0 + 0
JNZ ??HalTimerStart_2
// 329 {
// 330 T4CTL |= HAL_TIMER34_START;
ORL 0xeb,#0x10
// 331 }
// 332 HalTimerInterruptEnable (hwtimerid, halTimerRecord[hwtimerid].channelMode,
// 333 halTimerRecord[hwtimerid].intEnable);
??HalTimerStart_2:
; Setup parameters for call to function HalTimerInterruptEnable
MOV DPL,R6
MOV DPH,R7
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPL,R6
MOV DPH,R7
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX A,@DPTR
MOV R2,A
MOV R1,?V0 + 0
MOV DPTR,#(HalTimerInterruptEnable & 0xffff)
MOV A,#((HalTimerInterruptEnable >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 334 }
// 335 else
// 336 {
// 337 return HAL_TIMER_NOT_CONFIGURED;
// 338 }
// 339 return HAL_TIMER_OK;
MOV R1,#0x0
SJMP ??HalTimerStart_3
??HalTimerStart_0:
MOV R1,#0x3
CFI EndBlock cfiBlock15
??HalTimerStart_3:
REQUIRE ?Subroutine14
; // Fall through to label ?Subroutine14
// 340 }
RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine14:
CFI Block cfiBlock16 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 R7,#0x8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -