第2講MSP430單片機(jī)的GPIO與中斷系統(tǒng)_第1頁
第2講MSP430單片機(jī)的GPIO與中斷系統(tǒng)_第2頁
第2講MSP430單片機(jī)的GPIO與中斷系統(tǒng)_第3頁
第2講MSP430單片機(jī)的GPIO與中斷系統(tǒng)_第4頁
第2講MSP430單片機(jī)的GPIO與中斷系統(tǒng)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、13.1 通用IO端口3.1.1 MSP430端口概述 通用通用I/O端口是端口是MSP430單片機(jī)最重要也是最常用的外設(shè)模塊。通用單片機(jī)最重要也是最常用的外設(shè)模塊。通用I/O端口不僅可以端口不僅可以直接用于輸入直接用于輸入/輸出,而且可以為輸出,而且可以為MSP430單片機(jī)應(yīng)用系統(tǒng)提供必要的邏輯控制信號(hào)。單片機(jī)應(yīng)用系統(tǒng)提供必要的邏輯控制信號(hào)。 MSP430F5xx/6xx系列單片機(jī)最多可以提供系列單片機(jī)最多可以提供12個(gè)通用個(gè)通用I/O端口(端口(P1P11和和PJ),大部分),大部分端口有端口有8個(gè)引腳,少數(shù)端口引腳數(shù)少于個(gè)引腳,少數(shù)端口引腳數(shù)少于8個(gè)。每個(gè)個(gè)。每個(gè)I/O引腳都可以被獨(dú)立地

2、設(shè)置為輸入或者引腳都可以被獨(dú)立地設(shè)置為輸入或者輸出引腳,并且每個(gè)輸出引腳,并且每個(gè)I/O引腳都可以被獨(dú)立地讀取或者寫入,所有的端口寄存器都可以被引腳都可以被獨(dú)立地讀取或者寫入,所有的端口寄存器都可以被獨(dú)立地置位或者清零。獨(dú)立地置位或者清零。 P1P4引腳具有中斷能力。從引腳具有中斷能力。從P1和和P2端口的各個(gè)端口的各個(gè)I/O引腳引入的中斷可以獨(dú)立地被使引腳引入的中斷可以獨(dú)立地被使能,并且被設(shè)置為上升沿或者下降沿觸發(fā)中斷。所有能,并且被設(shè)置為上升沿或者下降沿觸發(fā)中斷。所有P1端口的端口的I/O引腳的中斷都來源于同引腳的中斷都來源于同一個(gè)中斷向量一個(gè)中斷向量P1IV。同理,。同理,P2端口的中斷

3、源都來源于另一個(gè)中斷向量端口的中斷源都來源于另一個(gè)中斷向量P2IV。 可以對(duì)每個(gè)獨(dú)立的端口進(jìn)行字節(jié)訪問,或者將兩個(gè)結(jié)合起來進(jìn)行字訪問。端口組合可以對(duì)每個(gè)獨(dú)立的端口進(jìn)行字節(jié)訪問,或者將兩個(gè)結(jié)合起來進(jìn)行字訪問。端口組合P1和和P2、P3和和P4、P5和和P6、P7和和P8可結(jié)合起來稱為可結(jié)合起來稱為PA、PB、PC和和PD端口。當(dāng)進(jìn)行字操作端口。當(dāng)進(jìn)行字操作寫入寫入PA口時(shí),所有的口時(shí),所有的16位數(shù)據(jù)都被寫入這個(gè)端口;利用字節(jié)操作寫入位數(shù)據(jù)都被寫入這個(gè)端口;利用字節(jié)操作寫入PA端口低字節(jié)時(shí),端口低字節(jié)時(shí),高字節(jié)保持不變;利用字節(jié)指令寫入高字節(jié)保持不變;利用字節(jié)指令寫入PA端口的高字節(jié)時(shí),低字節(jié)保

4、持不變。其他端口也端口的高字節(jié)時(shí),低字節(jié)保持不變。其他端口也是一樣。當(dāng)寫入的數(shù)據(jù)長度小于端口的最大長度時(shí),那些沒有用到的位保持不變。應(yīng)用是一樣。當(dāng)寫入的數(shù)據(jù)長度小于端口的最大長度時(shí),那些沒有用到的位保持不變。應(yīng)用這個(gè)規(guī)則來訪問所有端口,除了中斷向量寄存器這個(gè)規(guī)則來訪問所有端口,除了中斷向量寄存器P1IV和和P2IV,它們只能進(jìn)行字節(jié)操作。,它們只能進(jìn)行字節(jié)操作。23.1 通用IO端口3.1.1 MSP430端口概述GPIO基本都是用于芯片與片外器件或設(shè)備的交互。基本都是用于芯片與片外器件或設(shè)備的交互。檢測(cè)數(shù)字輸入,如鍵盤或開關(guān)信號(hào);檢測(cè)數(shù)字輸入,如鍵盤或開關(guān)信號(hào);驅(qū)動(dòng)驅(qū)動(dòng)LED,蜂鳴器或,蜂鳴

