MSP430單片機應用筆記_第1頁
MSP430單片機應用筆記_第2頁
MSP430單片機應用筆記_第3頁
MSP430單片機應用筆記_第4頁
MSP430單片機應用筆記_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、MSP430單片機硬件知識(1)MSP430單片機是TI公司1996年開始推向市場的超低功耗微處理器,另外他還集成了很多模塊功能,從而使得用一片MSP430 芯片可以完成多片芯片才能完成的功能,大大縮小了產品的體積與成本。如今,MSP430單片機已經用于各個領域,尤其是儀器儀表、監測、醫療器械以及汽車電子等領域。     下面來說一下它的主要特點:(1)低電源電壓范圍,1.83.6V。(2)超低功耗,擁有5種低功耗模式(以后會詳細介紹)。(3)靈活的時鐘使用模式。(4)高速的運算能力,16位RISC架構,125ns指令周期。(5)豐富的功能模塊,這些功能模塊包括:

2、A:多通道1014位AD轉換器;B:雙路12位DA轉換器;C:比較器;D:液晶驅動器;E:電源電壓檢測;F:串行口USART(UART/SPI);G:硬件乘法器;H:看門狗定時器,多個16位、8位定時器(可進行捕獲,比較,PWM輸出);I:DMA控制器。(6)FLASH存儲器,不需要額外的高電壓就在運行種由程序控制寫擦歐哦和段的擦除;(7)MSP430芯片上包括JTAG接口,仿真調試通過一個簡單的JTAG接口轉換器就可以方便的實現如設置斷點、單步執行、讀寫寄存器等調試;(8)快速靈活的變成方式,可通過JTAG和BSL兩種方式向CPU內裝在程序。    關于他的內存

3、器結構,在匠人的博客里已有詳細的介紹,大家去看就是了。在這里我主要說說MSP430單片機的復位吧。     MSP430的復位信號有2種:上電復位信號(POR)、上電清除信號(PUC)。還有能夠觸發POR和PUC的信號:5種來在看門狗,1種來自復位管腳,1種來自寫FLASH鍵值出現錯誤所產生的信號。    POR信號只在2種情況下發生:(1)微處理上電;(2)RST/NMI管腳上產生低電平時系統復位。    PUC信號產生的條件:(1)POR信號產生;(2)看門狗有效時,看門狗定時器溢出;(3)

4、寫看門狗定時器安全鍵值出現錯誤;(4)寫FLASH存儲器安全鍵值出現錯誤。    POR和PUC兩者的關系:POR信號的產生會導致系統復位并產生PUC信號。而PUC信號不會引起POR信號的產生。    無論是POR信號還是PUC信號觸發的復位,都會使MSP430從地址0xFFFE處讀取復位中斷向量,程序從中斷向量所指的地址處開始執行。觸發PUC信號的條件中,除了POR產生觸發PUC信號外,其他的豆科一通過讀取相應的中斷向量來判斷是何種原因引起的PUC信號,以便作出相應的處理。    系統復位(指POR)后

5、的狀態為:(1)RST/NMI管腳功能被設置為復位功能;(2)所有I/O管腳被設置為輸入;(3)外圍模塊被初始化,其寄存器值為相關手冊上的默認值;(4)狀態寄存器SR復位;(5)看門狗激活,進入工作模式;(6)程序計數器PC載入0xFFFE處的地址,微處理器從此地址開始執行程序。    典型的復位電路有一下3種:(1)  在RST/NMI管腳上接100K歐的上拉電阻。(2)在(1)的基礎上再接0.1uf的電容,電容的一端接地,可以使復位更加可靠。(3)再(2)的基礎上,再在電阻上并接一個型號為IN4008的二極管,可以可靠的實現系統斷電后立即上電。典型復

6、位電路圖.rarMSP430vcc100K1MSP430RST100Kvcc0.1u2MSP430RSTvcc0.1u3MSP430單片機硬件知識(2)-MSP430單片機的時鐘系統    MSP430根據型號的不同最多可以選擇使用3個振蕩器。我們可以根據需要選擇合適的振蕩頻率,并可以在不需要時隨時關閉振蕩器,以節省功耗。這3個振蕩器分別為:(1)DCO  數控RC振蕩器。它在芯片內部,不用時可以關閉。DCO的振蕩頻率會受周圍環境溫度和MSP430工作電壓的影響,且同一型號的芯片所產生的頻率也不相同。但DCO的調節功能可以改善它的性能,他的調節分為以下3

