⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal_timer.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
        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 + -