5、器或LCD等其他指示器;等其他指示器;控制片外器件,較高級(jí)的使用可以用它們(通過控制片外器件,較高級(jí)的使用可以用它們(通過程序)模擬很多器件的時(shí)序達(dá)到控制相應(yīng)器件的程序)模擬很多器件的時(shí)序達(dá)到控制相應(yīng)器件的目的,比如模擬目的,比如模擬SPI和模擬總線等。和模擬總線等。GPIO (General Purpose I/O),通用輸入輸出端口,通用輸入輸出端口。MSP430的GPIO 特點(diǎn)(1/4)2022-5-273 有端口有端口P1、P2、P3、P4、P5、P6、P7、P8、P9 、P10 、P11 、S和和COM。產(chǎn)品因型號(hào)不同可包含上述所。產(chǎn)品因型號(hào)不同可包含上述所有或部分端口。如下表所示:

6、有或部分端口。如下表所示:MSP430的GPIO 特點(diǎn)(2/4)2022-5-274n具有中斷能力的端口:具有中斷能力的端口:P1P4。 端口端口P1P4具有輸入輸出、中斷和外部模塊功能。這些具有輸入輸出、中斷和外部模塊功能。這些 功能可以通過它們各自功能可以通過它們各自9個(gè)控制寄存器的設(shè)置來實(shí)現(xiàn)。個(gè)控制寄存器的設(shè)置來實(shí)現(xiàn)。 所有所有P1端口的端口的I/O引腳的中斷都來源于同一個(gè)中斷向量引腳的中斷都來源于同一個(gè)中斷向量P1IV。同理,。同理,P2端口的中斷源都來源于另一個(gè)中斷向量端口的中斷源都來源于另一個(gè)中斷向量P2IV。n不具有中斷能力的端口:其他端口不具有中斷能力的端口:其他端口 P5和其

7、他端口沒有中斷能力,其余功能同和其他端口沒有中斷能力,其余功能同P1P4, 可以實(shí)現(xiàn)輸入輸出功能和外圍模塊功能。可以實(shí)現(xiàn)輸入輸出功能和外圍模塊功能。n端口端口COM和和S 這些端口實(shí)現(xiàn)與液晶片的直接接口。這些端口實(shí)現(xiàn)與液晶片的直接接口。COM端口為液晶片端口為液晶片的公共端,的公共端,S口為液晶片的段碼端??跒橐壕亩未a端。MSP430的GPIO 特點(diǎn)(3/4)功能豐富功能豐富2022-5-275MSP430各端口和功能,如下表所示:各端口和功能,如下表所示:端口引腳還可以獨(dú)立的配置成特殊功能,例如端口引腳還可以獨(dú)立的配置成特殊功能,例如:USART 通用串行同步通用串行同步/異步通信模塊;

8、異步通信模塊;模擬信號(hào)比較器;模擬信號(hào)比較器;模擬模擬數(shù)字轉(zhuǎn)換器;數(shù)字轉(zhuǎn)換器;其他功能其他功能 (請(qǐng)參見具體芯片的數(shù)據(jù)手冊(cè)請(qǐng)參見具體芯片的數(shù)據(jù)手冊(cè))。MSP430的GPIO 特點(diǎn)(4/4)寄存器豐富寄存器豐富2022-5-276 MSP430各種端口有大量的控制寄存器供用戶操作。各種端口有大量的控制寄存器供用戶操作。最大限度提供了輸入最大限度提供了輸入/輸出的靈活性。輸出的靈活性。每個(gè)每個(gè)I/O口都可以獨(dú)立編程??诙伎梢元?dú)立編程。輸入或輸出可任意組合。輸入或輸出可任意組合。P1和和P2所有所有I/O口都具有邊沿可選的輸入中斷功能。口都具有邊沿可選的輸入中斷功能??梢园醋止?jié)輸入輸出,也可按位進(jìn)行

9、操作。可以按字節(jié)輸入輸出,也可按位進(jìn)行操作??稍O(shè)置可設(shè)置I/O口的上拉或下拉功能。口的上拉或下拉功能??膳渲每膳渲肐/O驅(qū)動(dòng)能力(高驅(qū)動(dòng)強(qiáng)度或低驅(qū)動(dòng)強(qiáng)度)。驅(qū)動(dòng)能力(高驅(qū)動(dòng)強(qiáng)度或低驅(qū)動(dòng)強(qiáng)度)。GPIO 寄存器(1/9)2022-5-277nPxDIR 輸入輸出方向寄存器輸入輸出方向寄存器相互獨(dú)立的相互獨(dú)立的8位分別定義了位分別定義了8個(gè)引腳的輸入個(gè)引腳的輸入/輸出方向。輸出方向。使用輸入和輸出功能時(shí),應(yīng)該先定義端口的方向。使用輸入和輸出功能時(shí),應(yīng)該先定義端口的方向。PxDIR 配置:配置: Bit = 1: 將端口引腳設(shè)置為輸出模式;將端口引腳設(shè)置為輸出模式; Bit = 0: 將端口引腳設(shè)置

