f5529模塊教程(上海大學)_第1頁
f5529模塊教程(上海大學)_第2頁
f5529模塊教程(上海大學)_第3頁
f5529模塊教程(上海大學)_第4頁
f5529模塊教程(上海大學)_第5頁
已閱讀5頁,還剩61頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、(一)上海大學樂乎博客 > 落葉遍地 > 轉(zhuǎn)帖先轉(zhuǎn)一篇開個頭:這樣快速闖入MSP430學習過程2013/8/20 15:15:20 | 轉(zhuǎn)帖先轉(zhuǎn)一篇開個頭:這樣快速闖入MSP430學習過程/*部分說法我覺得還是很不錯的*/為想學MSP430單片機的初學者,或者,你是剛轉(zhuǎn)到電子硬件嵌入式開發(fā),如果你的電子基礎課程已經(jīng)完成,想盡快掌握MSP430單片機,又糾結(jié)于怎樣盡快闖入MSP430學習過程的問題,現(xiàn)總結(jié)整理出新手開始學習MSP430的一些問題,和學習中有關注意事項和方法。 供有心學習MSP430單片機的童鞋參考吧。  &#

2、160;    當然,闖入MSP430學習,你需要有一些單片機的理論基礎,和比較強的C語言功底,學習MSP430單片機最好的方法是文武并進:“文”指學好片內(nèi)模塊的資源知識;“武”則指動手能能力?;A知識+動手實操,是一個非常有效的學習方法。文武并進必能學有所成。       進入各個電子產(chǎn)品公司的網(wǎng)站,招聘里面嵌入式占據(jù)了大半工程師職位。 廣義的嵌入式無非幾種:傳統(tǒng)的什么51單片機、 MSP430稱做嵌入式微控制器;ARM是嵌入式微處理器;當然還有DSP;FPGA。我們現(xiàn)在就不說別的,就說MSP

3、430單片機,多數(shù)想學MSP430的童鞋,對89C51內(nèi)核系列的單片機是很熟悉的,為了加深對MSP430 系列單片機的認識嗎,迅速闖入MSP430學習過程,就必須徹底了解MSP430單片機,我們不妨將51單片機和MSP430兩者進行一下比較。        第一點, 51內(nèi)核單片機是8 位單片機。其指令是采用的被稱為“ CISC ”的復雜指令集,共具有111 條指令。而MSP430 單片機是16 位的單片機,采用了精簡指令集( RISC )結(jié)構(gòu),只有簡潔的27 條指令,大量的指令則是模擬指令,眾多的寄存器以及片內(nèi)數(shù)據(jù)存儲器都

4、可參加多種運算。這些內(nèi)核指令均為單周期指令,功能強,運行的速度快。        第二點,MCU主要分為兩種工作模式:待機與執(zhí)行。51內(nèi)核單片機正常情況下消耗的電流為mA級 ,在掉電狀態(tài)下,其耗電電流仍約為3mA左右 ;即使在掉電方式下,電源電壓可以下降到2V ,但是為了保存內(nèi)部RAM 中的數(shù)據(jù),還需要提供約50uA的電流。        而430單片機功耗是在uA級的,工作電流極小,并且超低功耗,關斷狀態(tài)下的電流僅為0.1A,待機電流為0.8A,常規(guī)模式下的(25

5、0A1MIPS3V),端口漏電流不足50 nA,并可零功耗掉電復位(BOR)。另外,該芯片屬低電器件,僅需1.83.6V電壓供電,因而可有效降低系統(tǒng)功耗。MSP430將低功耗模式擴展為7種,分別對應不同應用場合及任務的低功耗方式。以睡眠模式為例,包括深度睡眠模式RTC:只有時鐘在跑而其他都不動,目前,TI宣布其MSP430在RTC模式下最低功耗僅為360nA。同時也包括諸如液晶顯示驅(qū)動等需要幾十毫秒刷新一次的間歇性睡眠模式。所以,MSP430 的超低功耗更適合應用于使用電池供電的儀器、儀表類產(chǎn)品中。      第三點, 51內(nèi)核單片機由于其內(nèi)部

6、總線是8 位的,受其結(jié)構(gòu)本身的限制很大,模擬功能控制功能受限制。MSP430 系列其基本架構(gòu)是16 位的,同時在其內(nèi)部的數(shù)據(jù)總線經(jīng)過轉(zhuǎn)換還存在8 位的總線,在加上本身就是混合型的結(jié)構(gòu),因而對它這樣的開放型的架構(gòu)來說,無論擴展8 位的功能模塊,還是16 位的功能模塊,即使擴展模/ 數(shù)轉(zhuǎn)換或數(shù)/ 模轉(zhuǎn)換這類的功能模塊也是很方便的。       第四點,典型MCU的存儲結(jié)構(gòu)有兩種,馮。諾依曼結(jié)構(gòu)程序存儲器和數(shù)據(jù)存儲器統(tǒng)一編碼;哈佛結(jié)構(gòu)程序存儲器和數(shù)據(jù)存儲器;MSP430系列單片機屬于前者,而常用的51內(nèi)核單片機系列屬于后者。 &#

