MSP430學習筆記(3)

摘要:本文是對學習MSP430的準備工作的記錄與總結,涉及到MSP-EXP430F5529開發(fā)板和MSP430F5529LaunchPad的外部參數(shù)與特點分析、TI公司的IDE Code Composer Studio的使用、MSP430F5529的初步上手以及與ARM系列單片機(主要是Freescales公司的MK60系列)的比較。

書接上回。

1.3 CCS

1.3.1 關于這個軟件(碎碎念)
CCS

當我拿到MSP430的時候,不僅是接觸到了一個新的單片機,同時也意味著可能要遇到一個新的編譯環(huán)境。一開始是想用IAR的,因為當初在調試MK60的時候,用的就是IAR for ARM,覺得上手以后很順手,尤其有了仿真與調試功能以后(可能是因為之前用的Keil在線調試與Debug能力很差,更別說不是針對MCU的VS之類的了)。用IAR的時候很舒服,因為與之前的盲人摸象不同,可以通過單步調試來尋找問題的所在。因此就想繼續(xù)沿用IAR吧,的確是有IAR for MSP430,TI手冊上也給推薦了。那就下載安裝,但是出現(xiàn)了不少問題,覺得應該可以解決的,但是最后還是沒有找出好的解決方案……哎,只好作罷了。目光又重新轉到這個棄兒CCS上,不想用他的原因不外乎陌生,對陌生的東西往往都有畏懼的心理,很多事都是如此。
下載安裝不表,很簡單。當然,人生若只如初見……
初見感覺編輯界面和大部分的IDE差不多,能縮進、智能排版,而且有很多的奇淫技巧,能很大程度上提高你的編程進度以及解決bug的速度,不過很多東西很需要悟性……
碎碎念到此為止,我在下面分享一些在CCS遇到一些問題和技巧在這里。

1.3.2 Tips

在展開這之前,我嚴重推薦一本書,叫做《LaunchPad口袋實驗手冊》,青島大學老師編寫的,很好,有很多新手遇到的問題在里面都有提到,能少走不少彎路強烈推薦。

1.3.2.1 Views
CCS Views

有很多熟悉的東西,比如Breakpoint、Register、Memories Map等等,這些東西在編程工作時能起到事半功倍的作用,比如在遇到一些對寄存器的初始化時,在這里會比以前用過得Keil甚至IAR還要好(我記得好像IAR沒有看寄存器值的功能),在下一節(jié)里就會發(fā)現(xiàn)這里相當?shù)挠杏谩G疤崾牵_的配置,不要擺放的太亂,一定不要對Editor窗口有影響。


RAM、ROM分配

查看內存的分配情況,可以把表格、常量數(shù)組放到FLASH里。

1.3.2.2 選擇性忽略
Advice - 1

完成程序的編寫后,迫不及待地編譯后,What the Fuck,怎么這么多Advice,對于以往使用keil出現(xiàn)一個Warning來說,有點嚇壞了,再仔細一看,是一些關于ULP的優(yōu)化建議,我試著每次都去優(yōu)化,但是每次把上個問題優(yōu)化好,新的問題就出現(xiàn)了,到最后發(fā)現(xiàn)不會影響我程序的運行,那就偷個懶吧。
Advice - 2

我試著寫了幾個不同的程序,然后編譯,發(fā)現(xiàn)大部分的優(yōu)化建議都是關于不要有空循環(huán),多使用定時器這種以前編程沒有注意到的問題,這個的確是要注意的,希望不要當作好的東西被大家學習。也有自己對MSP430很多東西沒有摸透,所以無法針對性的來優(yōu)化程序,盡可能的來發(fā)揮ULP優(yōu)勢。所以,如果真的遇到這些問題,希望大家能選擇性的忽略吧。

1.3.2.3 Debug界面

用了一段時間的CCS,發(fā)現(xiàn)CCS在DEBUG的時候有點慢,這算是與IAR比起來的一個缺點吧。

