MSP430学习笔记(3)

摘要:本文是对学习MSP430的准备工作的记录与总结,涉及到MSP-EXP430F5529开发板和MSP430F5529LaunchPad的外部参数与特点分析、TI公司的IDE Code Composer Studio的使用、MSP430F5529的初步上手以及与ARM系列单片机(主要是Freescales公司的MK60系列)的比较。

书接上回。

1.3 CCS

1.3.1 关于这个软件(碎碎念)
MSP430学习笔记(3)_第1张图片
CCS

当我拿到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
MSP430学习笔记(3)_第2张图片
CCS Views

有很多熟悉的东西,比如Breakpoint、Register、Memories Map等等,这些东西在编程工作时能起到事半功倍的作用,比如在遇到一些对寄存器的初始化时,在这里会比以前用过得Keil甚至IAR还要好(我记得好像IAR没有看寄存器值的功能),在下一节里就会发现这里相当的有用。前提是,正确的配置,不要摆放的太乱,一定不要对Editor窗口有影响。


MSP430学习笔记(3)_第3张图片
RAM、ROM分配

查看内存的分配情况,可以把表格、常量数组放到FLASH里。

1.3.2.2 选择性忽略
MSP430学习笔记(3)_第4张图片
Advice - 1

完成程序的编写后,迫不及待地编译后,What the Fuck,怎么这么多Advice,对于以往使用keil出现一个Warning来说,有点吓坏了,再仔细一看,是一些关于ULP的优化建议,我试着每次都去优化,但是每次把上个问题优化好,新的问题就出现了,到最后发现不会影响我程序的运行,那就偷个懒吧。
MSP430学习笔记(3)_第5张图片
Advice - 2

我试着写了几个不同的程序,然后编译,发现大部分的优化建议都是关于不要有空循环,多使用定时器这种以前编程没有注意到的问题,这个的确是要注意的,希望不要当作好的东西被大家学习。也有自己对MSP430很多东西没有摸透,所以无法针对性的来优化程序,尽可能的来发挥ULP优势。所以,如果真的遇到这些问题,希望大家能选择性的忽略吧。

1.3.2.3 Debug界面

用了一段时间的CCS,发现CCS在DEBUG的时候有点慢,这算是与IAR比起来的一个缺点吧。

进入Debug界面,感觉不错,界面挺友好的,而且编辑感挺强,单步调试、断点这些基础的功能都有的,用起来也挺方便。我也暂时没有用到的更高大上的功能,起码这些功能很不错。大概TI公司逐次的迭代和优化,到了CCS第六代,终于优化的差不多了吧。
MSP430学习笔记(3)_第6张图片
Debug - 1
可以看到我的Debug界面的布置,自我感觉这样还是可以的,因为最近看寄存器比较多。如果需要针对变量的话,也可以把Expression放在显眼位置。
1.3.2.4 例子
MSP430学习笔记(3)_第7张图片
eg - 1

比如要可以看到箭头所指的地方有个Breakpoint,然后在红框里就可以看到变量值的变化情况,很EZ。

比如我配置UCS时钟,配置各个时钟的情况
MSP430学习笔记(3)_第8张图片
eg - 2

在Register里就会很快的发现是否配置错或者其他的问题!

1.4 遇到的一些问题

1.4.1 时钟的失效情况

很多时候会发现时钟的运行并不能像预想的那样去运行,这时候很有可能对程序的运行、相应的逻辑出现很多误差,这在编程中是不允许的,哪怕程序看起来可以正常的运行,但是随时都会有意外发生,尤其对精确的定时,延时来说。

1.4.1.1 DCO被置位 自动调整DCO

先说我发现的第一个问题,也在学习笔记(2)1.2.1.4 中提到过了,就是要正确配置DCO的预设值,当不正确的设置DCO的时候,在1.2.3.4中的配图中能明显看出来,同时,还有一个标志就是在刚刚提到的寄存器里可以发现问题。


