我的任务是用PWM输出信号用于D类放大,每个PWM周期进入PWM中断改变占空比。
首先我试了生成50kHz周期的PWM波,占空比可以按照预定的数值变化,但是发现进入中断执行操作后跳出中断回到主函数耗费了4000多个Clock周期。
后来将频率提高到100kHz,占空比没有变化,发现进入中断后不能回到主函数,分析可能和上面提到的4000多个周期有关。系统频率400M,这4000多个Clock周期就基本等于100kHz了。
请问有没有什么方法减小这个时间损耗?谢谢!
程序主要参考了starterware,基本框架如下:
interrupt void PWMEventIsr(void)
{
EHRPWMETIntClear(SOC_EHRPWM_0_REGS);
flagIsrCnt = 1;
}
while ( 1 )
{
if(flagIsrCnt==1)
{
…
data_comp = (UINT16) ( (EHRPWM_TB_CLK/PWM_FREQ*data_int)>>15 );
HWREGH(EHRPWM0_BASE + EHRPWM_CMPA) = data_comp;
…
flagIsrCnt = 0;
}
Ying Zhang4:
另外发现单步运行汇编程序时中断向量表的VEC_ENTRY 部分运行需要比较多的时钟周期,不知道正不正常
VEC_ENTRY .macro addr STW B0,*–B15 MVKL addr,B0 MVKH addr,B0 B B0 LDW *B15++,B0 NOP 2 NOP NOP .endm