進入Debug界面,感覺不錯,界面挺友好的,而且編輯感挺強,單步調試、斷點這些基礎的功能都有的,用起來也挺方便。我也暫時沒有用到的更高大上的功能,起碼這些功能很不錯。大概TI公司逐次的迭代和優(yōu)化,到了CCS第六代,終于優(yōu)化的差不多了吧。
Debug - 1
可以看到我的Debug界面的布置,自我感覺這樣還是可以的,因為最近看寄存器比較多。如果需要針對變量的話,也可以把Expression放在顯眼位置。
1.3.2.4 例子
eg - 1

比如要可以看到箭頭所指的地方有個Breakpoint,然后在紅框里就可以看到變量值的變化情況,很EZ。

比如我配置UCS時鐘,配置各個時鐘的情況
eg - 2

在Register里就會很快的發(fā)現(xiàn)是否配置錯或者其他的問題!

1.4 遇到的一些問題

1.4.1 時鐘的失效情況

很多時候會發(fā)現(xiàn)時鐘的運行并不能像預想的那樣去運行,這時候很有可能對程序的運行、相應的邏輯出現(xiàn)很多誤差,這在編程中是不允許的,哪怕程序看起來可以正常的運行,但是隨時都會有意外發(fā)生,尤其對精確的定時,延時來說。

1.4.1.1 DCO被置位 自動調整DCO

先說我發(fā)現(xiàn)的第一個問題,也在學習筆記(2)1.2.1.4 中提到過了,就是要正確配置DCO的預設值,當不正確的設置DCO的時候,在1.2.3.4中的配圖中能明顯看出來,同時,還有一個標志就是在剛剛提到的寄存器里可以發(fā)現(xiàn)問題。


Problem - 1

我們在手冊里可以看到,在正確配置DCOSEL后,UCSCTL0寄存器中DCO是自動配置的。當DCO不在合適的范圍中的時候,會出現(xiàn)DCO全為0的情況。
Problem - 2
根據(jù)我的經(jīng)驗,遇到這種情況,就很難輸出想要的時鐘了。并且你會發(fā)現(xiàn)在之前提到的SFRIFG1寄存器中,也會有異常的情況發(fā)生。
Problem - 3
Problem - 4
OFIFG置位,查找根源就是DCOFFG出現(xiàn)了置位。如果學會用查看寄存器來Debug,是不是問題的解決速度就會加快一點點呢 :)。
1.4.1.2 注意預設值 要清零的問題

原來在看手冊的時候,不太注意預設值的問題,查看寄存器也發(fā)現(xiàn)怎么設置值與自己預想的值不同,這時候就要仔細查看手冊了。比如

Problem - 5
FLLD和FLLN的復位值不是0時,要記得清零后再設置,否則用按位或置位的話,會出現(xiàn)問題。
有兩種方法:
1.直接把這個寄存器清零后,按位或置位。

UCSCTL1 = 0; 
UCSCTL1 |= DCORSEL_6;//DCORSEL原來的值是2h.

個人認為這樣簡單粗暴,對于大部分場合是沒有問題的,但是對于有些已經(jīng)設置好的位,就需要保護一下相應的值了;
2.可以按位取反后(復位),按位或置位。

UCSCTL1 &= ~ 70h;//按位與0相與.
UCSCTL1 |= DCORSEL_6;//DCORSEL原來的值是2h.

好像有點麻煩,還得看手冊……
當然,設置完一定要看一下相應的寄存器,是否配置好了。

1.4.1.3 調整后用示波器觀察

由于UCS的配置比較復雜,所以建議在配置完成后,不僅要看寄存器的值和現(xiàn)象,而且要用示波器看一下輸出的是否按照預想的設定輸出,對于一些對于時序/時鐘要求精確的場合,這樣還是非常有必要的。

1.4.1.3 重在Debug