7、160;     第五點,就是在開發(fā)工具上面。對51內(nèi)核 單片機來說,不少適合我們使用的開發(fā)工具。但是如何實現(xiàn)在線編程還是一個很大的問題。對于MSP430 系列而言,由于引進了Flash 型程序存儲器和JTAG 技術,不僅使開發(fā)工具變得簡便,而且價格也相對低廉,并且還可以實現(xiàn)在線編程。      那么說了以上這些,作為新手,到底怎么學習430這種16位低功耗的單片機呢?或者說有什么有什么效果比較好的方法嗎,答案是肯定。網(wǎng)上有很多介紹MSP430單片機學習的方法,一定要結(jié)合自己的學習特點,集百家之長,善于總

8、結(jié)別人的、自己的學習方法和效果,積極實踐。當然學習的方法都是相通的。大概對這些方法簡單總結(jié),也就是下面幾點:1. 作為430新手,首先看我們是否準備好以下幾樣硬件:電腦(帶有并口)1臺,MSP430FET仿真器1套,MSP430開發(fā)實驗板1套,和一些MSP430教程或電子教程資料等。2. 選用MSP430仿真器。購買現(xiàn)成的MSP430JTAG仿真器如TI-MSP430JTAG3. 選用MSP430開發(fā)板或目標板是學習一個重要的工具,建議購買一個開發(fā)板或目標板,同時也會得到很好的技術支持。如果自己制作的話也行,也未尚不可,那就看個人水平了。4. 軟件工具,因為現(xiàn)在都有學習板的工具軟件,如IAR的

9、EW430學習版,430GCC軟件還是免費的。建議還是使用IAR軟件較方便,因為使用的人群較多,有問題還可請教,容易解決。5. MSP430學習資料及教程,<<MSP430系列16位超低功耗單片機原理與應用>> 清華大學出版社和一本關于430C語言編程應用的書本<<MSP430系列單片機實用C語言程序設計>>。6. MSP430系列中硬件源資是非常豐富的。有看門狗(WDT)、定時器A (Timer_A)、定時器B(Timer_B)、比較器、串口0(USARTO)、串口1(USART1)、硬件乘法器、液晶驅(qū)動器、10位/12位ADC, 14位ADC

10、,數(shù)十個可實現(xiàn)方向設置及中斷功能的并行輸入輸出端口、基本定時器(Basic Timer)。7. 以下幾部分模塊硬件資源是作為初學者必須要了解學習的。WDT看門狗定時器: 新手們會看到很多編程實例中,開頭都有“WDTCTL = WDTPW + WDTHOLD;”語句。這是CUP執(zhí)行關閉定時器的意思。在剛開始,我們沒必要關心這個,可以跳過這章節(jié),只要大概地知道他的作用就好了??撮T狗定時器一般是用于防止程序失效而存在的,一般是用于完整的程序中使用。主程序中可不斷地清除看門狗定時器的計數(shù)值,以防定時器的值自動計滿后使CPU復位而重新開始工作。當程序發(fā)生錯誤時,無法正常清除看門狗的定時值時,則看門狗定時

11、器計數(shù)溢出而產(chǎn)生CPU復位。IO模塊:對于IO模塊可分為初級與提高兩階段,可以不必同一時段內(nèi)進行理解。   a初學者必需了解幾個常用寄存器使用如P1OUT,P1IN,P1DIR,P1SEL寄存器。   b理解MSP430 IO口常用編程語法,這些都可以查看參考例程。   c結(jié)合書本介紹和個人理解,然后在開發(fā)板上進行實驗。例如比如LED、響聲之類的     初級實驗。  d對于IO模塊:了解如何使用IO中斷,和IO中斷相關寄存器的使用。如果不太必要,可以跳過IO中斷的使用,而是去學習其他

12、章節(jié)的基礎部分;當其他章節(jié)基礎學習到一定程序時回過頭再來學習這部分。另外,我們需要搞清楚IO模塊在什么時候為高阻狀態(tài)?高阻狀態(tài)時的漏電流為多少?IO驅(qū)動電流能力如何?等等一些常關注的參數(shù)時,我們都需要養(yǎng)成主動查看器件手冊的習慣。e. 中斷是430處理器的一大特色,因為幾乎每個外圍模塊都能產(chǎn)生,430可以在沒有任務時進入低功耗狀態(tài),有事件時中斷喚醒cpu,處理完畢再次進入低功耗狀態(tài)。整個中斷的響應過程是這樣的,當有中斷請求時,如果cpu處于活動狀態(tài),先完成當前命令;如果處于低功耗,先退出,將下一條指令的pc值壓入堆棧;如果有多個中斷請求,先響應優(yōu)先級高的;執(zhí)行完后,等待中斷請求標志位復位,要注意

