问题(2)关于定时器的问题
我打开定时器,带仿真器运行汇编程序,在程序反汇编后,在C2000调试环境下检查,每执行一条指令,定时器增加8(有时候9,不完全一样),也就是说,每条指令占用了8个时钟周期.查指令手册,大部分指令执行时间为2—3个时钟周期.也就是说,我的定时器在每执行一条指令,增加一般为2—3,或者1才对,但现在完全不同.
我用的是定时器1的下溢中断,T1CON设置为:#0000,1000,0100,0010B,也就是说1分频,那么计数器加1时间为25ns
具体情况如下:
设置为定时器下溢中断,F2407的DSP,内部时钟40M,那么指令周期为25ns.
我设置定时器下溢中断周期为2000,也就是说,计数器从0加到2000,再减到0,我进中断一次.
那么,我进中断一次的时间为:4000*25ns=100000ns=100us=0.1ms(载波频率设置为10K,所以我的PWM周期为0.1ms,也就是,每隔0.1ms我必须进中断计算一次PWM周期,这样我就能保证在一秒钟内产生10000个PWM脉冲)
在中断里,我执行SVPWM算法,用汇编(这是效率最高的),程序反汇编后,我检查程序执行完SVPWM算法一共有200条左右语句.也就是说,这200条语句必须完成,否则我的算法就无法实现了.
然后我数了下计数器,发现计数器已经走了2000左右,也就是我执行200条语句的算法里面,计数器走2000.计数器从0走到2000,在从2000走到0,那么又要执行下一次中断了.
这样一算,我的CPU中50%的资源被SVPWM算法占用了.
如果根据DSP的技术指标,我的算法只会占用CPU中20%——50%的资源.