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.

28027程序烧写入Flash后断电重新上电程序不运行。

现象如下:

1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;

2、板子带电拔掉仿真器,按RESET键,程序也没问题;

3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。

这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。

程序结构大致如下:

volatile uint state=1,k=0;

void main()

{

  初始化;

  开epwm2中断;

  while(state);//等待2秒结束(state变成0)

  配置epwm2至95%占空比;

for(;;){nop;}

}

interrupt

{

   k++;//中断计数

  配置D随某函数变化(改变CMPA和CMPB的值);

  if(k==2000) state=0;

  清标志位

}

D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。

  • 请问板子使用的ti的开发套件还是自己设计的呢,你的boot模式设置正确吗?

  • 板子是自己设计的,应该没问题,给上百个学生用过,都没问题。

    boot模式:GPIO34和GPIO37用示波器测,上电瞬间都为高电平,按照官方文档就是boot to Flash,这个没错。

    我在网上查,也有一些类似问题的,即连仿真器全速运行没问题,摘了仿真器重新上电就不行。他们说程序中是不是应该加一些延时?

    我试了很长时间,在不同位置加延时,无效。

  • 那检查下工程中是否缺少源文件,或者截图贴一下。

  • 现在找到问题的所在了,如下:

    我中断的算法复杂度太高了!

    以10kHz的频率进中断,也就是每100uS进一次中断。

    虽然用了IQmath库,但是我在中断里的算法需要160uS。

    这种情况算是“跑死了”么?

    除了我降低算法复杂度之外,还有什么解决方法吗?比如说我把代码拷到RAM里能以超越主频(60M)的速度运行算法吗?

  • 还有个问题哦,IQmath里没有减法,两个IQ数做减法怎么操作?

  • 遇到相似的问题,经过反复查找定位到ADC初始化函数,加入该函数后,仿真器能运行,掉电去掉仿真器后不能运行。该函数为示例源码,不应该有问题吧??请指教。

  • DELAY_US(ADC_usDELAY);         // Delay before converting ADC channels

    进一步确认是delay的原因,但是还没想明白为啥?

  • Liang Hu2 说:

    现象如下:

    1、插着仿真器,采用F28027.cmd,下载程序后,点“CPU Reset”和"运行"一切正常;

    2、板子带电拔掉仿真器,按RESET键,程序也没问题;

    3、拔掉板子电源,并重新插上电源上电,程序出问题。不是跑飞,而是第一段程序不执行。

    这个程序按照时序分为两段,皆由EPWM2输出。第一段(state=1)产生随某函数变化占空比的PWM,持续2秒之后;进入第二段(state=0),产生占空比为恒定95%的PWM。

    程序结构大致如下:

    volatile uint state=1,k=0;

    void main()

    {

      初始化;

      开epwm2中断;

      while(state);//等待2秒结束(state变成0)

      配置epwm2至95%占空比;

    for(;;){nop;}

    }

    interrupt

    {

       k++;//中断计数

      配置D随某函数变化(改变CMPA和CMPB的值);

      if(k==2000) state=0;

      清标志位

    }

    D随某函数变化的程序,断电重上电后运行不了,但是2s之后,恒定输出95%占空比的没有问题。

    1.检查codestart指向的地址是否正确,有些程序的写法是先跳转到引导程序,然后跳转到APP程序,如果你的程序没有引导程序,这样就会不能运行.

    但是为什么仿真能运行了,因为默认情况下是程序直接跳转到main函数

    2.检查是否有非法操作程序

  • 我也是这个问题 请问你解决了吗