帮忙分析下,这样设置T0有问题么?
/*****************头文件********************/
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
#include "DSP28_CpuTimers.h"
/****************端口宏定义**************/
//unsigned int * EXT_RAM = (unsigned int *) 0x100000;
unsigned int * LED3 = (unsigned int *) 0x4028;
/****************常量宏定义*****************/
#define LED1_ON GpioDataRegs.GPFDAT.bit.GPIOF14=1
#define LED1_OFF GpioDataRegs.GPFDAT.bit.GPIOF14=0
/***************全局变量定义****************/
Uint16 nCount=0;
Uint16 a=1;
/****************函数声明*******************/
interrupt void Cpu_time0_isr();
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:主函数 */
/*------------------------------------------*/
void main(void)
{
InitSysCtrl(); // 系统初始化子程序,在DSP28_sysctrl.c
InitGpio();
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable(); //使能PIE向量
IER=0x0000;
IFR=0x0000;
EALLOW;
PieVectTable.TINT0=&Cpu_time0_isr;
EDIS;
PieCtrl.PIECRTL.bit.ENPIE = 1;
InitCpuTimers0();
PieCtrl.PIEIER1.bit.INTx7=1;
IER |=M_INT1;
//////////////////////////////////////////// ConfigCpuTimer(&CpuTimer0, 150, 1000);
StartCpuTimer0();
EINT;
//////////////////////////////////////////////////////////////////// ERTM;
PieCtrl.PIEACK.all=PIEACK_GROUP1;//应答标志清0
while(1)
{
if(nCount==0)
{
LED1_ON;
}
else
LED1_OFF;
}
}
interrupt void Cpu_time0_isr()
{
CpuTimer0Regs.TCR.bit.TIF = 1;
ReloadCpuTimer0();
if(a==0)
{
nCount=~nCount;
}
a++;
a%=200;
PieCtrl.PIEACK.all=PIEACK_GROUP1;
}
//声明过的,运行没报错,但现象不对
void InitCpuTimers0(void)
{
CpuTimer0.RegsAddr = &CpuTimer0Regs; //使得CpuTimer0.RegsAddr 指向定时器寄存器
CpuTimer0Regs.PRD.all = 0xffffffff ; //初始化CpuTimer0的周期寄存器
CpuTimer0Regs.TIM.all = 0;
CpuTimer0Regs.TPR.all = 0; //初始化定时器预定标计数器
CpuTimer0Regs.TPRH.all = 0; //系数为0;
CpuTimer0Regs.TCR.bit.SOFT = 1; //
CpuTimer0Regs.TCR.bit.FREE = 1; //自由运行,不受断点影响。
CpuTimer0Regs.TCR.bit.TSS = 1; //停止定时器
CpuTimer0Regs.TCR.bit.TRB = 1; //将周期寄存器PRD中的值装入计数器寄存器TIM中
CpuTimer0Regs.TCR.bit.TIE=1; //使能定时器0的中断
CpuTimer0.InterruptCount = 0; //初始化定时器中断计数器
} |