DSP学习(5)—— Timer的使用
前言
本文记录学习使用SYS/BIOS Timer的过程以及一些遇到的问题,主要内容是如何创建和使用一个计时器。
一、创建Timer
计时器可以在编写程序的时候静态配置也可以在程序执行时动态配置。这两种方式没有什么区别但是有些组件可能只能静态配置。对于定时器的静态配置有以下两种方式。
1. 法一:图形界面创建
注意:图形界面相对来说比较占资源,如果电脑配置不高,可能出现打开图形界面卡顿的情况。
首先,点击project文件夹内的
.cfg
文件,页面如下图所示,再点击System Overview
这就是整个系统组件的结构图,接着点击Timer模块
点击实例instance进入创建页面,点击Add 建立一个timer, 如果无法点Add,鼠标放到白色的矩形框内右键选使用计时器。
- Timer ISR function: 计时器每个周期内执行的中断服务函数,自己补充执行特定功能的函数,名字可以随便取
- Timer ID: 根据不同的芯片内置的timer数目、基地址都不一样,具体查看手册。也可以选择ANY,默认使用任意最低ID的空闲timer
- Period: 计时器周期,有两种:一个是计数,一个是微秒
- Start mode: 有两种,一个是自动开始,一个是用户启动,用户启动要写对应的代码,例如:
// 启动1ms计数器
UInt key;
key = Hwi_disable();
Timer_setPeriodMicroSecs(TimerSlotHandle, 1000);
Timer_start(TimerSlotHandle);
Hwi_restore(key);
- Run mode: 有连续模式和一些其他模式,具体见help>timer_create>Timer_Params_init 里面有各个参数的说明
2. 法二:代码方式创建
Timer_Params timerparams;
Timer_Params_init(&timerparams);
timerparams.intNum = 6;//interrupt number
timerparams.periodType = Timer_PeriodType_MICROSECS;
timerparams.period = 1000;//1ms
timerparams.runMode = Timer_RunMode_CONTINUOUS;
timerparams.startMode = Timer_StartMode_USER;
TimerSlotHandle = Timer_create(11,Timer_ISR,&timerparams,NULL);
if(TimerSlotHandle == NULL){
System_abort("TimerSlotHandle created failed!\n");
}
具体的参数可以在CCS的help查找
二、相关问题
软件定时器和硬件定时器的区别:
- 硬件定时器:
只要一上电硬件定时器就会周期的向CPU发一个时钟中断,CPU就执行相应的中断ISR,因为是硬件相关比较精确,等于说时间是严格跟硬件走的。 - 软件定时器:
由程序启动的,没硬件定时器精确,需要占用一部分CPU资源。