|
此内容由EEWORLD论坛网友tiankai001原创,如需转载或用于商业用途需征得作者同意并注明出处
msp430单片机开发实录(24)
现象:
已经验证过,并已批量生产的产品,因为需要添加功能,就直接copy后在原程序基础上进行了更改,但是仿真时却发现程序走到某个地方后就走不下去了,再具体跟踪,发现是在进行系统时钟配置时,程序停在时钟源寄存器选择后,配置系统内核电压的函数里。
试验:
因为程序是验证过的,更改的是一些具体功能,系统时钟的配置未作任何改动。所以第一怀疑对象是电路的问题,具体怀疑电路上的晶振电路,检查后没有发现这处电路有问题。程序就停在下面代码中的SetVCore(PMMCOREV_3)这个函数里。检查函数,也没发现问题。
因为之前碰到这类问题基本都是硬件电路部分的时钟电路出现问题,现在检查没发现电路的问题,思路一度出现停顿。
考虑到这个项目的电路板与之前的电路板一样,就把之前的未更改的程序刷一下试试,结果一切正常,不会出现程序走不下去的现象。那么问题还是出现在这个新更改的程序中?等等,仿真的时候,除了程序,还要考虑仿真环境下芯片的选型、仿真器选择等配置,会不会是仿真环境配置出了问题?
- //XT1由晶振产生,
- UCSCTL6 &= ~(XT1OFF); // 打开XT1
- UCSCTL6 |= XCAP_0; // 负载电容
-
- __delay_cycles(100000);
- SetVCore(PMMCOREV_3);
复制代码
有了这个思路,就查看仿真环境配置,结果还真发现了问题,在仿真器的选择上,选择的是“软仿真”,但是,上面的代码中,XT1时钟选择的是外部晶振,所以问题就很明显了:选择的软仿真,但是时钟选择的是外部晶振,那肯定会导致在进行芯片内核配置时无法获得正确的时钟状态,所以程序就会一直停在等待正确的状态到来这句话里。
验证:
将仿真器配置选择为使用硬件仿真器,程序就顺利地继续向先执行了。
备注:
msp430单片机的的“软仿真”和“硬仿真”的区别有一个简单粗暴的判断方法:硬件仿真的时候,因为要先把程序刷到芯片上,而软件仿真则不需要,所以从点击开始仿真到进入仿真环境,硬件仿真需要花费较长时间,而软件仿真则几乎不花费时间。
|
|