7、步:a:選擇BCSCTL1.RSELx確定時鐘的標稱頻率;b:選擇DCOCTL.DCOx在標稱頻率基礎上分段粗調;c:選擇DCOCTL.MODx的值進行細調。(2)LFXT1  接低頻振蕩器。典型為接32768HZ的時鐘振蕩器,此時振蕩器不需要接負載電容。也可以接450KHZ8MHZ的標準晶體振蕩器,此時需要接負載電容。(3)XT2  接450KHZ8MHZ的標準晶體振蕩器。此時需要接負載電容,不用時可以關閉。    低頻振蕩器主要用來降低能量消耗,如使用電池供電的系統,高頻振蕩器用來對事件做出快速反應或者供CPU進行大量運算。 &#

8、160;  MSP430的3種時鐘信號:MCLK系統主時鐘;SMCLK系統子時鐘;ACLK輔助時鐘。(1)MCLK系統主時鐘。除了CPU運算使用此時鐘以外,外圍模塊也可以使用。MCLK可以選擇任何一個振蕩器所產生的時鐘信號并進行1、2、4、8分頻作為其信號源。(2)SMCLK系統子時鐘。供外圍模塊使用。并在使用前可以通過各模塊的寄存器實現分頻。SMCLK可以選擇任何一個振蕩器所產生的時鐘信號并進行1、2、4、8分頻作為其信號源。(3)ACLK輔助時鐘。供外圍模塊使用。并在使用前可以通過各模塊的寄存器實現分頻。但ACLK只能由LFXT1進行1、2、4、8分頻作為信號源。 &#

9、160;  PUC復位后,MCLK和SMCLK的信號源為DCO,DCO的振蕩頻率為800KHZ。ACLK的信號源為LFXT1。     MSP430內部含有晶體振蕩器失效監測電路,監測LFXT1(工作在高頻模式)和XT2輸出的時鐘信號。當時鐘信號丟失50us時,監測電路捕捉到振蕩器失效。如果MCLK信號來自LFXT1或者XT2,那么MSP430自動把MCLK的信號切換為DCO,這樣可以保證程序繼續運行。但MSP430不對工作在低頻模式的LFXT1進行監測。MSP430單片機硬件知識(3)-5種低功耗模式5種低功耗模式分別為LPM0LPM4(LO

10、W POWER MODE),CPU的活動狀態稱為AM(ACTVE MODE)模式。其中AM耗電最大,LPM4耗電最省,僅為0.1uA。另外工作電壓對功耗的影響:電壓越低功耗也越低。       系統PUC復位后,MSP430進入AM狀態。在AM狀態,程序可以選擇進入任何一種低功耗模式,然后在適當的條件下,由外圍模塊的中斷使CPU退出低功耗模式,返回AM模式,再由AM模式選擇進入相應的低功耗模式,如此類推。       工作模式的選擇由狀態寄存器SR中的SCG1、SCG0、OS

11、COFF、CPUOFF位控制。由于在CPU的頭文件中對CPU內的各寄存器和模塊的各種工作模式都作了詳盡的定義,所以編程時盡可能的利用就是了。如:要進入低功耗模式0,可在程序中直接寫:LPM0;    。進入低功耗模式4,可以寫:LMP4;就可以了。退出低功耗模式如下:       LPM0_EXIT;          /退出低功耗模式0       LPM

12、4_EXIT;          /退出低功耗模式4MSP430單片機硬件知識(4)中斷  中斷是MSP430微處理器的一大特色,有效地利用中斷可以簡化程序和提高執行效率。MSP430的幾乎每個外圍模塊都能夠產生中斷,為MSP430針對事件(即外圍模塊產生的中斷)進行的編程打下基礎。MSP430在沒有事件發生時進入低功耗模式,事件發生時,通過中斷喚醒CPU,事件處理完畢后,CPU再次進入低功耗狀態。由于CPU的運算速度和退出低功耗的速度很快,所以在應用中,CPU大部分時間都處于低功耗狀態。

13、60;      MSP430的中斷分為3種:系統復位、不可屏蔽中斷、可屏蔽中斷。      (1)系統復位的中斷向量為0xFFFE。      (2)不可屏蔽中斷的中斷向量為0xFFFC。響應不可屏蔽中斷時,硬件自動將OFIE、NMIE、ACCVIE復位。軟件首先判斷中斷源并復位中斷標志,接著執行用戶代碼。退出中斷之前需要置位OFIE、NMIE、ACCVIE,以便能夠再次響應中斷。需要特別注意點:置位OFIE、NMIE、ACCVIE后