13、,單中斷源的中斷請求標志位自動復位,而多中斷的標志位需要軟件復位;然后系統(tǒng)總中斷允許位SR.GIE復位,相應的中斷向量值裝入pc,程序從這個地址繼續(xù)執(zhí)行。這里要注意,中斷允許位SR.GIE和中斷嵌套問題。如果當你執(zhí)行中斷程序過程中,希望可以響應更高級別的中斷請求時,必須在進入第一個中斷時把SR.GIE置位。其實,其他的外圍模塊時鐘沿著時鐘和中斷這個核心來執(zhí)行的。具體的結(jié)構(gòu)我也不羅索了,可以參考430系列手冊。時鐘模塊:系統(tǒng)時鐘是一個程序運行的指揮官,時序和中斷也是整個程序的核心和中軸線。430最多有三個振蕩器,DCO內(nèi)部振蕩器;LFXT1外接低頻振蕩器,常見的32768HZ,不用外接負載電容;

14、也可接高頻450KHZ8M,需接負載電容;XT2接高頻450KHZ8M,加外接電容。初學者若要使用到片中某模塊時幾乎都要使用不同的時鐘。時鐘模塊是提供整個單片機中各模塊的時鐘發(fā)生源,所以這章節(jié)是非常強調(diào)地要去認真理解的。.必須理解430有幾種時鐘信號:MCLK系統(tǒng)主時鐘,可分頻1 2 4 8,供cpu使用,其他外圍模塊在有選擇情況下也可使用;SMCLK系統(tǒng)子時鐘,供外圍模塊使用,可選則不同振蕩器產(chǎn)生的時鐘信號;ACLK輔助時鐘,只能由LFXT1產(chǎn)生,供外圍模塊。.DCO,SMCLK,MCLK,ACLK各個時鐘有什么優(yōu)點和點。.4個時鐘信號中,每個時鐘的通常頻率范圍是多少。.常規(guī)的時基控制寄存器

15、設置和時鐘如何從引腳輸出等等。TimaA模塊:.初學者需要搞清TimerA的三個不同工作模式中TA、CCR1、CCR2與CCR0之間的關系。.搞清楚TA、CCR1、CCR2與CCR0之間的中斷向量關系。.綜合上面的理解,我們可以結(jié)合TimerA的例程來進行相關驗證,只有通過親自的操作才能有效地記住。.利用TimerA實現(xiàn)PWM信號輸出、利用捕獲/比較功能實現(xiàn)捕獲信號等等。8. 另外多大學習430學習單片機論壇上, 和網(wǎng)友交流,咨詢,多看別人出現(xiàn)的問題的解決方法。        可以說,只要經(jīng)過上述方面認真折騰學習的話,其實M

16、SP430單片機編程應用就有了基本入門階段,可以說已經(jīng)闖入MSP430單片機有效學習過程,接下要繼續(xù)學習其他相關的模塊應用也不難了。那么剩下的一些模塊可以按需而用,按需而學。 但前提的就是需要熟悉幾個常用模塊基礎應用,以使用量最多的14x系列為例,初學者入門必學有IO模塊、時基模塊、定時器模塊等,以后可繼續(xù)強化學習如ADC12模數(shù)轉(zhuǎn)換、UART串行異步通訊模塊、比較器A模塊等等。(二)2013/8/20 19:03:22 | MSP430F5529 (一)通用I/O口的設置-1初學,有什么錯誤或者不恰當?shù)牡胤蕉喽嘀刚?,大家一起交流學習。推薦一個好去處:TI官方MSP430交

17、流社區(qū)需要注冊。在這里面提問題,都會有TI的在職工程師為你解答。第一章,先學習I/O。I/O的操作是最基本的,而且這些寄存器也都要牢牢掌握。MSP430難就難在它有大量的寄存器需要設置,雖然不是每個都必須掌握,但I/O控制寄存器我覺得肯定還要記住的。這個太基礎了啊啊-_'大家手里要常備一份原理圖(PCB圖),方便查線和配置引腳一、通用I/O的簡單操作(設置)      詳情可參照TI官方資料 SLAU208 Digital I/O Module1.1  I/O的簡介  

18、0;          特點:多種復用和設置(即可控制是否輸入、是否輸出、是否接上拉電阻、是否接下拉電阻、是否可接受中斷);                      一般情況下,P1和P2都是具有中斷能力的。從P1和P2接口的各個I/O管腳引入的中斷可以獨立的被使能并且設置為上

19、升沿或者下降沿觸發(fā)。對應的中斷向量表分別為P1IV和P2IV,它們只能進行字操作,并且PAIV這個寄存器根本不存在。                      P1、P2可合為PA,P3、P4可合為PB,PC、PD。所以P1為8位BCD 0x00,PA為16位BCD 0x0000。當進行字操作寫入PA口時,所有的16位都被寫入這個端口;當利用字節(jié)操作寫入PA口的低字節(jié)時,高字節(jié)

