ARM Cortex-M0调试日志(1)

这几天在基于ARM Cortex M0的板子上调试格雷码测试程序,板子的基本构成是由MBus总线供电,通过tss721通信,由721给M0提供3.3 v工作电压,我在调试的时候通过M0的一个IO脚串接一个100欧的电阻,再接一个1.2v的led指示灯到地。

        程序中使用了一个外部IO脚下降沿触发的外部中断,我在中断中设置一个全局标志供中断外其他部分使用,进入中断就点亮led,退出就关掉led以此来判断程序是否进入中断。程序设计中只需要进入一次中断,调试中一个奇怪的现象发生,led灯不断的闪烁,表示不断的进出中断程序,但是中断里面设置的全局变量确没有生效,而且我进入一次中断后就关闭了中断,按理后续就不应该再进入中断。

        于是就开始检查程序是不是那个地方有问题,是不是没有清除中断标志,甚至怀疑是不是编译器的问题,我就用一个3.6v的电池直接给M0供电,进行程序的调试,程序并没有问题,只进入一次中断,全局变量起作用。我觉得可能不是软件的问题,问题可能出在电源上,但我调试的板子至少来说是一个设计得比较好,而且相对成熟的产品,如果是电源的问题不可能到现在还没有发现。我就用示波器测试了tss721给M0的电源输出,发现输出的是一个方波,而不是一个稳定的3.3v,问题就在这里了,这样的一个方波电源给M0供电导致M0不断的重启,就是看到的led灯闪烁的现象,但这是一个电路上设计成熟的产品,应该不是电路设计上的问题,现在唯一的问题就是我添加的外围电路问题了,问题也确实是出在添加的外围电路上,我添加的led灯上消耗了大约20mA的电流,而tss721能提供的最大电流也就50mA左右,M0正常工作也要消耗几十毫安的电流,这就超过了721的负载,所以就是看到的现象721不能输出稳定的3.3v电压而是一个方波。

        格雷码程序的问题看起来是解决了,但在做老化测试的时候又发现一个问题,MBus总线给721供电,在快速切换电源极性的时候老化程序的指示灯显示不对,但慢速切换的时候又没有问题,现象跟做格雷码程序有些类似,难道又是电源引起的问题,还是是中断程序的问题,经过分析发现时721提供3.3v电源引脚上有电容,在Mbus总线电源极性快速切换的时候没有完全放电,这个时候M0是正常工作的,但是外部的IO中断引脚确产生了一个下降沿导致进入了中断程序,而我的中断程序设计里面又是在动态的检测串口波特率,没有退出,导致老化测试部分程序没有执行,通过修改中断程序问题解决。

 

一点心得:嵌入式软件开发是一项软硬件知识的综合应用,如果能完全理解了电路设计就可以设计出优秀的软件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值