14、,必須立即退出中斷相應程序,否則會再次觸發中斷,導致中斷嵌套,從而導致堆棧溢出,致使程序執行結果的無法預料。       (3)可屏蔽中斷的中斷來源于具有中斷能力的外圍模塊,包括看門狗定時器工作在定時器模式時溢出產生的中斷。每一個中斷都可以被自己的中斷控制位屏蔽,也可以由全局中斷控制位屏蔽。        多個中斷請求發生時,響應最高優先級中斷。響應中斷時,MSP430會將不可屏蔽中斷控制位SR.GIE復位。因此,一旦響應了中斷,即使有優先級更高的可屏蔽中斷出現,也

15、不會中斷當前正在響應的中斷,去響應另外的中斷。但SR.GIE復位不影響不可屏蔽中斷,所以仍可以接受不可屏蔽中斷的中斷請求。       中斷響應的過程:(1)如果CPU處于活動狀態,則完成當前指令;(2)若CPU處于低功耗狀態,則退出低功耗狀態;(3)將下一條指令的PC值壓入堆棧;(4)將狀態寄存器SR壓入堆棧;(5)若有多個中斷請求,響應最高優先級中斷;(6)單中斷源的中斷請求標志位自動復位,多中斷源的標志位不變,等待軟件復位;(7)總中斷允許位SR.GIE復位。SR狀態寄存器中的CPUOFF、OSCOFF、SCG1、V、N、Z、C

16、位復位;(8)相應的中斷向量值裝入PC寄存器,程序從此地址開始執行。        中斷返回的過程:(1)從堆棧中恢復PC值,若響應中斷前CPU處于低功耗模式,則可屏蔽中斷仍然恢復低功耗模式;(2)從堆棧中恢復PC值,若響應中斷前CPU不處于低功耗模式,則從此地址繼續執行程序。       MSP430各系列的中斷向量表請查閱相關資料。MSP430單片機硬件知識(5)-MSP430單片機的端口介紹MSP430的端口有P1、P2、P3、P4、P5、P6、S和COM(型

17、號不同,包含的端口也不僅相同,如MSP430X11X系列只有P1,P2端口,而MSP430X4XX系列則包含全部上述端口),它們都可以直接用于輸入/輸出。MSP430系統中沒有專門的輸入/輸出指令,輸入/輸出操作通過傳送指令來實現。端口P1P6的每一位都可以獨立用于輸入/輸出,即具有位尋址功能。常見的鍵盤接口可以直接用端口進行模擬,用查詢或者中斷方式控制。由于MSP430的端口只有數據口,沒有狀態口或控制口,在實際應用中,如在查詢式輸入/輸出傳送時,可以用端口的某一位或者幾位來傳送狀態信息,通過查詢對應位的狀態來確定外設是否處于“準備好”狀態。     

18、   端口的功能。(1)P1,P2端口: I/O,中斷功能,其他片內外設功能如定時器、比較器;(2)P3,P4P5P6端口:I/O,其他片內外設功能如SPI、UART模式,A/D轉換等;(3)S,COM端口:I/O,驅動液晶。       MSP430各端口具有豐富的控制寄存器供用戶實現相應的操作。其中P1,P2具有7個寄存器,P3P6具有4個寄存器。通過設置寄存器我們可以實現:(1)每個I/O位獨立編程;(2)任意組合輸入,輸出和中斷;(3)P1,P2所有8個位全部可以用作外部中斷處理;(4)可以使用所以指令對寄

19、存器操作;(5)可以按字節輸入、輸出,也可按位進行操作。       端口P1,P2的功能可以通過它們的7個控制寄存器來實現。這里,Px代表P1或P2。(1)PxDIR:輸入/輸出方向寄存器。  8位相互獨立,可以分別定義8個引腳的輸入/輸出方向。8位再PUC后都被復位。使用輸入/輸出功能時,應該先定義端口的方向 。作為輸入時只能讀,作為輸出時,可讀可寫。0:輸入模式;1:輸出模式。如:P1DIR|=BIT4;   /P1.4輸出 ,P2DIR=0XF0;   /高4位輸出,

20、低4位輸入。(2)PXIN:輸入寄存器,為只讀寄存器。用戶不能對它進行寫入,只能通過讀取其寄存器的內容來知道I/O口的輸入信號。所以其引腳的方向要選為輸入。如再鍵盤鍵盤掃描程序中經常要讀取行線或者列線的端口寄存器值來判斷案件情況。例如:unsigned char key;P1DIR&=BIT4;   /P1.4輸入key=P1IN&0X10;   /輸出端口P1.4的值(3)PXOUT:輸出寄存器。該寄存器為I/O端口的輸出緩沖寄存器,再讀取時輸出緩存的內容與引腳方向定義無關。改變方向寄存器的內容,輸出緩存的內容不受影響。如:PIOUT|

