MSP430 Value Line MCU學(xué)習(xí)筆記 - 基礎(chǔ)時(shí)鐘模塊
由于要使用仿真器調(diào)試,加斷點(diǎn)后MCU被掛起,會(huì)導(dǎo)致看門狗被觸發(fā)而將MCU復(fù)位。因此在調(diào)試階段,我們需要先關(guān)閉看門狗。關(guān)閉看門狗的方法是:
WDTCTL = WDTPW + WDTHOLD;
WDTCTL是一個(gè)16位的寄存器,顧名思義,就是看門狗的控制寄存器。WDTHOLD是控制看門狗開關(guān)的標(biāo)志位。給WDTHOLD置位即關(guān)閉看門狗。但是這個(gè)WDTPW是什么呢?查手冊(cè)得知WDTPW是看門狗的密碼,這是一個(gè)宏,被定義為了0x5A00,這個(gè)密碼是干什么用的呢?原來,WDTCTL寄存器是一個(gè)非常特殊的寄存器,為了防止程序異常時(shí)意外關(guān)閉看門狗,對(duì)它進(jìn)行賦值操作時(shí)必須將其新值的高8位設(shè)為0x5A這個(gè)特定的值,也就是“密碼”。如果賦值時(shí)新值的高8位不是0x5A,會(huì)導(dǎo)致MCU立即被復(fù)位??傊?,對(duì)WDTCTL進(jìn)行任何修改操作時(shí),都要加上WDTPW的值。
2. 時(shí)鐘系統(tǒng)
對(duì)于玩51單片機(jī)的人來說,學(xué)習(xí)MSP430的時(shí)鐘系統(tǒng)是很痛苦的,也很顛覆的。MSP430為了做到超低功耗,對(duì)時(shí)鐘系統(tǒng)進(jìn)行了精妙的設(shè)計(jì)。網(wǎng)上有文章專門講解MSP430的時(shí)鐘系統(tǒng),還有生動(dòng)的配圖。但遺憾的是這些講解都多多少少的存在問題甚至是錯(cuò)誤的。既然說人家講得不好,我也就斗膽說說自己的理解。對(duì)時(shí)鐘系統(tǒng)最精確的描述當(dāng)然就是手冊(cè)里的框圖了:
我不喜歡看這種框圖,覺得特別復(fù)雜,看起來累。但是靜下心來看它時(shí),你會(huì)發(fā)現(xiàn)其實(shí)它并不是那么復(fù)雜,很多困惑的問題也就迎刃而解了。唯一需要你了解的背景知識(shí)是,你必須要認(rèn)識(shí)啥是多路選擇器(Mux)。。。
首先,MSP430的時(shí)鐘系統(tǒng)有這么幾個(gè)概念。
時(shí)鐘源:產(chǎn)生震蕩的時(shí)鐘信號(hào)。MSP430中最多有4個(gè)時(shí)鐘源,分別是:DCO(數(shù)控晶振),VLO(超低功耗低頻晶振),LFXT1(低頻外部晶振),XT2(高頻外部晶振)。在Value Line產(chǎn)品中,并非支持全部的四種時(shí)鐘源。以MSP430G2231為例,內(nèi)置了DCO和VLO,XT1可以自己焊接,XT2不支持。
時(shí)鐘:供系統(tǒng)設(shè)備使用的時(shí)鐘信號(hào),通常是時(shí)鐘源的原始信號(hào)經(jīng)過分頻后得到。MSP430有3個(gè)時(shí)鐘,分別是:MCLK(主時(shí)鐘,供CPU核心使用),ACLK(輔助時(shí)鐘,供外圍設(shè)備使用),SMCLK(子系統(tǒng)時(shí)鐘,供外圍設(shè)備使用)。
每個(gè)時(shí)鐘都可以配置(1)從指定的時(shí)鐘源獲得信號(hào) (2)對(duì)信號(hào)進(jìn)行/1/2/4/8分頻 (3)時(shí)鐘開關(guān)
上面的框圖我們從中間橫向的紅線分開看,上面一部分是低頻時(shí)鐘,LFXT1Sx這兩個(gè)標(biāo)志位用于選擇使用哪個(gè)時(shí)鐘源來驅(qū)動(dòng)系統(tǒng)的低頻時(shí)鐘。藍(lán)色的線就是低頻時(shí)鐘源的輸出。下面一部分是高頻時(shí)鐘,紅色的細(xì)線是高頻時(shí)鐘的輸出(對(duì)沒有XT2的芯片來說)。需要注意的是,這條藍(lán)色線接在LFXT1Sx對(duì)應(yīng)的數(shù)據(jù)選擇器的后面。也就是說,系統(tǒng)只能選擇一個(gè)低頻時(shí)鐘。比如我選擇VLO作為ACLK的時(shí)鐘源,那藍(lán)色那條線上就是VLO的時(shí)鐘信號(hào)。那即使我有外部晶振,也不能選擇LFXT1作為MCLK的時(shí)鐘源。就是這種機(jī)制,很多人沒有理解清楚(或者沒有表達(dá)清楚),致使網(wǎng)上的大部分教程都在說,MCLK是從ACLK和DCO中二選一,這樣說是不準(zhǔn)確的。因?yàn)樗{(lán)色的線在ACLK的分頻器之前,所以并不受ACLK分頻設(shè)置的影響,因此藍(lán)色線上跑的并不是ACLK時(shí)鐘信號(hào),而是ACLK的時(shí)鐘源信號(hào)。
更準(zhǔn)確的理解是這樣的:MCLK仍然是從DCO、VLO、LFXT1和XT2(如果有的話)中四選一,ACLK仍然是從LFXT1和VLO中二選一,SMCLK仍然可以從DCO和XT2(如果有的話)中二選一(如果沒有XT2就在DCO、LFXT1、VLO中三選一)。只不過有一個(gè)約束,那就是如果MCLK或者SMCLK想要選擇VLO或者LFXT1,那就必須跟ACLK選的一樣。
在絕大部分Value Line產(chǎn)品中(以MSP430G2231為例),你可以采用更簡單的記法:低頻時(shí)鐘源從LFXT1和VLO中選一個(gè),高頻時(shí)鐘源只有DCO一個(gè)。因此對(duì)系統(tǒng)時(shí)鐘(MCLK, ACLK, SMCLK)來說,只有2個(gè)時(shí)鐘源,一個(gè)低頻一個(gè)高頻。三個(gè)系統(tǒng)時(shí)鐘都可以選擇使用低頻時(shí)鐘源(圖中藍(lán)線)或者高頻時(shí)鐘源(圖中紅線)。(2012年7月11日勘誤:MCLK和SMCLK可以從低頻和高頻中選一個(gè),而ACLK只能選擇低頻)
---------以下內(nèi)容均以MSP430G2231和MSP430G2553芯片為例,即不存在XT2---------
3. 具體編程,對(duì)時(shí)鐘源和系統(tǒng)時(shí)鐘的配置和使用
(1)低頻時(shí)鐘源配置——寄存器BCSCTL3 (Basic Clock System Control Register 3)
配置低頻時(shí)鐘的時(shí)鐘源其實(shí)就是修改上面圖中的LFXT1Sx,這兩個(gè)標(biāo)志位位于BCSCTL3這個(gè)8位寄存器的第4、5位。
//使用頻率約為12kHz的VLO作為低頻時(shí)鐘源
BCSCTL3 |= LFXT1S_2;
頭文件中定義了LFXT1S_2,其實(shí)就是第4位為1,第5位為0. 含義是使用VLO
// 使用Launchpad自帶的32768Hz外部晶振,電容12.5pF
BCSCTL3 |= LFXT1S_0 + XCAP_3;
頭文件中定義的LFXTS_0含義是使用外部晶振,同時(shí)設(shè)置XCAP_3,含義是晶振的負(fù)載電容是12.5pF
----------------------------待續(xù),,,下面的還沒寫完------------------------------
(2)高頻時(shí)鐘源的配置——
(3)系統(tǒng)時(shí)鐘MCLK的時(shí)鐘源選擇——寄存器BCSCTL2 (Basic Clock System Control Register 2)
// 清晶振錯(cuò)誤標(biāo)志位
IFG1 &= ~OFIFG;
// 不懂。。。
__bis_SR_register(SCG1 + SCG0);
//系統(tǒng)時(shí)鐘選擇為低頻,/8分頻
BCSCTL2 |= SELM_3 + DIVM_3;
評(píng)論