| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /*
- * 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);
- }
|