21、=0X01;   /P1.0輸出1  , PIOUT&=0X01;   /P1.0輸出0 。(4)PXIFG:中斷標志寄存器。他的8個標志位標志相應引腳是否有中斷請求有待處理。0:無中斷請求,  1:有中斷請求。其中斷標志分別為PXIFG.0PXIFG.7。應該注意的是:PXIFG.0PXIFG.7共用一個中斷向量,為多源中斷。當任一事件引起的中斷進行處理時,PXIFG.0PXIFG.7不會自動復位,必須由軟件來判斷是對哪一個事件,并將相應的標志復位。另外,外部中斷事件的時間必須保持不低于1.5倍的MCLK時間,以保證中斷請求

22、被接受,且使相應中斷標志位置位。(5)PXIES:中斷觸發沿選擇寄存器。如果允許PX口的某個引腳中斷,還需定義該引腳的中斷觸發方式。0:上升沿觸發使相應標志置位,1:下降沿觸發相應標志置位。如:MOV.B  #07H, &P1IES  ;p1低3位下降沿觸發中斷。(6)PXIE:中斷使能寄存器。PX口的每一個引腳都有一位用以控制該引腳是否允許中斷。0:禁止中斷 ,1:允許中斷。MOV.B  #0E0H, &P2IE  ;P2高3位允許中斷。(7)PXSEL:功能選擇寄存器。P1,P2兩端口還具有其他片內外設功能,將這些功能與芯片

23、外的聯系通過復用P1,P2引腳的方式來實現。PXSEL用來選擇引腳的I/O端口功能與外圍模塊功能。0:選擇引腳為I/O端口,1:選擇引腳為外圍模塊功能。如:P1SEL|=0X10;  /P1.4為外圍模塊功能。       端口P3、P4、P5、P6沒有中斷能力,其余功能同PI,P2。除掉端口P1,P2與中斷相關的3個寄存器,端口P3,P4,P5,P6的4個寄存器(用法同P1,P2)分別為PXDIR,PXIN,PXOUT,PXSEL可供用戶使用。      端口COM和S,他

24、們實現與液晶片的直接接口。COM為液晶片的公共端,S為液晶片的段碼端。液晶片輸出端也可經軟件配置為數字輸出端口。MSP430開發總結1.i nclude<>指要在編輯器設定目錄下,i nclude""指的是在當前工程目錄下。2.要調用另一個文件中的函數,要把這個函數文件放到當前工程目錄下,并且在工程中添加此文件。3.命名中不能有-,比如:byq-ee會認為是錯誤的,要用下劃線。4.用IAR軟件仿真時,可以加入變量,如果是查看I/O信息只需加入PXIN,PXOUT即可。5.IAR在處理字符時,要注意0,是字符處理結尾標志,他和其他編輯軟件是不同的。比如我們長用字符

25、處理回自動在結尾處加0,但IAR有些是不加的,這就要十分注意。6.如果只用到LFX1的低速時鐘,9600bit/s傳輸的話,接收會出現問題,原因是誤差太大,可以設置到4800以下。7.在寫FLASH時要注意其工作頻率在257K476k之間,如果不是,則會出現錯誤。而且FLAGH只能寫入0,這樣就出現了必須先擦除在寫入的模式。8.當IO口作為輸入時,要根據平時的狀態加電阻,平時為高時,加個上拉電阻,平時為低時加個下拉電阻以增加穩定性。9.在FLASH寫時一定要關外部中斷。10.MSP430一般是不要RC復位的,一般只要接個100K左右電阻就可以了,如果要加電容,它的大小要根據以下兩個標準選擇:&

26、#160;   下載程序不會出現下載不了    程序上電會能穩定復位11.用&表達式作為判斷時,不要忘記加括號。12.不要使用中斷嵌套。進入低功耗和退出低功耗“標志位”相信很多人在應用430的時候都喜歡吧進入低功耗和退出低功耗當做一個“標志位”來使用,譬如: 復制代碼 void main(void)   while(1)          LPMx;         #pragma vector=xxxxxxx _interrupt vo

27、id xx(void)    LPMx_EXIT; 在進入低功耗和退出低功耗,好些人喜歡_BIS_SR(CPUOFF)或_BIS_SR(LPM0_bits); 這樣是可以的。 但是在中斷里退出低功耗用_BIC_SR(CPUOFF)或_BIC_SR(LPM0_bits);是不可以的。因為這個就相當于在中斷里直接改SR,中斷函數執行完畢后,SR出棧又進入了低功耗。 應該用LPMx_EXIT;或者_BIC_SR_IRQ(LPM0_bits);這個語句相當于匯編的bic.b  #CPUOFF,(0)SP 之前用匯編很注意這個問題,可是用C的時候卻疏忽了_BIC_SR(LP

