This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

cc1310 timer定时器问题

Other Parts Discussed in Thread: CC1310

今天在使用CC1310产生时钟中断的时候发现,自己想产生一个1S的中断,但是总是达不到。系统频率为48MHz。测试了很多发现300ms一下的时间触发一次中断是没问题的,当触发中断的时间超过了300ms定时器产生中断的时间就会出错,这个是什么原因呢?

使用的是定时器中断。

  • 你可以使用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);

  • tick这个是可以的,tick时钟还发现了一个问题,这个tick时钟是不是不能同时开启两个定时器,开启一个完美运行,当开启了两个时两个定时运行一个周期然后就都停住了。

  • 可以同时创建多个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值,设定值即为其周期)。

  • 我试着创建了两个周期性的定时器,然后就出现了我之前说的,两个定时器同时运行一到两个周期之后就都停止运行了。是不是tick,在同一时间只能运行一个周期的定时器?谢谢回复!

  • 不存在你说的限制的,可以创建多个周期性的clock instance的。

  • 好的,那应该是我程序还有点问题。我再看看,谢谢你。