wang112411 发表于 2013-8-8 16:49 
我链接了开发板和仿真器,调试发现中断进去了,是不是因为定时器计数是十六进制计数的,而
f=2343750.0/ ...
我又测试了一下,发现是中断没进去,但是不知道那出问题了,为什么中断进不去呢,EV模块的寄存器设置如下:
void InitEv(void)
{
EvaRegs.T1CON.bit.TMODE=1; //连续增减模式
EvaRegs.T1CON.bit.TPS=1; //2分频
EvaRegs.T1CON.bit.TENABLE=0; //暂时禁止T1计数
EvaRegs.T1CON.bit.TCLKS10=0; //使用内部时钟
EvaRegs.T1CON.bit.TECMPR=1; //使用定时器的比较功能
EvaRegs.T1PR=0x493E; //1khz的PWM,周期为1ms
EvaRegs.T1CNT=0; //设置初值为0
EvaRegs.COMCONA.bit.CENABLE=1; //使能比较单元的比较操作
EvaRegs.COMCONA.bit.FCOMPOE=1; //全比较输出,PWM1-6引脚由相应的比较逻辑驱动
EvaRegs.COMCONA.bit.CLD=2; //发生比较立即产生重新装载
EvaRegs.ACTR.all=0x0002; //PWM1低电平有效
EvaRegs.CMPR1=0x2BF2; //PWM1占空比为40%
EvaRegs.T2CON.bit.TMODE=2; //连续增计数模式
EvaRegs.T2CON.bit.TPS=5; //进行64分频
EvaRegs.T2CON.bit.TENABLE=0; //暂时禁止T2的计数操作
EvaRegs.T2CON.bit.TCLKS10=0; //使用内部时钟
EvaRegs.T2PR=0xFFFF; //给T2定时器设终值
EvaRegs.T2CNT=0; //设置计数初值为0
EvaRegs.CAPCON.all=0; //捕获控制寄存器
EvaRegs.CAPCON.bit.CAPQEPN=1; //使能捕获功能
EvaRegs.CAPCON.bit.CAP1EDGE=1; //检测上升沿
EvaRegs.CAPCON.bit.CAP12TSEL=0; //设置捕获单元1的定时器
EvaRegs.CAPFIFO.bit.CAP1FIFO=0; //CAP1FIFO为空
EvaRegs.EVAIMRC.bit.CAP1INT=1; //使能捕获单元1的捕获中断
EvaRegs.EVAIFRC.bit.CAP1INT=1; //清除捕获单元1的捕获中断标志位
}
主函数部分:
#include"DSP28_Device.h"
#include"DSP28_GlobalPrototypes.h"
unsigned int capnum1,capnum2,temp;
float f;
void main(void)
{
InitSysCtrl();
DINT;
IER=0x0000;
IFR=0x0000;
InitPieCtrl();
InitPieVectTable();
InitGpio();
InitEv();
FLAG = 0;
capnum1 = 0;
capnum2=0;
PieCtrl.PIEIER3.bit.INTx3=1;//使能PIE中断,T1定时器中断CAPPINT1位于INT3.5
IER|=M_INT3;//开CPU中断INT3,中断使能寄存器的的第二位
EINT;
ERTM;
EvaRegs.T1CON.bit.TENABLE=1; //使能定时器T1的计数操作
EvaRegs.T2CON.bit.TENABLE=1; //使能定时器T2的计数操作
while(1);
}
|