20、保持不變;                      由于430很多I/O和外圍電路接線,所以這里常用位操作。如事先定義(接下來也會用到,先在此聲明)BIT0=0X01、BIT1=0X02、BIT3=0X04BIT7=0X80,那么將P1.1、P1.3的輸出設為1的時候,就可以這樣操作:P1OUT|=(BIT1+BIT3)。這樣顯得很清楚。   &

21、#160;                  沒有用到的I/O,要統(tǒng)一拉低為好。此外,當讀入的數(shù)據(jù)長短小于端口最大長度時,那些沒有用到的位會被視零。 1.2   I/O的簡單配置                 

22、;   430I/O的配置是用軟件來實現(xiàn)的,是通過相應的配置寄存器來實現(xiàn)的。(用到某個I/O時,一定要先配置好該I/O,否則易出錯)      1.2.1  I/O方向設定寄存器PXDIR                    如設定P1.1和P1.2為輸出狀態(tài)操作為: P1DI

23、R |=(BIT1+BIT2)等價于PADIR |=(BIT1+BIT2)也等價于PADIR_L|=(BIT1+BIT2。拉高設定為輸出,拉低設定為輸入(默認)。      1.2.2  I/O輸入設定寄存器PXIN                    如設定P1.1和P1.2的輸入為低電平操作為:

24、0;P1IN &=(BIT1+BIT2)。      1.2.3      I/O輸出設定寄存器PXOUT當只用為簡單的輸出時:如設定P1.1和P1.2輸出高電平操作為: P1OUT |=(BIT1+BIT2)。                     

25、;   如果該引腳為正常I/O功能,且當前已設定為輸入方向,且上拉/下拉電阻寄存器是有效地。那么PXOUT可以用來配置上拉和下拉電阻:                                   低電平為下拉電阻

26、;                                   高電平為上拉電阻;             &#

27、160;1.2.4  上拉/下拉電阻使能寄存器PXREN                                   低電平該寄存器為無效狀態(tài);      

28、60;                            高電平該寄存器為有效狀態(tài);                   &#

29、160; 1.2.5  輸出驅(qū)動能力設置寄存器PXDS                            弱化驅(qū)動可以減弱電磁干擾EMI,全力驅(qū)動會增強電磁干擾。默認為減弱驅(qū)動。         

30、                          低電平表示減弱的驅(qū)動(默認);                     

31、60;             高電平表示全力的驅(qū)動;              1.2.6  功能選擇寄存器PXSEL                

32、;            用來聲明該端口是要應用于外圍電路的特殊功能(不決定輸入輸出方向),默認為低電平。                               &

33、#160;   低電平表示普通的I/O(默認);                                   高電平表示該引腳將有連接外圍電路的特殊用途;     

34、;                 如:開發(fā)板初始化函數(shù)HAL_Board.c中有這樣一句程序:                            

35、;       P5SEL |=(BIT2+BIT3)(=00001100);                                   這句話的意思就是聲明P5.2和P

36、5.3將有特殊用途,實際上這兩個I/O接的是外部的高頻時鐘晶振(之后還要設定為輸入狀態(tài)才可以)。                            此外需要注意的是,一旦某個I/O的PXSEL置高了,那么該引腳將不能再被用為中斷引腳。 總結(jié),簡單的程序應用:/*實現(xiàn)LED的閃爍*/LED位于每個觸摸按鍵下

37、方,具體接口請查詢原理圖#include    <msp430.h>          該頭文件內(nèi)部包含430各個寄存器的配置情況void main(void)       WDTCTL=WDTPW+WDTHOLD;             

38、60;     /關閉看門狗       P1DIR|=(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5);             /P1.0-P1.5方向為輸出,BITX的定義在msp430.h中       P1OUT&=(BIT0+BIT1+BIT2+

39、BIT3+BIT4+BIT5);         /清零       /*P1SEL=0X00;PXDS=0X00;默認*/       int i=0,j=0;       while(1)         

40、            if(i>5)                     i=0;              else

41、                                   switch(i)             

42、60;                            case 0:P1OUT=0x01;break;                 

43、60;   case 1:P1OUT=0x02;break;                     case 2:P1OUT=0x04;break;                 

44、60;   case 3:P1OUT=0x08;break;                     case 4:P1OUT=0x10;break;                 

45、60;   case 5:P1OUT=0x20;break;                                          

46、60;      i+;              for(j=20000;j>0;j-);                         &

47、#160;     /延時        (三)上海大學樂乎博客 > 落葉遍地 > MSP430F5529 (一)通用I/O口的設置-22013/8/21 11:16:16 | MSP430F5529 (一)通用I/O口的設置-2這一部分講外部中斷??唇榻B再加弄懂程序才是王道外部中斷是MSP430優(yōu)先級最低的中斷而且是可屏蔽中斷。用起來比較簡單。 1.2.7  簡單的端口中斷(外部中斷

48、)                     P1、P2的所有端口都具有中斷能力,可以通過寄存器PxIFG,PxIE和PxIES來配置。其他端口則需參照具體的引腳說明書。所有的P1中斷標志是最優(yōu)先的(相比其它引腳的外部中斷),其中P1IFG.0又最優(yōu)。           

