大家好!
刚刚在28335的ePWM零点中断函数中插入了一个while循环做一个简单的延时程序,如下所示
interrupt void EPWM1_INT_ISR(void)
{
Uint16 delay = 200;
EPwm1Regs.ETCLR.bit.Int = 1;
IRE |= M_INT3;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
GPIO7_TEST = 1; //置GPIO7为高
while(delay != 0)
{
delay -= 1;
}
GPIO7_TEST = 0; //置GPIO7为低
}
经过编译后的汇编指令如下图:
整个while循环汇编指令数为:3*200 = 600 条;
CPU主时钟为120MHz,则计算出的执行时间为600 * 1/120000000 = 5 uS;
即整个while循环执行时间应该为5uS,
但是通过GPIO7输出的电平来看,while 循环的执行时间却是20uS(红色 2通道高电平持续时间),如下图:
这之间差别为什么这么大呢?
感觉CPU的主频不是工作在120MHz,而是工作在其4分频的频率下,即30MHz,
我将CPU主时钟频率设置为150MHz时,理论上的执行时间为4uS,但实际测出来的执行时间是16uS,总有个4倍差,这是怎么回事?
z fang:
再说明一下,程序是连接仿真器XDS100vS在DSP内部RAM中运行