首先了解开发板TMS320f28335是150Mhz的频率

定时器结构图和概要

定时器0对应的中断是TINT0

大概是这样,时钟sysclkout 进入和TCR控制时钟进入 ,经过标定计数器(stm32的预分频),标定器挂这自动装载寄存器,进入到计数器,计数器挂着一个周期寄存器。计数达到计数值就触发中断;

DSP定时器0笔记-LMLPHP

 PIE中断组

定时器0中断在PIE组1的第七个中断

DSP定时器0笔记-LMLPHP

 定时器寄存器

全配置了;

DSP定时器0笔记-LMLPHP

 主要的是定时器的控制寄存器

初始化全部设置完

11位,设置1在仿真到中断时,计数器还会继续跑;设置为0,计数器不会跑;

10位仿真时 设置1下一次计数为0时停止计数     设置0 时 当前计数为0时停止计数

 DSP定时器0笔记-LMLPHP

中断函数

中断向量表的地址赋值

程序

全局中断,仿真中断,关键字都在  DSP2833x_Device.h

 定时器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)
    {





    }

}
12-16 08:58