49、0;         PXIV中斷向量寄存器:只有P1IV和P2IV。最高優(yōu)先級使能中斷在P1IV寄存器中產(chǎn)生一個序號,這個數(shù)字會被程序計數(shù)器識別或者加入其中,然后自動的執(zhí)行合適的中斷服務程序。關閉P1口中斷不會影響P1IV寄存器中的值。P2口具有相同的功能。PxIV寄存器只能字訪問。                  

50、0;  PxIFGx  中斷標志寄存器:只有相應的中斷使能PXIE打開且總中斷GIE打開,該寄存器才有效。                                   低電平表示沒有中斷請求等待響應;&

51、#160;                                  高電平表示有中斷請求等待響應;            

52、0;               注意:使用端口的中斷功能期間,如果進行PXIN、PXOUT等操作可能使中斷變化。注意:中斷標志需要軟件清零。有一種情況例外:兩個中斷同時發(fā)生,先響應優(yōu)先級高的中斷,當該中斷服務程序結(jié)束后,該位的中斷標志會自動清零,然后去響應另外一個中斷。 PxIE    中斷使能寄存器        

53、                           低電平表示中斷關閉;              高電平表示中斷允許;PXIES  中斷觸發(fā)方式選擇寄存器 

54、                                  低電平表示上升沿觸發(fā);              &

55、#160;                    高電平表示下降沿觸發(fā);外部中斷應用示例:/*采用中斷的方式,開關S2(接于P2.2)控制LED(接于P1)一個一個點亮(看PCB圖接線)*/#include <msp430.h> int s=0;    /s用來表示按鍵次數(shù)int num =0; 

56、/num表示LED值void main(void)   WDTCTL=WDTPW+WDTHOLD; /關閉看門狗   P1DIR=0xff;   /P1全部接輸出   P1OUT=0x00;        /接LED初始化故全拉低,這樣開始燈是滅的   P2DIR=0x00;      &

57、#160; /P2全部設為輸入。因為要接受外部中斷   P2IFG=0x00;        /清除P2口的中斷標志   P2IE=BIT2;         /P2.2開啟中斷   P2IES=0xff;     /P2為下降沿觸發(fā)   P2IN=

58、BIT2; /P2.2輸入拉高,因此開關閉合時會拉低產(chǎn)生下降沿(即中斷)   P2OUT=0xff;   P2REN=0xff;     /作為輸入的時候一定要配置上拉電阻(很重要,容易忘記,我就在這錯了-_)   _enable_interrupt(); /開總中斷   while(1)      num=s%5;  

59、0;   switch(num)         case 0:P1OUT=BIT1;break;         case 1:P1OUT=BIT2;break;         case 2:P1OUT=BIT3;break;   &#

60、160;     case 3:P1OUT=BIT4;break;         case 4:P1OUT=BIT5;break;#pragma vector=PORT2_VECTOR     /固定格式,聲明中斷向量地址_interrupt void Port2_ISR(void)  /中斷子程序   &

61、#160;  unsigned int temp;    /局部變量      int i;      for(i=0;i<12000;i+); / 延時消抖      if(P2IN&0xff)!=0xff)   /如果有鍵按下   

62、      temp=P2IFG;        /讀取中斷標志         P2IFG=0x00;        /標志位清零         if(temp=0x04)  

63、   /如果P2.2產(chǎn)生中斷            s+; /這一部分其實有幾句話很多余,主要是為了體現(xiàn)每個端口中斷的知識備注中斷子程序調(diào)用格式:#pragma vector=中斷向量地址_interrupt void 中斷服務程序名(void)  /中斷處理程序  1.2.8  未使用的I/O      &

64、#160;              未使用的I/O管腳最好被設置為普通I/O功能、輸出方向并且在PCB板上不連接這些管腳,以防止浮動的輸入和降低功耗。因為這些管腳沒有被連接,所以它們的輸出值沒有必要在意?;蛘呖梢酝ㄟ^設置未使用管腳的PxREN寄存器來使能置高/置低寄存器以避免浮動輸入的干擾。(四)上海大學樂乎博客 > 落葉遍地 > MSP430F5529 (二)看門狗的設置2013/8/22 13:54:03 |