10、為輸入模式。將端口引腳設(shè)置為輸入模式。例,設(shè)置例,設(shè)置P1端口的端口的P1.0引腳為輸出方向,其余引腳引腳為輸出方向,其余引腳(P1.1P1.7)設(shè)置為輸入方向。)設(shè)置為輸入方向。 P1DIR = 0 x01; / 設(shè)置設(shè)置P1端口端口P1.0引腳為輸出方向引腳為輸出方向GPIO 寄存器(2/9)2022-5-278nPxIN 輸入寄存器輸入寄存器該寄存器是只讀寄存器,即用戶不能對(duì)它寫入。該寄存器是只讀寄存器,即用戶不能對(duì)它寫入。這個(gè)寄存器是只讀的,其中的每一位都反映了其對(duì)應(yīng)這個(gè)寄存器是只讀的,其中的每一位都反映了其對(duì)應(yīng)的的I/O引腳的輸入信號(hào)引腳的輸入信號(hào)(引腳配置為通用引腳配置為通用I/O

11、)。PxIN 配置配置:Bit = 1: 輸入為高電平輸入為高電平;Bit = 0: 輸入為低電平輸入為低電平;GPIO 寄存器(3/9)2022-5-279nPxOUT 輸出寄存器輸出寄存器輸出寄存器是可讀可寫的。這個(gè)寄存器的每個(gè)位都反映輸出寄存器是可讀可寫的。這個(gè)寄存器的每個(gè)位都反映了寫入相應(yīng)輸出引腳的值。了寫入相應(yīng)輸出引腳的值。將需要的值寫入該寄存器,控制輸出引腳的電平狀態(tài)。將需要的值寫入該寄存器,控制輸出引腳的電平狀態(tài)。PxOUT 配置配置:Bit = 1: 輸出為高電平輸出為高電平;Bit = 0: 輸出為低電平輸出為低電平;PxREN寄存器中的每一位可使能或禁用相應(yīng)寄存器中的每一位

12、可使能或禁用相應(yīng)I/O引腳的引腳的上拉上拉/下拉電阻。下拉電阻。PxREN 配置配置:Bit = 1: 使能上拉使能上拉/下拉電阻下拉電阻;Bit = 0: 禁用上拉禁用上拉/下拉電阻。下拉電阻。當(dāng)使能引腳上拉或下拉功能時(shí),通過當(dāng)使能引腳上拉或下拉功能時(shí),通過 設(shè)置設(shè)置PxOUT相應(yīng)位來選擇。相應(yīng)位來選擇。GPIO 寄存器(4/9)2022-5-2710nPxREN 上拉或下拉電阻使能寄存器上拉或下拉電阻使能寄存器nBit = 1: 引腳選擇上拉引腳選擇上拉; 上拉電阻簡單來說就是把電平拉高,上拉電阻簡單來說就是把電平拉高, 通常用通常用4.710K的電阻接到的電阻接到Vcc電源電源。VCC引

13、腳引腳 Px.xRR引腳上拉引腳上拉PxREN寄存器中的每一位可使能或禁用相應(yīng)寄存器中的每一位可使能或禁用相應(yīng)I/O引腳的引腳的上拉上拉/下拉電阻。下拉電阻。PxREN 配置配置:Bit = 1: 使能上拉使能上拉/下拉電阻下拉電阻;Bit = 0: 禁用上拉禁用上拉/下拉電阻。下拉電阻。當(dāng)使能引腳上拉或下拉功能時(shí),通過當(dāng)使能引腳上拉或下拉功能時(shí),通過 設(shè)置設(shè)置PxOUT相應(yīng)位來選擇。相應(yīng)位來選擇。GPIO 寄存器(4/9)2022-5-2711nPxREN 上拉或下拉電阻使能寄存器上拉或下拉電阻使能寄存器nBit = 1: 引腳選擇上拉引腳選擇上拉 上拉電阻簡單來說就是把電平拉高,上拉電阻簡

