123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- #include "api_timer.h"
- #include "api_rt_timer.h"
- #include "api_rt_dbg.h"
- #include "board_config.h"
- #include "gd32f30x.h"
- #include "classB.h"
- ApiRtTimer_Handle Timers[GENERAL_TIMER_COUNT + 1];
- /* ========================================================================== */
- /* ============================== API RT Functions ============================= */
- /* ========================================================================== */
- void iRtTimer_Init()
- {
- Timers[HW_TBC_HALF_UPDATE_TIMER].TimerBase = TIMER6;
- Timers[HW_TBC_HALF_UPDATE_TIMER].TickISR.Enable = 0;
-
- Timers[HW_TBS_TIMER].TimerBase = TIMER3;
- Timers[HW_TBS_TIMER].TickISR.Enable = 0;
-
- Timers[HW_EVENT1MS_TIMER].TimerBase = TIMER5;
- Timers[HW_EVENT1MS_TIMER].TickISR.Enable = 0;
-
- Timers[HW_SYSTICK_TIMER].TimerBase = 0;
- Timers[HW_SYSTICK_TIMER].TickISR.Enable = 0;
- }
- void iRtTimer_Isr(uint8_t devIndex)
- {
- if (Timers[devIndex].TickISR.Action != 0)
- {
- Timers[devIndex].TickISR.Action();
- }
- if (devIndex < GENERAL_TIMER_COUNT)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_INTF(base)&= ~0x0001;
- }
- }
- /* ========================================================================== */
- /* ============================== API Functions ============================= */
- /* ========================================================================== */
- uint32_t iTimer_GetClock(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- return HW_TIM_CLOCK_HZ;
- }
- else
- {
- return HW_TIM_CLOCK_HZ;
- }
- }
- void iTimer_Start(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_CTL0(base) |= (uint32_t)BIT(0);
- }
- else
- {
- SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
- }
- }
- void iTimer_Stop(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_CTL0(base) &= ~(uint32_t)BIT(0);
- }
- else
- {
- SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
- }
- }
- void iTimer_EnableAutoReload(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_CTL0(base) |= (uint32_t)BIT(7);
- }
- }
- void iTimer_DisableAutoReload(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_CTL0(base) &= ~(uint32_t)BIT(7);
- }
- }
- uint32_t iTimer_GetPeriod(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- uint32_t count_value = 0U;
- count_value = TIMER_CAR(base);
- return count_value;
- }
- else
- {
- return SysTick->LOAD;
- }
- }
- void iTimer_SetPeriod(uint8_t devIndex, uint32_t ticks)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_CAR(base) = ticks;
- }
- else
- {
- SysTick->LOAD = ticks;
- }
- }
- uint32_t iTimer_GetCount(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- uint32_t count_value = 0U;
- count_value = TIMER_CNT(base);
- return count_value;
- }
- else
- {
- return SysTick->VAL;
- }
- }
- void iTimer_Reset(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX)
- {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_CNT(base) = 0;
- }
- else
- {
- SysTick->VAL = SysTick->LOAD;
- }
- }
- void iTimer_BindInterrupt(uint8_t devIndex, void (*action)())
- {
- Timers[devIndex].TickISR.Action = action;
- }
- void iTimer_EnableInterrupt(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX) {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_DMAINTEN(base)|= (uint16_t)0x01;
- }
- else {
- }
- }
- void iTimer_DisableInterrupt(uint8_t devIndex)
- {
- if (devIndex < SYSTEM_TICK_TIMER_INDEX) {
- uint32_t base = Timers[devIndex].TimerBase;
- TIMER_DMAINTEN(base) &= ~((uint16_t)0x01);
- }
- else {
- }
- }
|