首先了解开发板TMS320f28335是150Mhz的频率
定时器结构图和概要
定时器0对应的中断是TINT0
大概是这样,时钟sysclkout 进入和TCR控制时钟进入 ,经过标定计数器(stm32的预分频),标定器挂这自动装载寄存器,进入到计数器,计数器挂着一个周期寄存器。计数达到计数值就触发中断;
PIE中断组
定时器0中断在PIE组1的第七个中断
定时器寄存器
全配置了;
主要的是定时器的控制寄存器
初始化全部设置完
11位,设置1在仿真到中断时,计数器还会继续跑;设置为0,计数器不会跑;
10位仿真时 设置1下一次计数为0时停止计数 设置0 时 当前计数为0时停止计数
中断函数
interrupt 函数类型加关键字;
并且用PIE应答赋值1去清零,继续允许下次中断。
中断向量表的地址赋值
PieVectTable.TINT0 = &time0_IER;
程序
全局中断,仿真中断,关键字都在 DSP2833x_Device.h
DSP2833x_PieVect.c 有PIE向量表初始化 InitPieVectTable();
DSP2833x_PieCtrl.c 有PIE初始化 InitPieCtrl();
定时器0
#include"time0.h"
#include"led1.h"
void time0_init(Uint16 prd)
{
EALLOW;
SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1;
CpuTimer0Regs.PRD.all = ((long)150*1000*prd);//ms
//相似预分频,预定标寄存器
CpuTimer0Regs.TPR.all = 0;
CpuTimer0Regs.TPRH.all = 0;//不分频
CpuTimer0Regs.TCR.bit.TSS = 1;//禁止定时器
CpuTimer0Regs.TCR.bit.TRB = 1;//重载使能
CpuTimer0Regs.TCR.bit.SOFT=0;//0 下次计数到0的时候 停止 1当前计数到0 停止
CpuTimer0Regs.TCR.bit.FREE=0;//0仿真进入中断后 停止 1继续
CpuTimer0Regs.TCR.bit.TIE=1;//中断使能
CpuTimer0Regs.TCR.bit.TSS = 0;//启动定时器
EDIS;
EALLOW;
PieVectTable.TINT0 = &time0_IER; //向量表 的TINT0 中断地址 对应到这个函数
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//PIE组1 的第7个中断
EDIS;
IER |= M_INT1; //开启 全局中断
EINT;//使能 全局中断
ERTM;//使能 调试中断
}
interrupt void time0_IER()
{
LED1_TOGGLE;
EALLOW;
PieCtrlRegs.PIEACK.bit.ACK1 = 1;//赋值1 清除标志,继续使能下次的中断
EDIS;
}
主函数
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#include "led1.h"
#include "key.h"
#include "epwm.h"
#include "exti.h"
#include"time0.h"
int main()
{
Uint16 temp = 0;
InitSysCtrl();
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
led_init();
time0_init(2000);
while (1)
{
}
}