TMS320F28335: 利用cpu time 0 中断产生重复双脉冲波形,实测电平与编程电平相反且第一个双脉冲波形失真

Part Number: TMS320F28335

以下为cpu time 0初始化,GPIO初始化,cpu time 0中断代码

//定时器0初始化
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.TINT0 = &cpu_timer0_isr;//定位CPU Timer 0中断
EDIS; // This is needed to disable write to EALLOW protected registers
InitCpuTimers(); //初始化 Cpu Timers
// CPU Timer 0
//初始化计数值
ConfigCpuTimer(&CpuTimer0,150,50);
//Counter = 1500*(1/150MHz)=10us
//关闭定时器0功能
CpuTimer0Regs.TCR.bit.TSS=1;

//IO电平初始化
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0 = GPIO0 不复用
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//使能GPIO上拉电阻
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;//设置GPIO方向为输出
EDIS;
GpioDataRegs.GPACLEAR.bit.GPIO0=1;//低电平

//cpu time 0中断代码

__interrupt void cpu_timer0_isr(void)
{

switch(ii)
{
case 1:
//周期寄存器值配置
//temp = (long) (Freq * Period)
//Timer = temp - 1;
//0.1us单位
GpioDataRegs.GPASET.bit.GPIO0 = 1;//高电平
CpuTimer0Regs.PRD.all=15*A-1;
//设置Timer0的预标计数器值为0
CpuTimer0Regs.TPR.all =0;
CpuTimer0Regs.TPRH.all=0;
break;
case 2:

GpioDataRegs.GPACLEAR.bit.GPIO0=1;//低电平
CpuTimer0Regs.PRD.all=15*B-1;
//设置Timer0的预标计数器值为0
CpuTimer0Regs.TPR.all =0;
CpuTimer0Regs.TPRH.all=0;
break;
case 3:

GpioDataRegs.GPASET.bit.GPIO0 = 1;//高电平
CpuTimer0Regs.PRD.all=15*C-1;
//设置Timer0的预标计数器值为0
CpuTimer0Regs.TPR.all =0;
CpuTimer0Regs.TPRH.all=0;
break;
default:

GpioDataRegs.GPACLEAR.bit.GPIO0=1;//低电平
CpuTimer0Regs.PRD.all=150*5-1;
//设置Timer0的预标计数器值为0
CpuTimer0Regs.TPR.all =0;
CpuTimer0Regs.TPRH.all=0;
ii=0;
break;
}

ii=ii+1;

EALLOW;
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1; //清除中断标志位
EDIS;

}