/* * 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); // 中断服务函数 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); }