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

帮忙解答下430f5438a延时死机问题

最近遇到很怪异的问题,芯片是430F5438a,开发平台是IAR,程序运行到IAR自带延时函数__delay_cycles(2000000)的时候就死在这里,但是当中断触发来的时候,又能响应中断并执行中断里的程序,执行完后出中断后还是死在__delay_cycles(2000000)这里,这个问题不是一直发生,只是偶尔出现

灰小子:

建议提供下更多的信息,比如完整的程序。
不清楚你的时钟频率是多少,__delay_cycles(2000000)是一个延时很长的时间,有可能是这个原因

HG:

把延迟时间减小或者把时钟频率加快,会有改善么?

yun gu:

回复 灰小子:

完整程序比较多,没办法贴出来,时钟是25M

yun gu:

回复 HG:

这个延时时间本来要求可调的,参数T_CQ是通过触屏写到Flash里的,频率快不了了,25M的晶振做MCLK和SMCLK

程序段1:

void delay_100ms(int num){ while(num–) __delay_cycles(2000000);}

程序段2:

void ChuiQi(void){ ChuiQi1_ON; delay_100ms(T_CQ); //延时1.5s //delay_100ms(5); ChuiQi1_OFF;}

zhifang yang1:

回复 yun gu:

根据你的描述,我猜你这个delay 函数是在中断里面调用的吧。。。

举个例子就是比如在 GPIO上升沿触发一个 200ms延时吧,那如果GPIO上升沿来的间隔小于200ms一次,那么你就永远跑不出中断了,因为一个中断还没做完,下一个中断又来了。 中断比主程序有更高的优先级,所以CPU就永远跑不到主程序里了。

yun gu:

回复 zhifang yang1:

这个延时程序只是个子函数,主程序去调用子程序,以前在中断中使用确实会发生你说的问题,所以这次能确定没有在中断中使用,谢谢

灰小子:

回复 yun gu:

建议楼主全速运行一下。觉得可能并没有死机,只是在执行延时而已,调试时运行的慢,延时函数要好久才能执行完

赞(0)
未经允许不得转载:TI中文支持网 » 帮忙解答下430f5438a延时死机问题
分享到: 更多 (0)