65、 MSP430F5529 (二)看門狗的設置  看門狗定時器(Watchdog Timer(WDT_A))實際上是一個特殊的定時器,即可以用來作為看門狗使用,也可以用作定時器。所謂的看門狗功能,是指可以監(jiān)控程序是否由于某些干擾或者錯誤而跑飛。其原理就是發(fā)生故障的時間滿足規(guī)定的定時時間后,產(chǎn)生一個非屏蔽中斷,使系統(tǒng)復位。這樣當在調(diào)試程序或預計程序在某個地方可能瞬時發(fā)生錯誤時(如外部電路干擾),選用設置看門狗定時中斷可以避免程序跑飛。當然,它也可以用作一般的定時功能。不過實際上,由于看門狗定時器(作看門狗使用時)需要很嚴密的設置(否則程序容易經(jīng)常重啟),所以很多人都不

66、會使用這項功能。所以,程序一開始就加上一句話:WDTCTL=WDTPW+WDTHOLD來關閉看門狗。 2.1  WDT_A的簡介              特點:                     有8種可選定時時

67、間;看門狗模式;定時器模式;看門狗控制寄存器存在密碼保護;時鐘源可選,且具有時鐘源意外保護;可以被終止來節(jié)省能源;無論是用作看門狗還是定時器,其間隔時間都無法隨意設定,只能從8種設定中選擇,當然可以通過更改時鐘頻率來間接更改時間; 注意默認設置:程序啟動,看門狗即啟動;監(jiān)控周期為32ms/32.768KHZ(也就是說當看門狗的時鐘頻率為32.768KHZ時,每過32ms,如果不軟件清空,程序就會重啟);所用的時鐘源為SMCLK(實際頻率不是32.768KHZ,后面會提到)。2.2  WDT_A的寄存器及操作     

68、;                注意:所有的寄存器都存字操作和字節(jié)操作模式。例如對WDTCTL寄存器直接賦值是字操作,你也可以通過WDTCTL_L(低字節(jié)寄存器)、WDTCTL_H來進行字節(jié)操作賦值。                    

69、;               該類寄存器只能賦值不要進行“|=、&=”等邏輯操作。              2.2.1看門狗控制寄存器WDTCTL(Watchdog Timer Control)        

70、0;             該寄存器是一個16位帶有密碼保護的讀寫寄存器。所謂的密碼保護,是為了防止該寄存器被不小心篡改。那么是如何實現(xiàn)密碼保護呢?事實上,該寄存器的高字節(jié)用來存放口令,低字節(jié)才是控制數(shù)據(jù)。寫口令為05Ah,讀口令為069h,任何和口令不一樣的高字節(jié)操作都會導致系統(tǒng)復位。該寄存器的位功能定義如下:(支持位操作)           

71、0;  WDTPW:Bits15-8,WDT Password,寫為05Ah,讀為069h。               WDTHOLD:Bit7,WDT HOLD,                      

72、             0:打開看門狗計時器;                                   1

73、:關閉               WDTSSEL:Bits6-5,WDT Clock Source Select時鐘源選擇WDTTMSEL:Bit4,工作模式選擇0:看門狗模式;                      

74、60;            1:定時器模式;WDTCNTCL:Bit3,計時器清零0:無效;                                &

75、#160;  1:清空計數(shù)器,即WDTCNT=0x0000hWDTIS:  Bits2-0,WDT Interval Select,間隔時間選擇。用來選擇計數(shù)的周期,共有8種時間可以選擇。               備注:括號前數(shù)字為計數(shù)器的值 2.2.2 看門狗計數(shù)值寄存器WDTCNT(Watchdog Timer Counter)    &#

76、160; 這是一個32Bit的加計數(shù)器,但是不能通過軟件來直接對其進行賦值等操作,只能通過WDTCTL中的WDTIS來選擇時間?;蛘吣憧梢酝ㄟ^WDTSSEL選擇不同的時鐘源,來間接改變時間。   2.2.3  看門狗中斷 位控制                   WDT利用SFRS總寄存器中的兩位來控制中斷。  &#

77、160;                WDT中斷標志位:WDTIFG,位于SFRIFG1.0                   WDT 中斷使能位:WDTIE,位于SFRIE1.0    

78、0;                                看門狗模式:如果不及時對WDTCNT清零或者對WDT初始化,WDTIFG就會置位,然后程序就會重啟。         &#

79、160;         計時器模式:必須開總中斷GIE和看門狗中斷WDTIE。此外,當執(zhí)行完中斷服務程序后,標志位WDTIFG會自動清零。    2.3常用操作                   /*關閉看門狗*/     &

80、#160;             WDTCTL=WDTPW+WDTHOLD;                    /*喂狗,即對有效狀態(tài)的看門狗進行清零操作*/         

81、;            /* 時間計滿還不喂狗就會導致程序重啟*/                   /*WDTIS2即WDTIS=100,此時時間間隔設為1S,假定頻率為32.768KHZ*/       

82、;            WDTCTL = WDTPW + WDTCNTCL+WDTSSEL0+WDTIS2;                    /*將看門狗設置為計數(shù)器模式,計數(shù)8192約250ms,假定頻率為32.768KHZ*/   