MSP430学习笔记(3)_第9张图片
Problem - 1

我们在手册里可以看到,在正确配置DCOSEL后,UCSCTL0寄存器中DCO是自动配置的。当DCO不在合适的范围中的时候,会出现DCO全为0的情况。
MSP430学习笔记(3)_第10张图片
Problem - 2
根据我的经验,遇到这种情况,就很难输出想要的时钟了。并且你会发现在之前提到的SFRIFG1寄存器中,也会有异常的情况发生。
MSP430学习笔记(3)_第11张图片
Problem - 3
MSP430学习笔记(3)_第12张图片
Problem - 4
OFIFG置位,查找根源就是DCOFFG出现了置位。如果学会用查看寄存器来Debug,是不是问题的解决速度就会加快一点点呢 :)。
1.4.1.2 注意预设值 要清零的问题

原来在看手册的时候,不太注意预设值的问题,查看寄存器也发现怎么设置值与自己预想的值不同,这时候就要仔细查看手册了。比如

MSP430学习笔记(3)_第13张图片
Problem - 5
FLLD和FLLN的复位值不是0时,要记得 清零后再设置,否则用按位或置位的话,会出现问题。
有两种方法:
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 对时钟来源进行分频
MSP430学习笔记(3)_第14张图片
DIV - 1

上图是关于分频系数的配置,我们调整DIVA的值,通过示波器来看输出时钟的变化。变量仅仅是DIVA的值,其他值保持相同。
MSP430学习笔记(3)_第15张图片
DIVA = 0
MSP430学习笔记(3)_第16张图片
DIVA = 1
MSP430学习笔记(3)_第17张图片
DIVA = 8

可以看出,分频精度还是可以的。而且超调与振荡也稍微小了一点点。

1.5.2调节FLLD
MSP430学习笔记(3)_第18张图片
FLLD - 1

调节FLLD,就是调节DCODIV的输出,当时钟来源来自DCODIV的时候,调整FLLD,也就是调整了相应的系数,就可以方便的调节输出时钟频率。
MSP430学习笔记(3)_第19张图片
FLLD - 2

上图是调整FLLD = 1时,对之前6.31MHz进行倍频的波形,看的出来,上升沿下降沿都不是多好看了。估计是因为软件调制的原因吧。

1.5.3 DCO极限测试

我想,软件调制应该是有个极限的吧?手册上写是25MHz,但是我不断调整相应的系数,会不会有奇迹出现呢?先放结论,不会。下面看实验结果:


MSP430学习笔记(3)_第20张图片
OverClock - 1

上图是DCO来源来自XT2 4MHz高频晶振,FLLN = 3 DCOSEL = 5时的波形。
MSP430学习笔记(3)_第21张图片
OverClock - 2
上图是FLLN = 4时的情况,不过DCOSEL = 6了。
MSP430学习笔记(3)_第22张图片
OverClock - 3
MSP430学习笔记(3)_第23张图片
OverClock - 4

上图是FLLN = 7 ,DCOSEL = 5时的波形,已经有点醉了。


MSP430学习笔记(3)_第24张图片
Overclock - 4
测试的极限情况,FLLN = 7 ,DCOSEL = 7,波形畸变的太厉害了,已经不能称之为方波了,居然有点正弦波的感觉……

测试到这时候就结束了……

1.5 后记

写到这终于写完了,说不出现在是累还是终于可以舒一口气了……

通过正确的配置时钟,我用MSP430也完成了一个设计,看着手上的小东西,也有了相应的说明书以及报告,心里还是有成就感的。写下了一点学习笔记,希望能和大家分享我的学习之路,分析与解决我遇到困难,能给大家更多的启发。
MSP430学习笔记(3)_第25张图片
Horse

非常感谢您的阅读,若有疑问或错误,请留言指出,感激不尽!

参考书籍与参考帖子:
《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

你可能感兴趣的:(MSP430学习笔记(3))