28、M0_bits);和LPMx_EXIT;或者_BIC_SR_IRQ(LPM0_bits);的區別。在剛開始使用低功耗的時候照葫蘆畫瓢(好像是LIERDA的一個技術支持工程師給我的例程),喜歡將低功耗的代碼寫成:for(;)  _BIS_SR(LPM0_bits);  _NOP(); 那個GG說這樣才能保證低功耗(當時對這個GG十分的佩服,居然比TI的程序員都厲害)。后來仿真才知道,這個循環完全是沒有必要的。這是因為低功耗模式和中斷喚醒CPU的工作過程是這樣子滴:1)低功耗,CPU休眠;2)有中斷標志位置位,喚醒CPU;3)執行中斷服務程序,至完成;4)退出中斷服務

29、,MSP繼續進入低功耗,CPU再次休眠,直到下次中斷到來。所以MSP根本就沒有執行這個循環過程。還是TI的程序是對的。即_BIS_SR(LPM0_bits);不過,這個循環還是在某些情況下有用處的,我們可以在中斷的結束前加一個人工喚醒CPU的一個本征函數,比如_BIC_SR_IRQ(LPM0_bits);(查查.h文件看看,我記得是這個函數)這讓就可以讓MSP在退出中斷服務后繼續執行下面的語句,直到再次循環到_BIS_SR();這條語句。這樣還是很有用處的。比如可以使得我的鍵盤中斷函數只處理得到鍵值的部分,而鍵盤的功能(其中要用到發送中斷)的實現放在_BIS_SR();后面,這樣能盡量減少中斷

30、的嵌套。for(;)  _BIS_SR(LPM0_bits);  key_deal();/*   interrupt p1  */#pragma vector=PORT1_VECTOR_interrupt void getKeyValue(void)  . . .  _BIC_SR_IRQ(LPM0_bits);msp430里的標志位定義方法msp430里沒有位定義可下面結構體定義來代替struct flag_inf             unsigne

31、d doc:1;       unsigned m:1;       unsigned up:1;       unsigned down:1;       unsigned a_v_d:1;       unsigned id_set:1;       unsigned chao_biao:1;       unsi

32、gned tx_data:1;       unsigned spi_rx_end:1;       unsigned c_r_start:1;       flag;使用時直接用flag.doc    flag.m     flag.up 這些標志位大家可以試試!<<分享MSP430不占用IO實現最低成本單鍵電源開關>>   MSP430提供了很好的低功耗能力,但是很多時候,一個外圍電路就花

33、費了很多額外的電力,造成低功耗無法徹底實現。   現在很多電子設備都是使用電子開關控制設備是否工作的,大多教材上都是使用IO中斷來實現,并且占用兩個IO口,一個是電源開關鈕,另一個是用來控制電源的,通過電阻接一個三極管。   個人認為,對于MCU來說,節省IO口對功能實現很有意義,只有這樣才能在有限的IO口上設計更多的功能,特別是像F20XX的那種只有10個IO的片子,更是如此。所以我設計了一個利用NMI/RST來實現電源控制的方法。由于這個腳本來就是獨立的,所以用它實現功能時就不會占用IO了。要運行以下程序,只需要板子上有一個標準的帶RESET鈕的上電

34、復位電路即可。以下程序在MSP430F135上運行通過,原理簡單,就不多說了,大家看程序:#include "msp430x13x.h"volatile unsigned short AFlag;            / Active Flagvoid main(void)  WDTCTL = WDTPW + WDTHOLD + WDTNMI;   / Stop watchdog timer  P1DIR = 0xFF;       

35、                 / P1置為輸出方式  P1OUT = 0xFF;                        / P1輸出全置為1  P1SEL = 0x00;                

36、60;       / P1上的復用功能全部關閉  /其它IO沒有使用到的也要這樣初始化,不用的IO電路上應該懸空,不要接地。  _EINT();  AFlag = 0;  IE1 |= NMIIE;                         / Enable WDT interrupt  while(1)    

37、0; if(AFlag=1)          WDTCTL = WDTPW + WDTNMI + WDTTMSEL + WDTSSEL + WDTCNTCL;             / Start watchdog timer      IE1 |= WDTIE;                         / Enable WDT interrupt    &

溫馨提示

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

最新文檔

評論

0/150

提交評論