|
顺着你说的这个osal_start_timerEx函数开始说,因为这个是设置定时器开始的函数,一层层往下找,osal_timer_activate==》osal_timer_hw_setup,这个函数里有句:- HalTimerStart (OSAL_TIMER, tmr_count );
复制代码 其中:- #define OSAL_TIMER HAL_TIMER_2
复制代码 是不是这里让你觉得系统定时器是用的timer2呢?
再往下看:- uint8 HalTimerStart (uint8 timerId, uint32 timePerTick)
- {
- uint8 hwtimerid;
- hwtimerid = halTimerRemap (timerId);
- if (halTimerRecord[hwtimerid].configured)
- {
- halTimerSetCount (hwtimerid, timePerTick);
- halTimerSetPrescale (hwtimerid, halTimerRecord[hwtimerid].prescale);
- halTimerSetOpMode (hwtimerid, halTimerRecord[hwtimerid].opMode);
- halTimerSetChannelMode (hwtimerid, halTimerRecord[hwtimerid].channelMode);
复制代码 这里实际操作的timer做了个"remap", 其对应关系:- uint8 halTimerRemap (uint8 timerId)
- {
- switch (timerId)
- {
- case HAL_TIMER_0:
- return HW_TIMER_3;
- case HAL_TIMER_2:
- return HW_TIMER_4;
- case HAL_TIMER_3:
- return HW_TIMER_1;
- default:
- return HW_TIMER_INVALID;
- }
- }
复制代码 以HalTimerStart 函数里的
halTimerSetCount (hwtimerid, timePerTick);//设置定时器计数值
这句作为例子
这里的hwtimerid = halTimerRemap (timerId);而timerId= OSAL_TIMER = HAL_TIMER_2
这样的话,从上面的代码- case HAL_TIMER_2:
- return HW_TIMER_4;
复制代码 不就能看出hwtimerid 实际上的值为HW_TIMER_4,那不就说明系统定时器实际上是在操作timer4吗? |
|