今天在使用CC1310产生时钟中断的时候发现,自己想产生一个1S的中断,但是总是达不到。系统频率为48MHz。测试了很多发现300ms一下的时间触发一次中断是没问题的,当触发中断的时间超过了300ms定时器产生中断的时间就会出错,这个是什么原因呢?
使用的是定时器中断。
Felix ZF:
你可以使用TI-RTOS的clock module来做。clock module的定时中断由系统软件中断来实现。
clock module以tick为计时单位,系统默认每个tick是10us。
例如,下面例程就是每5s触发一次定时中断。在clk0Fxn()定义定时到了需要执行的代码。
Clock_Struct clk0Struct;Clock_Handle clk0Handle;
Clock_Params clkParams;
Clock_Params_init(&clkParams); clkParams.period = 5000/Clock_tickPeriod; clkParams.startFlag = TRUE; /* Construct a periodic Clock Instance */ Clock_construct(&clk0Struct, (Clock_FuncPtr)clk0Fxn, 5000/Clock_tickPeriod, &clkParams);
clk0Handle = Clock_handle(&clk0Struct); Clock_start(clk0Handle);
Bin Hu4:
回复 Felix ZF:
tick这个是可以的,tick时钟还发现了一个问题,这个tick时钟是不是不能同时开启两个定时器,开启一个完美运行,当开启了两个时两个定时运行一个周期然后就都停住了。
Felix ZF:
回复 Bin Hu4:
可以同时创建多个clock instance的。
例如:
Clock_Params clkParams; clkParams.period = 0; clkParams.startFlag = FALSE; Clock_construct(&clk0Clock, clk0ClockCallback, 0, &clkParams);clk0ClockHandle = Clock_handle(&clk0Clock);Clock_construct(&clk1Clock, clk1ClockCallback, 0, &clkParams);clk1ClockHandle = Clock_handle(&clk1Clock);
clkParams.period用于设置是一次性定时器(设置为0),还是周期性定时器(设置为非0值,设定值即为其周期)。
Bin Hu4:
回复 Felix ZF:
我试着创建了两个周期性的定时器,然后就出现了我之前说的,两个定时器同时运行一到两个周期之后就都停止运行了。是不是tick,在同一时间只能运行一个周期的定时器?谢谢回复!
Felix ZF:
回复 Bin Hu4:
不存在你说的限制的,可以创建多个周期性的clock instance的。
Bin Hu4:
回复 Felix ZF:
好的,那应该是我程序还有点问题。我再看看,谢谢你。