摘要:本文是对学习MSP430的准备工作的记录与总结,涉及到MSP-EXP430F5529开发板和MSP430F5529LaunchPad的外部参数与特点分析、TI公司的IDE Code Composer Studio的使用、MSP430F5529的初步上手以及与ARM系列单片机(主要是Freescales公司的MK60系列)的比较。
书接上回。
1.3 CCS
1.3.1 关于这个软件(碎碎念)
当我拿到MSP430的时候,不仅是接触到了一个新的单片机,同时也意味着可能要遇到一个新的编译环境。一开始是想用IAR的,因为当初在调试MK60的时候,用的就是IAR for ARM,觉得上手以后很顺手,尤其有了仿真与调试功能以后(可能是因为之前用的Keil在线调试与Debug能力很差,更别说不是针对MCU的VS之类的了)。用IAR的时候很舒服,因为与之前的盲人摸象不同,可以通过单步调试来寻找问题的所在。因此就想继续沿用IAR吧,的确是有IAR for MSP430,TI手册上也给推荐了。那就下载安装,但是出现了不少问题,觉得应该可以解决的,但是最后还是没有找出好的解决方案……哎,只好作罢了。目光又重新转到这个弃儿CCS上,不想用他的原因不外乎陌生,对陌生的东西往往都有畏惧的心理,很多事都是如此。
下载安装不表,很简单。当然,人生若只如初见……
初见感觉编辑界面和大部分的IDE差不多,能缩进、智能排版,而且有很多的奇淫技巧,能很大程度上提高你的编程进度以及解决bug的速度,不过很多东西很需要悟性……
碎碎念到此为止,我在下面分享一些在CCS遇到一些问题和技巧在这里。
1.3.2 Tips
在展开这之前,我严重推荐一本书,叫做《LaunchPad口袋实验手册》,青岛大学老师编写的,很好,有很多新手遇到的问题在里面都有提到,能少走不少弯路强烈推荐。
1.3.2.1 Views
有很多熟悉的东西,比如Breakpoint、Register、Memories Map等等,这些东西在编程工作时能起到事半功倍的作用,比如在遇到一些对寄存器的初始化时,在这里会比以前用过得Keil甚至IAR还要好(我记得好像IAR没有看寄存器值的功能),在下一节里就会发现这里相当的有用。前提是,正确的配置,不要摆放的太乱,一定不要对Editor窗口有影响。
查看内存的分配情况,可以把表格、常量数组放到FLASH里。
1.3.2.2 选择性忽略
我试着写了几个不同的程序,然后编译,发现大部分的优化建议都是关于不要有空循环,多使用定时器这种以前编程没有注意到的问题,这个的确是要注意的,希望不要当作好的东西被大家学习。也有自己对MSP430很多东西没有摸透,所以无法针对性的来优化程序,尽可能的来发挥ULP优势。所以,如果真的遇到这些问题,希望大家能选择性的忽略吧。
1.3.2.3 Debug界面
用了一段时间的CCS,发现CCS在DEBUG的时候有点慢,这算是与IAR比起来的一个缺点吧。
1.3.2.4 例子
比如要可以看到箭头所指的地方有个Breakpoint,然后在红框里就可以看到变量值的变化情况,很EZ。
在Register里就会很快的发现是否配置错或者其他的问题!
1.4 遇到的一些问题
1.4.1 时钟的失效情况
很多时候会发现时钟的运行并不能像预想的那样去运行,这时候很有可能对程序的运行、相应的逻辑出现很多误差,这在编程中是不允许的,哪怕程序看起来可以正常的运行,但是随时都会有意外发生,尤其对精确的定时,延时来说。
1.4.1.1 DCO被置位 自动调整DCO
先说我发现的第一个问题,也在学习笔记(2)1.2.1.4 中提到过了,就是要正确配置DCO的预设值,当不正确的设置DCO的时候,在1.2.3.4中的配图中能明显看出来,同时,还有一个标志就是在刚刚提到的寄存器里可以发现问题。
我们在手册里可以看到,在正确配置DCOSEL后,UCSCTL0寄存器中DCO是自动配置的。当DCO不在合适的范围中的时候,会出现DCO全为0的情况。
1.4.1.2 注意预设值 要清零的问题
原来在看手册的时候,不太注意预设值的问题,查看寄存器也发现怎么设置值与自己预想的值不同,这时候就要仔细查看手册了。比如
有两种方法:
1.直接把这个寄存器清零后,按位或置位。
UCSCTL1 = 0;
UCSCTL1 |= DCORSEL_6;//DCORSEL原来的值是2h.
个人认为这样简单粗暴,对于大部分场合是没有问题的,但是对于有些已经设置好的位,就需要保护一下相应的值了;
2.可以按位取反后(复位),按位或置位。
UCSCTL1 &= ~ 70h;//按位与0相与.
UCSCTL1 |= DCORSEL_6;//DCORSEL原来的值是2h.
好像有点麻烦,还得看手册……
当然,设置完一定要看一下相应的寄存器,是否配置好了。
1.4.1.3 调整后用示波器观察
由于UCS的配置比较复杂,所以建议在配置完成后,不仅要看寄存器的值和现象,而且要用示波器看一下输出的是否按照预想的设定输出,对于一些对于时序/时钟要求精确的场合,这样还是非常有必要的。
1.4.1.3 重在Debug
再碎碎念一下。我个人觉得,这个Debug的过程是有点头疼,但是解决问题的快感也是很多事难以比拟的。尤其是在Debug的过程中,还会出现一些新的问题,可以通过这个来更加深入你要学习的东西,不断的复习,不断的吸取新知识,岂不快哉?
1.5 关于分频的一些测试
基本上对于时钟的基本配置和常常会出现的问题在上面已经说的差不多了。下面要说的是分频,对于时钟配置也是挺常见的,尤其是在后面的TimerA(定时器)里,用到的更多。在这里也稍微展开一点把。
1.5.1 对时钟来源进行分频
可以看出,分频精度还是可以的。而且超调与振荡也稍微小了一点点。
1.5.2调节FLLD
上图是调整FLLD = 1时,对之前6.31MHz进行倍频的波形,看的出来,上升沿下降沿都不是多好看了。估计是因为软件调制的原因吧。
1.5.3 DCO极限测试
我想,软件调制应该是有个极限的吧?手册上写是25MHz,但是我不断调整相应的系数,会不会有奇迹出现呢?先放结论,不会。下面看实验结果:
上图是FLLN = 7 ,DCOSEL = 5时的波形,已经有点醉了。
测试到这时候就结束了……
1.5 后记
写到这终于写完了,说不出现在是累还是终于可以舒一口气了……
非常感谢您的阅读,若有疑问或错误,请留言指出,感激不尽!
参考书籍与参考帖子:
《MSP430x5xx and MSP430x5xx Family User's Guide》
《MSP430单片机原理与应用 -MSP430F5xx/6xx系列单片机入门提高与开发》(任保宏 徐科军 编著)
《LaunchPad口袋实验平台 MSP-EXP430G2篇》(傅强 杨艳 编著)
http://bbs.eeworld.com.cn/thread-458079-1-1.html
http://www.aiuxian.com/article/p-1863585.html
http://blog.csdn.net/girlkoo/article/details/9047191