TI中文支持网
TI专业的中文技术问题搜集分享网站

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%占空比的没有问题。

Seven Han:

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

现象如下:

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%占空比的没有问题。

Liang Hu2:

回复 Seven Han:

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

boot模式:GPIO34和GPIO37用示波器测,上电瞬间都为高电平,按照官方文档就是boot to 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%占空比的没有问题。

Seven Han:

回复 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%占空比的没有问题。

Liang Hu2:

回复 Seven Han:

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

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

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

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

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

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

现象如下:

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%占空比的没有问题。

Liang Hu2:

回复 Seven Han:

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

现象如下:

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%占空比的没有问题。

bell zhao:

回复 Seven Han:

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

现象如下:

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%占空比的没有问题。

bell zhao:

回复 Seven Han:

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

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

现象如下:

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%占空比的没有问题。

user1333144:

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、插着仿真器,采用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%占空比的没有问题。

Xiaoming Wang:

回复 bell zhao:

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

赞(0)
未经允许不得转载:TI中文支持网 » 28027程序烧写入Flash后断电重新上电程序不运行。
分享到: 更多 (0)