| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /*
- * timer.c
- *
- * Created on: 2025年7月24日
- * Author: Administrator
- */
- #include "soc_C6748.h" // DSP C6748 外设寄存器
- #include "timer.h"
- #include "interrupt.h" // DSP C6748 中断相关应用程序接口函数声明及系统事件号定义
- #include "tr_timer.h"
- // 64位 定时器 / 计数器周期
- // 定时时间 1 秒
- // 低32位
- //#define TMR_PERIOD_LSB32 (0x0D970100) // 1s
- //#define TMR_PERIOD_LSB32 (0x015BE680) // 100ms
- //#define TMR_PERIOD_LSB32 (0x0022CA40*5) // 10ms
- #define TMR_PERIOD_LSB32 (0x00037AA0) // 1ms
- // 高32位 0
- #define TMR_PERIOD_MSB32 (0)
- // 定时器 / 计数器初始化
- static void _TimerInit(void);
- // 定时器 / 计数器中断初始化
- static void TimerInterruptInit(void);
- // DSP 中断初始化
- static void InterruptInit(void);
- // 中断服务函数
- static void TimerIsr(void);
- void TimerInit(void)
- {
- // 定时器 / 计数器初始化
- _TimerInit();
- // 定时器 / 计数器中断初始化
- TimerInterruptInit();
- }
- /****************************************************************************/
- /* */
- /* 定时器 / 计数器初始化 */
- /* */
- /****************************************************************************/
- static void _TimerInit(void)
- {
- // 配置 定时器 / 计数器 2 为 64 位模式
- TimerConfigure(SOC_TMR_2_REGS, TMR_CFG_64BIT_CLK_INT);
- // 设置周期
- TimerPeriodSet(SOC_TMR_2_REGS, TMR_TIMER12, TMR_PERIOD_LSB32);
- TimerPeriodSet(SOC_TMR_2_REGS, TMR_TIMER34, TMR_PERIOD_MSB32);
- // 使能 定时器 / 计数器 2
- TimerEnable(SOC_TMR_2_REGS, TMR_TIMER12, TMR_ENABLE_CONT);
- }
- /****************************************************************************/
- /* */
- /* 定时器 / 计数器中断初始化 */
- /* */
- /****************************************************************************/
- static void TimerInterruptInit(void)
- {
- // 注册中断服务函数
- IntRegister(C674X_MASK_INT8, TimerIsr);
- // 映射中断到 DSP 可屏蔽中断
- IntEventMap(C674X_MASK_INT8, SYS_INT_T64P2_TINTALL);
- // 使能 DSP 可屏蔽中断
- IntEnable(C674X_MASK_INT8);
- // 使能 定时器 / 计数器 中断
- TimerIntEnable(SOC_TMR_2_REGS, TMR_INT_TMR12_NON_CAPT_MODE);
- }
- /****************************************************************************/
- /* */
- /* 中断服务函数 */
- /* */
- /****************************************************************************/
- static void TimerIsr(void)
- {
- // 禁用定时器 / 计数器中断
- TimerIntDisable(SOC_TMR_2_REGS, TMR_INT_TMR12_NON_CAPT_MODE);
- // 清除中断标志
- IntEventClear(SYS_INT_T64P2_TINTALL);
- TimerIntStatusClear(SOC_TMR_2_REGS, TMR_INT_TMR12_NON_CAPT_MODE);
- // tr_timer
- BaseTimeIncremental();
- // 使能 定时器 / 计数器 中断
- TimerIntEnable(SOC_TMR_2_REGS, TMR_INT_TMR12_NON_CAPT_MODE);
- }
|