83、60;               /* WDTIS2+WDTIS0即101*/                   WDTCTL=WDTPW+WDTCNTCL+WDTTMSEL+WDTIS2+WDTIS0 總結(jié)例程:/*首先將WDT設為定時器功能。

84、而中斷服務子程序則是把WDT改為看門狗功能。這樣就通過中斷控制的周期性的重啟程序,實現(xiàn)了LED閃爍*/*注意,這里默認的時鐘源不是32KHZ,而是內(nèi)部的DCO-SMCLK(之后會講到)1.045MHZ。所以前面WDTIS定義的時間大約都要縮小1045/32=32倍*/ #include <msp430.h>void main(void)   /*清零-設定為計數(shù)器-時間設定為010模式,即256S/32=8S*/   WDTCTL=WDTPW+WDTCNTCL+WDTTMSEL+WDTIS1; 

85、;  _enable_interrupt(); /開總中斷   SFRIE1|=WDTIE;        /開看門狗定時器中斷   P1DIR=0xff;   int i,j;   P1OUT=0xff;      for(i=0;i<30000;i+)   &

86、#160;     for(j=0;j<50;j+);    /延時約8S      P1OUT=0x00;   while(1); /*中斷服務程序*/#pragma vector=WDT_VECTOR_interrupt void WatchTimer(void)   WDTCTL=WDTPW+WDTCNTCL+WDTIS1; 

87、 /看門狗模式,時間設定約為8S (五)上海大學樂乎博客 > 落葉遍地 > MSP430F5529 番外(一)常用內(nèi)置函數(shù)和一些說明2013/8/23 11:57:36 | MSP430F5529 番外(一)常用內(nèi)置函數(shù)和一些說明            今天天太熱,就更新一個番外吧。其實也是很有用的,我覺得。        &

88、#160;   下一次,會講UCS統(tǒng)一時鐘系統(tǒng),是一個很復雜的部分。                    (1)  MSP430F5529支持最高工作頻率為25MHZ,也就是說你通過             鎖相環(huán)倍頻來提高系統(tǒng)運行速度是

89、有一個限制的,             最高只能到25MHZ(再高沒意思了)。                  (2)幾個重要的內(nèi)聯(lián)函數(shù)             

90、60;                 (內(nèi)聯(lián)函數(shù)定義在intrinsics.h中,但是這幾個函數(shù)使用的時候                 不需要事先聲明該文件頭)        

91、0;               _bic_SR_register();                               

92、60;      將CPU中SR寄存器中的某些位清零。即將括號內(nèi)的位清零。                                      例:_bi

93、c_SR_register(GIE);/將GIE位清零,即關閉總中斷                        _bis_SR_register();                 &

94、#160;                    將CPU中SR寄存器中的某些位置1。即將括號內(nèi)的位置1。                        

95、60;_interrupt放在函數(shù)前面,標志中斷函數(shù)。下面這段程序是看門狗WDT的中斷服務函數(shù)。WDT_VECTOR為看門狗的中斷向量。 舉例: #pragma vector=WDT_VECTOR_interrupt void WatchDog(void)                _monitor放在函數(shù)前面,功能是聲明當這一函數(shù)執(zhí)行的時候自動關閉中斷。應該盡量縮短這樣的函數(shù),否則,中斷事件無法得到及時的響應。 

96、;              _bic_SR_register_on_exit(); 功能:用于一個中斷函數(shù)或者不可中斷函數(shù)(標志為_monitor)返回時,將CPU內(nèi)SR寄存器中的某些位清0. _bis_SR_register_on_exit();功能:用于一個中斷函數(shù)或者不可中斷函數(shù)(標志為_monitor)返回時,將CPU內(nèi)SR寄存器中的某些位置1. _no_init放在全局變量前面,功能是使程序啟動時不為變量賦初值&#

97、160;_disable_interrupt                     關閉總中斷                     另外一個相同作用的表達為: &#

98、160;  _DINT() _enable_interrupt                     開啟總中斷                    