14、單來說就是把電平拉高, 通常用通常用4.710K的電阻接到的電阻接到Vcc電源電源。nBit = 0: 引腳選擇下拉引腳選擇下拉; 下拉電阻則是把電平拉低,電阻接到下拉電阻則是把電平拉低,電阻接到GND地線上地線上。VCC引腳引腳 Px.xRR引腳下拉引腳下拉GPIO 寄存器(5/9)2022-5-2712nPxSEL 功能選擇寄存器功能選擇寄存器I/O端口還具有其他片內(nèi)外設(shè)功能,為減少引腳,將這端口還具有其他片內(nèi)外設(shè)功能,為減少引腳,將這些外設(shè)功能與些外設(shè)功能與I/O端口引腳復(fù)用來實(shí)現(xiàn)。端口引腳復(fù)用來實(shí)現(xiàn)。PxSEL來選擇引腳的來選擇引腳的I/O端口功能與外圍模塊功能。端口功能與外圍模塊功能

15、。PxSEL的配置的配置:Bit = 0: 選擇引腳為選擇引腳為I/O端口端口;Bit = 1: 選擇引腳為外設(shè)功能。選擇引腳為外設(shè)功能。GPIO 寄存器(6/9)2022-5-2713nPxDS 輸出驅(qū)動(dòng)強(qiáng)度寄存器輸出驅(qū)動(dòng)強(qiáng)度寄存器PxDS寄存器的每個(gè)位,設(shè)置引腳的輸出強(qiáng)度為高驅(qū)動(dòng)寄存器的每個(gè)位,設(shè)置引腳的輸出強(qiáng)度為高驅(qū)動(dòng)強(qiáng)度或低驅(qū)動(dòng)強(qiáng)度。強(qiáng)度或低驅(qū)動(dòng)強(qiáng)度。默認(rèn)值為低驅(qū)動(dòng)強(qiáng)度。默認(rèn)值為低驅(qū)動(dòng)強(qiáng)度。PxDS的配置的配置:Bit = 0: 低驅(qū)動(dòng)強(qiáng)度;低驅(qū)動(dòng)強(qiáng)度;Bit = 1: 高驅(qū)動(dòng)強(qiáng)度。高驅(qū)動(dòng)強(qiáng)度。GPIO 寄存器(7/9)2022-5-2714nPxIE 中斷使能寄存器中斷使能寄存器(僅

16、中斷端口(僅中斷端口P1和和P2)該寄存器的該寄存器的8位與端口的位與端口的8個(gè)引腳一一對(duì)應(yīng),其中某一位個(gè)引腳一一對(duì)應(yīng),其中某一位置位表示允許對(duì)應(yīng)的引腳在電平變化(上升沿或下降沿)置位表示允許對(duì)應(yīng)的引腳在電平變化(上升沿或下降沿)時(shí)產(chǎn)生中斷,否則,表示禁止該位的中斷。時(shí)產(chǎn)生中斷,否則,表示禁止該位的中斷。每個(gè)每個(gè)PxIE位使能的中斷請(qǐng)求都與相應(yīng)的位使能的中斷請(qǐng)求都與相應(yīng)的PxIFG中斷標(biāo)志中斷標(biāo)志相關(guān)聯(lián),可通過寫相關(guān)聯(lián),可通過寫PxOUT和和PxDIR來設(shè)置來設(shè)置PxIFG。PxIE的配置的配置:Bit = 1: 允許中斷;允許中斷;Bit = 0: 禁止中斷。禁止中斷。GPIO 寄存器(8/

17、9)2022-5-2715nPxIES 中斷觸發(fā)沿選擇寄存器中斷觸發(fā)沿選擇寄存器(僅中斷端口(僅中斷端口P1和和P2)如果允許如果允許Px口的某個(gè)引腳中斷口的某個(gè)引腳中斷(即即PxIE和和GIE已設(shè)置已設(shè)置),還需定義該引腳的中斷觸發(fā)方式。還需定義該引腳的中斷觸發(fā)方式。該寄存器可讀可寫,寄存器的該寄存器可讀可寫,寄存器的8位分別對(duì)應(yīng)位分別對(duì)應(yīng)Px口口8個(gè)引腳個(gè)引腳PxIES的配置的配置:Bit = 1: 下降沿使相應(yīng)中斷標(biāo)志置位;下降沿使相應(yīng)中斷標(biāo)志置位;Bit = 0: 上升沿使相應(yīng)中斷標(biāo)志置位。上升沿使相應(yīng)中斷標(biāo)志置位。GPIO 寄存器(9/9)2022-5-2716nPxIFG 中斷標(biāo)志

18、寄存器中斷標(biāo)志寄存器(僅中斷端口(僅中斷端口P1和和P2)該寄存器用來表示對(duì)應(yīng)引腳是否產(chǎn)生了由該寄存器用來表示對(duì)應(yīng)引腳是否產(chǎn)生了由PxIES設(shè)定設(shè)定的電平跳變。的電平跳變。如果在如果在GIE置位,引腳對(duì)應(yīng)的中斷使能寄存器置位,引腳對(duì)應(yīng)的中斷使能寄存器PxIE位位置位,則會(huì)向置位,則會(huì)向CPU請(qǐng)求中斷處理。請(qǐng)求中斷處理。中斷標(biāo)志中斷標(biāo)志PxIFG.0PxIFG.7共用一個(gè)中斷向量,共用一個(gè)中斷向量, PxIFG.0PxIFG.7不會(huì)自動(dòng)復(fù)位。必須用軟件來判定不會(huì)自動(dòng)復(fù)位。必須用軟件來判定 是對(duì)哪一個(gè)事件服務(wù),并將相應(yīng)的標(biāo)志復(fù)位。是對(duì)哪一個(gè)事件服務(wù),并將相應(yīng)的標(biāo)志復(fù)位。PxIFG的配置的配置:Bi

19、t = 0: 沒有中斷請(qǐng)求;沒有中斷請(qǐng)求;Bit = 1: 有中斷請(qǐng)求。有中斷請(qǐng)求。174.1 中斷的基本概念1中斷定義中斷定義 中斷是暫停中斷是暫停CPU正在運(yùn)行的程序,轉(zhuǎn)去執(zhí)行相應(yīng)的中斷服務(wù)程序,完畢后返回被中斷正在運(yùn)行的程序,轉(zhuǎn)去執(zhí)行相應(yīng)的中斷服務(wù)程序,完畢后返回被中斷的程序繼續(xù)運(yùn)行的現(xiàn)象和技術(shù)。的程序繼續(xù)運(yùn)行的現(xiàn)象和技術(shù)。2 2中斷源中斷源 把引起中斷的原因或者能夠發(fā)出中斷請(qǐng)求的信號(hào)源統(tǒng)稱為中斷源。中斷首先需要由中把引起中斷的原因或者能夠發(fā)出中斷請(qǐng)求的信號(hào)源統(tǒng)稱為中斷源。中斷首先需要由中斷源發(fā)出中斷請(qǐng)求,并征得系統(tǒng)允許后才會(huì)發(fā)生。在轉(zhuǎn)去執(zhí)行中斷服務(wù)程序前,程序需斷源發(fā)出中斷請(qǐng)求,并征得

20、系統(tǒng)允許后才會(huì)發(fā)生。在轉(zhuǎn)去執(zhí)行中斷服務(wù)程序前,程序需保護(hù)中斷現(xiàn)場;在執(zhí)行完中斷服務(wù)程序后,應(yīng)恢復(fù)中斷現(xiàn)場。保護(hù)中斷現(xiàn)場;在執(zhí)行完中斷服務(wù)程序后,應(yīng)恢復(fù)中斷現(xiàn)場。中斷源一般分成兩類:外部硬件中斷源和內(nèi)部軟件中斷源。外部硬件中斷源包括可屏蔽中斷源一般分成兩類:外部硬件中斷源和內(nèi)部軟件中斷源。外部硬件中斷源包括可屏蔽中斷和不可屏蔽中斷。內(nèi)部軟件中斷源產(chǎn)生于單片機(jī)內(nèi)部,主要有以下中斷和不可屏蔽中斷。內(nèi)部軟件中斷源產(chǎn)生于單片機(jī)內(nèi)部,主要有以下3種:由種:由CPU運(yùn)運(yùn)行結(jié)果產(chǎn)生;執(zhí)行中斷指令行結(jié)果產(chǎn)生;執(zhí)行中斷指令I(lǐng)NT3;使用;使用DEBUG中單步或斷點(diǎn)設(shè)置引起。中單步或斷點(diǎn)設(shè)置引起。3 3中斷向量表中

21、斷向量表4.1 中斷的基本概念 中斷向量是指中斷服務(wù)程序的入口地址,每個(gè)中斷向量被分配給中斷向量是指中斷服務(wù)程序的入口地址,每個(gè)中斷向量被分配給4個(gè)連續(xù)的字節(jié)單元,個(gè)連續(xù)的字節(jié)單元,兩個(gè)高字節(jié)單元存放入口的段地址兩個(gè)高字節(jié)單元存放入口的段地址CS,兩個(gè)低字節(jié)單元存放入口的偏移量,兩個(gè)低字節(jié)單元存放入口的偏移量IP。為了讓。為了讓CPU方便地查找到對(duì)應(yīng)的中斷向量,就需要在內(nèi)存中建立一張查詢表,即中斷向量表。方便地查找到對(duì)應(yīng)的中斷向量,就需要在內(nèi)存中建立一張查詢表,即中斷向量表。4 4中斷優(yōu)先級(jí)中斷優(yōu)先級(jí) 凡事都有輕重緩急之分,不同的中斷請(qǐng)求表示不同的中斷事件,因此,凡事都有輕重緩急之分,不同的中

22、斷請(qǐng)求表示不同的中斷事件,因此,CPU對(duì)不同中對(duì)不同中斷請(qǐng)求相應(yīng)地也有輕重緩急之分。在單片機(jī)中,給每個(gè)中斷源指定一個(gè)優(yōu)先級(jí),稱為中斷請(qǐng)求相應(yīng)地也有輕重緩急之分。在單片機(jī)中,給每個(gè)中斷源指定一個(gè)優(yōu)先級(jí),稱為中斷優(yōu)先級(jí)。斷優(yōu)先級(jí)。5斷點(diǎn)和中斷現(xiàn)場斷點(diǎn)和中斷現(xiàn)場 斷點(diǎn)是指斷點(diǎn)是指CPU執(zhí)行現(xiàn)行程序被中斷時(shí)的下一條指令的地址,又稱斷點(diǎn)地址。執(zhí)行現(xiàn)行程序被中斷時(shí)的下一條指令的地址,又稱斷點(diǎn)地址。 中斷現(xiàn)場是指中斷現(xiàn)場是指CPU在轉(zhuǎn)去執(zhí)行中斷服務(wù)程序前的運(yùn)行狀態(tài),包括在轉(zhuǎn)去執(zhí)行中斷服務(wù)程序前的運(yùn)行狀態(tài),包括CPU狀態(tài)寄存器和斷狀態(tài)寄存器和斷點(diǎn)地址等。點(diǎn)地址等。4.2 MSP430單片機(jī)中斷源MSP430單

23、片機(jī)的中斷源結(jié)構(gòu)如圖單片機(jī)的中斷源結(jié)構(gòu)如圖4.2.1所示。所示。MSP430單片機(jī)的中斷優(yōu)先級(jí)是固定的,單片機(jī)的中斷優(yōu)先級(jí)是固定的,由硬件確定,用戶不能更改。當(dāng)多個(gè)中斷同時(shí)發(fā)生中斷請(qǐng)求時(shí),由硬件確定,用戶不能更改。當(dāng)多個(gè)中斷同時(shí)發(fā)生中斷請(qǐng)求時(shí),CPU按照中斷優(yōu)先級(jí)的按照中斷優(yōu)先級(jí)的高低順序依次響應(yīng)。高低順序依次響應(yīng)。MSP430單片機(jī)包含單片機(jī)包含3類中斷源:系統(tǒng)復(fù)位中斷源、不可屏蔽中斷源類中斷源:系統(tǒng)復(fù)位中斷源、不可屏蔽中斷源和可屏蔽中斷源。和可屏蔽中斷源。圖圖4.2.1 MSP430單片機(jī)的中斷源結(jié)構(gòu)單片機(jī)的中斷源結(jié)構(gòu)MSP430單片機(jī)的中斷向量表被安排在單片機(jī)的中斷向量表被安排在0FFF

24、FH0FF80H空間,具有最大空間,具有最大64個(gè)中斷源。個(gè)中斷源。表表4.2.1為為MSP430單片機(jī)的中斷向量表。單片機(jī)的中斷向量表。4.2 MSP430單片機(jī)中斷源表表4.2.1 MSP430中斷向量表中斷向量表4.3 中斷響應(yīng)過程 中斷響應(yīng)過程為從中斷響應(yīng)過程為從CPU接收一個(gè)中斷請(qǐng)求開始至執(zhí)行第一條中斷服務(wù)程序指令結(jié)束,共需要接收一個(gè)中斷請(qǐng)求開始至執(zhí)行第一條中斷服務(wù)程序指令結(jié)束,共需要6個(gè)時(shí)鐘周期。中斷響應(yīng)過程如下:個(gè)時(shí)鐘周期。中斷響應(yīng)過程如下: 執(zhí)行完當(dāng)前正在執(zhí)行的指令;執(zhí)行完當(dāng)前正在執(zhí)行的指令; 將程序計(jì)數(shù)器(將程序計(jì)數(shù)器(PC)壓入堆棧,程序計(jì)數(shù)器指向下一條指令;)壓入堆棧,程

25、序計(jì)數(shù)器指向下一條指令; 將狀態(tài)寄存器(將狀態(tài)寄存器(SR)壓入堆棧,狀態(tài)寄存器保存了當(dāng)前程序執(zhí)行的狀態(tài);)壓入堆棧,狀態(tài)寄存器保存了當(dāng)前程序執(zhí)行的狀態(tài); 如果有多個(gè)中斷源請(qǐng)求中斷,選擇最高優(yōu)先級(jí),并掛起當(dāng)前的程序;如果有多個(gè)中斷源請(qǐng)求中斷,選擇最高優(yōu)先級(jí),并掛起當(dāng)前的程序; 清除中斷標(biāo)志位,如果有多個(gè)中斷請(qǐng)求源,則予以保留等待下一步處理;清除中斷標(biāo)志位,如果有多個(gè)中斷請(qǐng)求源,則予以保留等待下一步處理; 清除狀態(tài)寄存器清除狀態(tài)寄存器SR,保留,保留SCG0,因而,因而CPU可從任何低功耗模式下喚醒;可從任何低功耗模式下喚醒; 將中斷服務(wù)程序入口地址加載給程序計(jì)數(shù)器(將中斷服務(wù)程序入口地址加載給

26、程序計(jì)數(shù)器(PC),轉(zhuǎn)向執(zhí)行中斷服務(wù)子程序。),轉(zhuǎn)向執(zhí)行中斷服務(wù)子程序。 中斷響應(yīng)過程示例圖如圖中斷響應(yīng)過程示例圖如圖4.3.1所示。所示。圖圖4.3.1 中斷響應(yīng)過程示例圖中斷響應(yīng)過程示例圖4.4 中斷返回過程 通過執(zhí)行中斷服務(wù)程序終止指令(通過執(zhí)行中斷服務(wù)程序終止指令(RETI)開始中斷的返回,中斷返回過程需要)開始中斷的返回,中斷返回過程需要5個(gè)時(shí)鐘周期,個(gè)時(shí)鐘周期,主要包含以下過程:主要包含以下過程: 從堆棧中彈出之前保存的狀態(tài)寄存器給從堆棧中彈出之前保存的狀態(tài)寄存器給SR; 從堆棧中彈出之前保存的程序計(jì)數(shù)器給從堆棧中彈出之前保存的程序計(jì)數(shù)器給PC; 繼續(xù)執(zhí)行中斷時(shí)的下一條指令。繼續(xù)執(zhí)

27、行中斷時(shí)的下一條指令。 中斷返回過程示意圖如圖中斷返回過程示意圖如圖4.4.1所示。所示。圖圖4.4.1 中斷返回過程示意圖中斷返回過程示意圖4.5 中斷嵌套 由中斷響應(yīng)過程可知,當(dāng)進(jìn)入中斷入口后,由中斷響應(yīng)過程可知,當(dāng)進(jìn)入中斷入口后,MSP430單片機(jī)會(huì)自動(dòng)清除總中斷允許標(biāo)志位單片機(jī)會(huì)自動(dòng)清除總中斷允許標(biāo)志位GIE,也就是說,也就是說,MSP430單片機(jī)的中斷默認(rèn)是不能發(fā)生嵌套的,即使高級(jí)中斷也不能打斷低級(jí)中斷的執(zhí)行,這就避免了當(dāng)前中斷未單片機(jī)的中斷默認(rèn)是不能發(fā)生嵌套的,即使高級(jí)中斷也不能打斷低級(jí)中斷的執(zhí)行,這就避免了當(dāng)前中斷未完成時(shí)進(jìn)入另一個(gè)中斷的可能。完成時(shí)進(jìn)入另一個(gè)中斷的可能。 如圖如

28、圖4.5.1(a)所示,如果在執(zhí)行中斷服務(wù)程序所示,如果在執(zhí)行中斷服務(wù)程序A時(shí),發(fā)生了中斷請(qǐng)求時(shí),發(fā)生了中斷請(qǐng)求B,B的中斷標(biāo)志位置的中斷標(biāo)志位置1,但不會(huì)立即響,但不會(huì)立即響應(yīng)應(yīng)B的中斷,需自動(dòng)等待的中斷,需自動(dòng)等待A執(zhí)行完成返回后(執(zhí)行完成返回后(GIE自動(dòng)恢復(fù)),才進(jìn)入自動(dòng)恢復(fù)),才進(jìn)入B的中斷服務(wù)程序。的中斷服務(wù)程序。 如圖如圖4.5.1(b)所示,如果在執(zhí)行中斷服務(wù)程序)所示,如果在執(zhí)行中斷服務(wù)程序A時(shí),有多個(gè)中斷發(fā)生,會(huì)在時(shí),有多個(gè)中斷發(fā)生,會(huì)在A中斷執(zhí)行完畢后,依照中斷優(yōu)中斷執(zhí)行完畢后,依照中斷優(yōu)先級(jí)由高至低的順序依次執(zhí)行各個(gè)待執(zhí)行的中斷服務(wù)程序。先級(jí)由高至低的順序依次執(zhí)行各個(gè)待

29、執(zhí)行的中斷服務(wù)程序。圖圖4.5.1 多種中斷發(fā)生情況示意圖多種中斷發(fā)生情況示意圖4.5 中斷嵌套 由以上兩種情況可知,先發(fā)生的中斷將會(huì)導(dǎo)致后發(fā)生的中斷處理延遲。為了由以上兩種情況可知,先發(fā)生的中斷將會(huì)導(dǎo)致后發(fā)生的中斷處理延遲。為了避免這種情況,要求所有的中斷都盡快執(zhí)行完畢,則需允許中斷的嵌套,如圖避免這種情況,要求所有的中斷都盡快執(zhí)行完畢,則需允許中斷的嵌套,如圖4.5.1(c)所示。這種情況需要在所有的中斷入口處都加一句開中斷的語句:)所示。這種情況需要在所有的中斷入口處都加一句開中斷的語句:_EINT(),恢復(fù)總的中斷允許。中斷嵌套被允許后,所有中斷能夠立即被執(zhí)行,恢復(fù)總的中斷允許。中斷嵌

30、套被允許后,所有中斷能夠立即被執(zhí)行,因此,能夠保證事件的嚴(yán)格實(shí)時(shí)性要求。以因此,能夠保證事件的嚴(yán)格實(shí)時(shí)性要求。以ADC中斷為例:中斷為例:#pragma vector = ADC12_VECTOR_ _interrupt void ADC12_ISR(void) _EINT();中斷函數(shù)的寫法: #pragma vector = PORT1_VECTOR_interrupt void port_1(void)語法:interrupt void 函數(shù)名()參數(shù):中斷函數(shù)沒有參數(shù)。中斷函數(shù)需要指定中斷向量。返回:中斷返回一般是 void,沒有返回值。4.5 中斷函數(shù)的寫法【例4.1.1】 在MSP

31、430單片機(jī)系統(tǒng)中,P1.5、P1.6、P1.7發(fā)生中斷后執(zhí)行不同的代碼。#pragma vector=PORT1_VECTOR / P1口中斷源口中斷源_ _interrupt void Port_1(void) / 聲明一個(gè)中斷服務(wù)程序,名為聲明一個(gè)中斷服務(wù)程序,名為Port_1() if(P1IFG&BIT5) / 判斷判斷P1中斷標(biāo)志第中斷標(biāo)志第5位位 / 在這里寫在這里寫P1.5中斷服務(wù)程序中斷服務(wù)程序 if(P1IFG&BIT5) / 判斷判斷P1中斷標(biāo)志第中斷標(biāo)志第6位位 / 在這里寫在這里寫P1.6中斷服務(wù)程序中斷服務(wù)程序 if(P1IFG&BIT5)

32、/ 判斷判斷P1中斷標(biāo)志第中斷標(biāo)志第7位位 / 在這里寫在這里寫P1.7中斷服務(wù)程序中斷服務(wù)程序 P1IFG=0; / 清除清除P1所有中斷標(biāo)志位所有中斷標(biāo)志位4.2 按鍵查詢【例4.1.2】 利用軟件循環(huán)查詢P4.2引腳的輸入狀態(tài),若P4.2輸入為高電平,則使P4.4輸出高電平;若P4.2輸入為低電平,則使P4.4輸出低電平。#include void main(void) WDTCTL = WDTPW + WDTHOLD; / 關(guān)閉看門狗關(guān)閉看門狗 P4DIR |= BIT4; / 設(shè)設(shè)P4.4為輸出方向?yàn)檩敵龇较?P4DIR &= BIT2; / 設(shè)設(shè)P4.2為輸入方向?yàn)檩斎敕较?/p>

33、 while (1) / 循環(huán)查詢循環(huán)查詢P4.2引腳輸入狀引腳輸入狀態(tài)態(tài) if (P4IN & BIT2)=0) P4OUT |= BIT4; / 如果如果P4.2輸入為高,則使輸入為高,則使P4.4輸出高輸出高 else P4OUT &= BIT4; / 否則,使否則,使P4.4輸出低電平輸出低電平 4.6按鍵中斷【例4.1.3】 利用按鍵外部中斷方式,實(shí)現(xiàn)反轉(zhuǎn)P4.4引腳輸出狀態(tài)。P4.2選擇GPIO功能,內(nèi)部上拉電阻使能,且使能中斷。當(dāng)P4.2引腳上產(chǎn)生下降沿時(shí),觸發(fā)P4端口外部中斷,在中斷服務(wù)程序中,反轉(zhuǎn)P4.4端口輸出狀態(tài)。#include void main(void) WDTCTL = WDTPW + WDTHOLD; / 關(guān)閉看門狗關(guān)閉看門狗 P4DIR |= BIT4; / 設(shè)置設(shè)置P4.4引腳為輸出引腳為輸出 P4DIR &= BIT2; / 設(shè)設(shè)P4.2為輸入方向?yàn)檩斎敕较?P

溫馨提示

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

評(píng)論

0/150

提交評(píng)論