This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

生成SPWM代码,仿真ok,烧写到FLASH后频率变低了



生成SPWM代码,仿真ok,烧写到FLASH后频率变低了。仿真时是50Hz,用示波器其看波形很好的正弦波形,但是烧写到flash中后,发现频率变低了, 还不到25HZ,使用的中断是定时器1下溢中断,中断频率10k,烧写到DSP中后观察,该中断频率没有问题,也是10k,和仿真时候是一样的。这是为什么呢?用的芯片是2812.

  • huaiji,

    仿真跟Flash运行的区别主要是一个是跑在RAM,一个是跑在flash上,代码如果跑在flash上,运行速度会变慢。

    建议:

    1,正确初始化flash,参考http://www.ti.com/mcu/docs/mcuorphan.tsp?contentId=67005 中F281x C/C++ Header Files and Peripheral Examples flash例程代码。

    2. 把相关算法放到flash中运行。

    Eric

  • Eric 老师您好! 我的开发板没有外扩FLASH,而是烧写在DSP2812自带的FLASH中,也是这个样子么?

                                 还有就是同一个程序中CPUtimer中断时5ms,仿真与烧写后结果一样的,可是为啥定时器1中断仿真与烧写运行速度就不一样呢,难道说是速度快的原因么?您说的代码运行在FLASH上会变慢,可是我在示波器观察定时器1下溢中断没有变慢,我进行SPWM计算用到的i_temp++代码,当i_temp>200,就清零,这样200*0.1ms=20ms,正好是50hz的频率,每次进入定时器1下溢中断,i_temp加1,我理解是,如果定时器1下溢中断是好的,每个中断周期i_temp加1,那么最后频率就应该是50hz的啊,实际上烧写后不是50hz,那么就是i_temp加1到200后没停止,而是到了一个更大的数,比如512才清零。。。。到这里我就想不清了。。。。附件是我的工程代码,如果您有时间方便的话,麻烦指点迷津!谢谢!

        这个代码里面的初始化FLASH的代码是我晚上才加的,编译通过了,仿真运行也没问题,下载后,原来好使用的串口也不工作了。下载过程中有个提示,我截了图,也发过来跟您参考。我理解好像还得写个内存拷贝的函数什么的。

    谢谢您了!

    spwm_of_huaiji.zip