再碎碎念一下。我個人覺得,這個Debug的過程是有點頭疼,但是解決問題的快感也是很多事難以比擬的。尤其是在Debug的過程中,還會出現(xiàn)一些新的問題,可以通過這個來更加深入你要學習的東西,不斷的復習,不斷的吸取新知識,豈不快哉?

1.5 關于分頻的一些測試

基本上對于時鐘的基本配置和常常會出現(xiàn)的問題在上面已經(jīng)說的差不多了。下面要說的是分頻,對于時鐘配置也是挺常見的,尤其是在后面的TimerA(定時器)里,用到的更多。在這里也稍微展開一點把。

1.5.1 對時鐘來源進行分頻
DIV - 1

上圖是關于分頻系數(shù)的配置,我們調整DIVA的值,通過示波器來看輸出時鐘的變化。變量僅僅是DIVA的值,其他值保持相同。
DIVA = 0
DIVA = 1
DIVA = 8

可以看出,分頻精度還是可以的。而且超調與振蕩也稍微小了一點點。

1.5.2調節(jié)FLLD
FLLD - 1

調節(jié)FLLD,就是調節(jié)DCODIV的輸出,當時鐘來源來自DCODIV的時候,調整FLLD,也就是調整了相應的系數(shù),就可以方便的調節(jié)輸出時鐘頻率。
FLLD - 2

上圖是調整FLLD = 1時,對之前6.31MHz進行倍頻的波形,看的出來,上升沿下降沿都不是多好看了。估計是因為軟件調制的原因吧。

1.5.3 DCO極限測試

我想,軟件調制應該是有個極限的吧?手冊上寫是25MHz,但是我不斷調整相應的系數(shù),會不會有奇跡出現(xiàn)呢?先放結論,不會。下面看實驗結果:


OverClock - 1

上圖是DCO來源來自XT2 4MHz高頻晶振,F(xiàn)LLN = 3 DCOSEL = 5時的波形。
OverClock - 2
上圖是FLLN = 4時的情況,不過DCOSEL = 6了。
OverClock - 3
OverClock - 4

上圖是FLLN = 7 ,DCOSEL = 5時的波形,已經(jīng)有點醉了。


Overclock - 4
測試的極限情況,F(xiàn)LLN = 7 ,DCOSEL = 7,波形畸變的太厲害了,已經(jīng)不能稱之為方波了,居然有點正弦波的感覺……

測試到這時候就結束了……

1.5 后記

寫到這終于寫完了,說不出現(xiàn)在是累還是終于可以舒一口氣了……

通過正確的配置時鐘,我用MSP430也完成了一個設計,看著手上的小東西,也有了相應的說明書以及報告,心里還是有成就感的。寫下了一點學習筆記,希望能和大家分享我的學習之路,分析與解決我遇到困難,能給大家更多的啟發(fā)。
Horse

非常感謝您的閱讀,若有疑問或錯誤,請留言指出,感激不盡!

參考書籍與參考帖子:
《MSP430x5xx and MSP430x5xx Family User's Guide》
《MSP430單片機原理與應用 -MSP430F5xx/6xx系列單片機入門提高與開發(fā)》(任保宏 徐科軍 編著)
《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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎入門學習匯編語言》系列視頻的筆記,在此感謝他和像他一樣...
    Gibbs基閱讀 37,385評論 8 114
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 按鍵中斷的一個小嘗試 @Board: MSP-EXP430F5529@Keys: S1(P1.7) S2(P2...
    浮生一城閱讀 2,628評論 1 2
  • SPI通信實驗 SPI簡介 串行外設接口(Serial Peripheral Interface Bus,SPI)...
    btskyrmb閱讀 9,669評論 1 12
  • 周六找個理由熬個夜吧,不用擔心被草叢里跑出來的趙云打個慘烈。今天把王者玩的五個寶箱都開啟了,對于一個對游戲不過敏、...
    L勤勞閱讀 289評論 4 6