你好。
硬件平台:TMS320C6747,50M晶振,主频300M;
软件平台:CCS5.5,SYS/BIOS 6.37.5.35,XTOOLS 3.25.6.96
BIOS使能CLOCK、TIMER、还有TimeStamp组件,确认Timer0和Timer1的输入频率为晶振频率50M,在启动BIOS前创建一个Clock:
Error_init(&eb);
Clock_Params_init(&clkParams);
clkParams.period = 5;
clkParams.startFlag = false;
gs_clk = Clock_create(ClockSwiHandler, 100, &clkParams, &eb);
Assert(NULL != gs_clk);
启动Clock_start()该clock后,通过串口输出每次运行时的TimeStamp,发现每次的时间间隔(前后TimeStamp差分)并不是预期的5ms,而是约5.005ms。
还请TI的工程师分析一下这个问题。
------------------------------------------------------------------------------------------------------
使用Timer1_34的HWI来进行相同的处理,发现如下现象:
void timer1_setup(void)
{
static const uint32_t TIMER_PERIOD12 = 50000000u/1000u - 1u;
static const uint32_t TIMER_PERIOD34 = 50000000u/200u - 1u;
tmr1Regs->TCR = 0;
tmr1Regs->TGCR = 0;
tmr1Regs->TGCR |= 0x04;
tmr1Regs->TGCR |= 0x03;
tmr1Regs->PRD12 = TIMER_PERIOD12;
tmr1Regs->TIM12 = 0;
tmr1Regs->PRD34 = TIMER_PERIOD34;
tmr1Regs->TIM34 = 0;
tmr1Regs->TCR &= ~0x1000100;
tmr1Regs->TCR |= 0x800080;
}
上述配置的Timer可以产生预期间隔的中断,前后帧差分后的误差小于1us(最小分辨率)
而周期不减1:
static const uint32_t TIMER_PERIOD12 = 50000000u/1000u
static const uint32_t TIMER_PERIOD34 = 50000000u/200u;
...
产生的现象和使用SYS/BIOS CLOCK模块是相似的。
还请确认下是否是CLOCK模块配置时候减1的问题(按照datasheet的描述应该是减1)。