1.基本原理
TMS320F28335的CPU Time有三个,分别为Timer0,Timer1,Timer2,其中Timer2是为操作系统DSP/BIOS保留的,当未移植操作系统时,可用来做普通的定时器。这三个定时器的中断信号分别为TINT0, TINT1, TINT2,分别对应于中断向量INT1,INT13,INT14。下图为定时器的结构框图,图中TIMH:TIM为计数寄存器,PRDH:PRD为周期寄存器。
详细介绍在Tms320F2833x用户指南的1.3.5节详细介绍。
简单说就是一个32bit 的减计数器,timer2留给操作系统作为系统节拍定时器用。timer0 和 timer1 给用户使用,如果不使用操作系统tiemr2也可以使用。中断系统如下图所示:
2.库函数介绍
Ti给的库函数 DSP2833x_CpuTimers.c 都把基本操作包含好了。用户只需要调用函数即可。常用的函数就两个如下所示:
InitCpuTimers(); //负责初始化
ConfigCpuTimer(&CpuTimer0, 150, 100000);//设置定时器频率和周期.
3.实际应用
我们需要用定时器产生一个 ms 定时器,比如产生 500ms 定时去驱动LED指示灯。代码如下所示:
__interrupt void cpu_timer0_isr(void){CpuTimer0.InterruptCount++;PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;// Acknowledge this interrupt to receive more interrupts from group 1//to do ...GpioDataRegs.GPATOGGLE.bit.GPIO18 = 1;}void User_CpuTimer0Init(void){EALLOW; // This is needed to write to EALLOW protected registersPieVectTable.TINT0 = &cpu_timer0_isr;EDIS; // This is needed to disable write to EALLOW protected registersInitCpuTimers(); //初始化 CPU定时器ConfigCpuTimer(&CpuTimer0, 150, 100000); //500000--500msCpuTimer0Regs.TCR.all = 0x4000; // Use write-only instruction to set TSS bit = 0IER |= M_INT1;// Enable CPU INT1 which is connected to CPU-Timer 0:PieCtrlRegs.PIEIER1.bit.INTx7 = 1;// Enable TINT0 in the PIE: Group 1 interrupt 7// Enable global Interrupts and higher priority real-time debug eventsEINT; // Enable Global interrupt INTMERTM; // Enable Global realtime interrupt DBGM}
主函数代码如下所示:
void main(void){InitSysCtrl();DINT; //禁止全局中断InitPieCtrl(); // 初始化PIE模块IER = 0x0000; //清除 CPU寄存器IFR = 0x0000;InitPieVectTable(); //初始化中断服务表EALLOW;GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0;GpioCtrlRegs.GPADIR.bit.GPIO18 = 1;EDIS;User_CpuTimer0Init(); //CPU Timer0 初始化EINT; // 使能全局中断ERTM; // Enable Global realtime interrupt DBGMwhile(1){}}
自此就完成了。
如果觉得《TMS320F28335-CPU定时器》对你有帮助,请点赞、收藏,并留下你的观点哦!