99、60;另外一個相同作用的表達為:    _EINT()_even_in_range(  ,  );常被用在多源中斷的查詢中,如switch( _even_in_range(TAIV,10)意思是:只有在TAIV的值是在0-10內(nèi)的偶數(shù)時才會執(zhí)行switch函數(shù)內(nèi)的語句。其作用是提高switch語句的效率 A.        _NOP()空操作,等價于_no_operation指令 B. _get_SP_re

100、gister(void)功能:返回堆棧指針寄存器SP的值。 C. _get_SR_register_on_exit(void)功能:用于一個中斷函數(shù)或者不可中斷函數(shù)(標志為_monitor)返回時,返回狀態(tài)寄存器SR的值。                D. _bcd_add_short(unsigned short,unsigned short);功能:兩個16為BCD格式的數(shù)字相加,返回和。 

101、               E. _bcd_add_long(unsigned long,unsigned long); 功能:兩個32位BCD格式的數(shù)字相加,返回和。 F. _delay_cycles(x);              系統(tǒng)自帶的精確延時。x必須是常

102、量或則是常量表達式,如果是變量則編譯報錯!延時的時間為x乘以MCLK的時鐘周期  (3)關于MSP430大量寄存器如何處理的問題:                     MSP430寄存器太多了,把每一個都記住實在太難。所以,我的建議是,學習的時候,把重要的常用的寄存器記住。       

103、0;  至于其它眾多寄存器,大家只需要有一個印象,知道這些寄存器可以控制那些設置。到具體用的時候,再查找技術手冊; (4)頭文件msp430f5529.h里面不僅定義了對各個寄存器的聲明,還定義了很多很方便的東東。比如你要進入低功耗模式1:LPM1;比如你要把定時器A0的時鐘選為SMCLK:                     最原始的做法是TA0CTL=0x02

104、00,但現(xiàn)在有更清晰的做法TA0CTL=TASSEL_2;/時鐘源選擇模式2 所以說要不斷發(fā)掘不斷積累!  (5)中斷寄存器的名字                     大家都知道中斷函數(shù)是怎么寫的,模式為:#pragma vector=中斷向量地址(名)_interrupt void 自定義中斷函數(shù)名(void)   

105、60;                  但是想要寫出來,你首先得知道中斷向量叫什么名字吧到目前,我們已經(jīng)遇到了看門狗中斷WDT_VECTOR、引腳P2的外部中斷PORT2_VECTOR、定時器A0(CCR1-CCR4和TAIFG)中斷TIMER0_A1_VECTOR還有大量的中斷向量,我們目前還不知道名字該怎么辦。打開msp430f5529.h,拉到該文件底部,就展示了定義的各種中斷向量名,還有解釋。 (

106、6)MSP430的最大特色就是低功耗,這個是體現(xiàn)在各個方面的。在整體層次上,MSP430可以設置整個系統(tǒng)的工作模式以達到適應工作要求且降低功耗的目的。為了降低功耗,處理器有幾個考慮:一個是降低工作電壓(F5529為3.3V很低了吧,而且內(nèi)部核心電壓VCORE更低); 第二個就是把暫時不用的模塊功能關閉掉(F5529各個模塊都可以獨立運行,如定時器、A/D轉(zhuǎn)換、看門狗等都可以在CPU休眠的狀態(tài)下獨立工作。若需要主CPU工作,任何一個模塊都可以通過中斷喚醒CPU,從而使系統(tǒng)以最低功耗運行。);第三個方法就是降低工作時鐘頻率。 (六)上海大學樂乎博客 > 

107、;落葉遍地 > MSP430F5529 (三)統(tǒng)一時鐘系統(tǒng)UCS-12013/8/26 12:51:46 | MSP430F5529 (三)統(tǒng)一時鐘系統(tǒng)UCS-1 1、以后要配置時鐘的地方到處都是。2、打字好累,上傳更累;3、之后我會發(fā)布PDF版,有心的同學可以下載學習。 之前有一點漏說明了,先補充上*還有一個模塊時鐘源:MODOSC,產(chǎn)生MODCLK時鐘源信號,一般只為閃存控制模塊和ADC12模塊提供服務。該模塊不被使用時自動關閉,任何模塊對該時鐘源提出使用要求時,MODOSC無需被使能即可響應該請求。430F5529中MODCLK為5MHZ。*

108、    MSP430F5529有多個時鐘源,而且很多模塊其時鐘源都是可以自由選擇的。此外,由于一般情況下,系統(tǒng)功耗是和工作頻率成正比的,因此有些時候通過選擇較低頻率的時鐘源,在滿足正常工作條件下,是可以有效降低功耗的。雖然函數(shù)庫HAL_UCS.c/h,有完整的各個控制函數(shù),但我覺得對于這一章還是對寄存器直接操作比較簡單,因為函數(shù)太短、太多了。 3.1統(tǒng)一時鐘系統(tǒng)(UCS)的簡介            Unified Clock

109、 System,UCS。合理的配置時鐘,可以達到平衡系統(tǒng)且降低功耗的目的。            MSPF5529時鐘系統(tǒng)包含5個時鐘源:                   LFXT1 外部低頻振蕩源,32.768KHZ,可以用作FLL的參照源;XT2 外部高頻振蕩源,4MHZ;VLO (Internal very low)內(nèi)部低耗低頻振蕩源,典型為10KHZ,精度一般;REFO 內(nèi)部低頻參照源,32.768KHZ,常被用作鎖相環(huán)FLL的基準頻率,精度很高,不使用時不消耗電源,其設置往往要參考LPM模式的的設置;DCO (Internal digitally-controlled)內(nèi)部數(shù)字控制振蕩源

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論