TI中文支持网
TI专业的中文技术问题搜集分享网站

sysbios下的定时器

下面是我写的一个简单的例子,我看了一下寄存器,CLKDI=6,我想确定一下,中断是不是80us触发一次,用的是clock()函数也不知道对不对,但是最后仿真如图,是不是出现错误了,80us不是等于80000个吗?

#include <xdc/std.h>
#include <xdc/runtime/System.h>

#include <ti/sysbios/knl/Task.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Clock.h>

#include <xdc/runtime/Error.h>
#include <xdc/cfg/global.h>
#include <ti/sysbios/timers/timer64/Timer.h>

#include <time.h>

void masterTask();
void tickFxn();

#define CLKDIV (0x02280004)

Clock_Handle clk2;
Clock_Handle clk1;

xdc_runtime_Types_FreqHz *freq;

Timer_Handle timerHandle;
UInt i=0;
time_t time1,time2;
time_t time_n[500];

volatile Bool flag=0;

void masterTask()
{
System_printf("开启定时器:");
time1=clock();
Timer_start(timerHandle);
while(1){
if(flag){
time2=clock();
time_n[i]=time2-time1;
i++;
time1=time2;
if(i==500)
BIOS_exit(0);
flag = 0;
}

}
}

void tickFxn()
{
if(flag)
BIOS_exit(0);
flag=1;
}
/*
* ======== main ========
*/
Int main()
{

Error_Block eb;
Task_Handle taskHandle;
Timer_Params timerParams;
Error_init(&eb);
Timer_Params_init(&timerParams);
timerParams.period = 80;
timerParams.periodType = Timer_PeriodType_MICROSECS;
timerParams.startMode=Timer_StartMode_USER;
timerParams.runMode = Timer_RunMode_CONTINUOUS;
//timerParams.
timerParams.emuMgtInit.free=1;
timerHandle = Timer_create(8, tickFxn, &timerParams, &eb);
if(timerHandle == NULL){
System_abort("创建定时失败/n");
}

taskHandle = Task_create(masterTask, NULL, &eb);
if(taskHandle == NULL){
System_abort("创建任务失败/n");
}
BIOS_start(); /* does not return */
return(0);
}

Thomas Yang1:

您是用的哪个型号的芯片?

下面图例中的统计是哪个呢?

user4712072:

回复 Thomas Yang1:

你好!!!我没有在板子上测试,只是在ccs里面写了个程序,然后仿真了一下,用的是6678;图片里面的数值,我是想利用time.h里面的函数clock()来大概计算一下触发中断的间隔是不是80us(timerParams.period = 80),但是结果就跟图片里面的一样,不知道是怎么回事,clock函数返回的数值是不是周期数,一个周期1ns,但是感觉不对

Andy Yin1:

回复 user4712072:

定时器跟硬件相关,不建议在simulator下测试timer。另外建议你使用读取TSC寄存器的方式来获取当前CPU的时钟,TSC寄存器单位是1 cpu clock,如CPU主频为1GHz,则TSC 单位是1ns。

赞(0)
未经允许不得转载:TI中文支持网 » sysbios下的定时器
分享到: 更多 (0)