永发信息网

tms320x2812有几个中断定时器

答案:2  悬赏:10  手机版
解决时间 2021-01-28 08:41
  • 提问者网友:战魂
  • 2021-01-27 14:24
tms320x2812有几个中断定时器
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-01-27 14:58
F28x有3个32位定时器CPU(TIMER0/1/2),其中CPU定时器1及定时器2被保留,用做DSP BIOS或其他实时操作系统,Timer0就是用户可以使用的了。
一、如何启动Timer0呢?
(1)配置定时器0时钟(DSP281X_SysCtrl.c)
void InitPll(Uint16 val)
{
volatile Uint16 iVol;

if (SysCtrlRegs.PLLCR.bit.DIV != val)
{
EALLOW;
SysCtrlRegs.PLLCR.bit.DIV = val;
EDIS;
DisableDog();
for(iVol= 0; iVol< ( (131072/2)/12 ); iVol++)
{

}
}
}

(2)设置定时器分频值(DSP281x_CpuTimers.c)
CpuTimer0Regs.TPR.all = 0;
CpuTimer0Regs.TPRH.all = 0;
然后根据:定时器时钟频率=SYSCLKOUT/(TDDRH:TDDR+1)可以很容易算出定时器的时钟。

(3)设置周期寄存器(PRDH:PRD)
此项可通过ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)中的Freq与Period完成。两个参数的积便是定时器的周期。

(4)使能定时器中断
通过以下程序使能
Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt
在主程序里还需要以下程序进行中断配置
IER |= M_INT1; //M_INT1为0x0001 使能Timer0的INT1中断
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
EINT;
ERTM;

(5)启动CPU定时器0
Timer->RegsAddr->TCR.bit.TSS = 1;// 1 = Stop timer, 0 = Start/Restart Timer

二、Timer0中断设置
(1)定时器0中断的基本条件
要启动定时器且使能定时器中断

(2)确定中断向是的入口地址
主要是通过DSP281x_PieVect.c文件中的InitPieVectTable()函数实现。

(3)使能PIE级及CPU级中断向量
(4)中断服务程序
(5)中断服务程序及中断初始化函数声明
全部回答
  • 1楼网友:北城痞子
  • 2021-01-27 16:24
evaregs.t2pr = pr2[k]; evaregs.t2cnt = 0xffff;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