1、定时器介绍
1.1 CPU工作原理
TIMER0 | TINT0 | PIE | INT1 | |
TIMER1 | TINT1 | CPU | INT13 | |
TIMER2 | 用于DSP/BIOS ,当该功能不使用时,用户可以使用 | TINT2 | CPU | INT14 |
预分频模块
定时器分频寄存器 | TDDRH:TDDR | 16位 |
预定标计数器 | PSCH:PSC | 16位 |
定时/计数模块
周期寄存器 | PRDH:PRD | 32位 |
计数寄存器 | TIMH:TIM | 32位 |
1.2定时器相关寄存器
地址 | 寄存器 | 名称 |
TIMERxTIM | Timer x,计数寄存器低 | |
TIMERxTIMH | Timer x,计数寄存器高 | |
TIMERxPRD | Timer x,周期寄存器低 | |
TIMERxPRDH | Timer x,周期寄存器高 | |
TIMERxTCR | Timer x,控制寄存器 | |
保留 | ||
TIMERxTPR | Timer x,预定标寄存器 | |
TIMERxPPRH | Timer x,预定标寄存器高 |
(1)定时器控制寄存器TIMERxTCR
位 | 名称 | 功能描述 | |||||||||||||||
15 | TIF | CPU定时器中断标志位 当定时器计数器递减到零时,该位置1,可以通过软件向该位写1清零 0:写0无影响 1:写1清零 | |||||||||||||||
14 | TIE | 定时器中断使能 如果定时计数器递减到0,TIE为使能,定时器向CPU申请中断 | |||||||||||||||
13、12 | 保留 | 保留 | |||||||||||||||
11 | FREE | CPU定时器仿真模式 | |||||||||||||||
10 | SOFT | CPU定时器仿真模式
| |||||||||||||||
9~6 | 保留 | 保留 | |||||||||||||||
5 | TRB | 定时器重载控制位 0:禁止重载 1:使能重载 | |||||||||||||||
4 | TSS | 启动和停止定时器的状态位 0:为了启动或重新启动,将其清零 1:停止状态 | |||||||||||||||
3~0 | 保留 | 保留 |
2、定时器配置步骤
定时器相关库函数在DSP2833x_CpuTimers.c文件中
(1)使能定时器时钟
EALLOW;
SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0
EDIS;
(2)初始化定时器参数,包括制定定时器寄存器地址、周期寄存器值、预定标计数器值等
//指向定时器0的寄存器地址
CpuTimer0.RegsAddr = &CpuTimer0Regs;
//设置定时器0的周期寄存器值
CpuTimer0Regs.PRD.all = 0xFFFFFFFF;
//设置定时器预定标计数器值为0
CpuTimer0Regs.TPR.all = 0;
CpuTimer0Regs.TPRH.all = 0;
//确保定时器0为停止状态
CpuTimer0Regs.TCR.bit.TSS = 1;
//重载使能
CpuTimer0Regs.TCR.bit.TRB = 1;
// Reset interrupt counters:
CpuTimer0.InterruptCount = 0;
(3)定时器的设置
TI提供的库函数“DSP2833x_CpuTimers.c”内已经有函数实现
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
(4)开启定时器中断功能,并使能定时器
//设置定时器0的中断入口地址为中断向量表的INT0
EALLOW;
PieVectTable.TINT0 = &TIM0_IRQn;
EDIS;
//开始定时器功能
CpuTimer0Regs.TCR.bit.TSS=0;
//开启CPU第一组中断并使能第一组中断的第7个小中断,即定时器0
IER |= M_INT1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
//使能总中断
EINT;
ERTM;
(5)编写定时器中断服务函数
interrupt void TIM0_IRQn(void)
{
......功能程序
}