KL25-ch06(串行通信模塊及第一個(gè)中斷程序結(jié)構(gòu))_第1頁
KL25-ch06(串行通信模塊及第一個(gè)中斷程序結(jié)構(gòu))_第2頁
KL25-ch06(串行通信模塊及第一個(gè)中斷程序結(jié)構(gòu))_第3頁
KL25-ch06(串行通信模塊及第一個(gè)中斷程序結(jié)構(gòu))_第4頁
KL25-ch06(串行通信模塊及第一個(gè)中斷程序結(jié)構(gòu))_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1第第6章章 串行通信模塊及第一個(gè)中斷程序結(jié)構(gòu)串行通信模塊及第一個(gè)中斷程序結(jié)構(gòu)主要內(nèi)容:主要內(nèi)容:6.1 6.1 異步串行通信的通用基礎(chǔ)知識(shí)異步串行通信的通用基礎(chǔ)知識(shí)6.2 UART6.2 UART模塊功能概述及編程結(jié)構(gòu)模塊功能概述及編程結(jié)構(gòu)6.3 UART6.3 UART驅(qū)動(dòng)構(gòu)件封裝驅(qū)動(dòng)構(gòu)件封裝6.4 KL256.4 KL25的中斷機(jī)制及的中斷機(jī)制及UARTUART接收中斷程序?qū)嵗邮罩袛喑绦驅(qū)嵗?.5 6.5 進(jìn)一步討論進(jìn)一步討論6.6 6.6 本章小結(jié)本章小結(jié)26.1 異步串行通信的通用基礎(chǔ)知識(shí)異步串行通信的通用基礎(chǔ)知識(shí)6.1.1 6.1.1 串行通信的基本概念串行通信的基本概念實(shí)現(xiàn)異步

2、串行通信功能的模塊在一部分實(shí)現(xiàn)異步串行通信功能的模塊在一部分MCUMCU中被稱為中被稱為通用異步收發(fā)器(通用異步收發(fā)器(Universal Asynchronous Universal Asynchronous Receiver/TransmittersReceiver/Transmitters,UARTUART),在另一些),在另一些MCUMCU中被稱為中被稱為串行通信接口(串行通信接口(Serial Communication InterfaceSerial Communication Interface,SCISCI)。)。1.1.異步串行通信的格式異步串行通信的格式異步串行通信通常采用

3、異步串行通信通常采用NRZNRZ數(shù)據(jù)格式數(shù)據(jù)格式, , 其英文譯為其英文譯為“標(biāo)準(zhǔn)不歸零傳號(hào)標(biāo)準(zhǔn)不歸零傳號(hào)/ /空號(hào)數(shù)據(jù)格式空號(hào)數(shù)據(jù)格式”,“,“不歸零不歸零”的最初含的最初含義是:用正、負(fù)電平表示二進(jìn)制值,不使用零電平。義是:用正、負(fù)電平表示二進(jìn)制值,不使用零電平?!癿ark/space”mark/space”即即“傳號(hào)傳號(hào)/ /空號(hào)空號(hào)”分別是表示兩種狀態(tài)的分別是表示兩種狀態(tài)的物理名稱,邏輯名稱記為物理名稱,邏輯名稱記為“1/0”1/0”。 下圖給出了下圖給出了8 8位數(shù)據(jù)、無校驗(yàn)情況的傳送格式位數(shù)據(jù)、無校驗(yàn)情況的傳送格式32.2.串行通信的波特率串行通信的波特率串行通信的波特率單位是位串

4、行通信的波特率單位是位/ /秒,記為秒,記為bpsbps。通常情。通常情況下,波特率的單位可以省略。通常使用的波特率有況下,波特率的單位可以省略。通常使用的波特率有300300、600600、900900、12001200、18001800、24002400、48004800、96009600、1920019200、3840038400、5760057600、115200115200等等 。3.3.奇偶校驗(yàn)奇偶校驗(yàn)字符奇偶校驗(yàn)檢查(字符奇偶校驗(yàn)檢查(character parity checkingcharacter parity checking)稱)稱為垂直冗余檢查(為垂直冗余檢查( ve

5、rtical redundancy checkingvertical redundancy checking,VRCVRC),它是每個(gè)字符增加一個(gè)額外位使字符中,它是每個(gè)字符增加一個(gè)額外位使字符中“1”1”的個(gè)數(shù)為奇數(shù)的個(gè)數(shù)為奇數(shù)或偶數(shù)?;蚺紨?shù)。奇校驗(yàn):如果字符數(shù)據(jù)位中奇校驗(yàn):如果字符數(shù)據(jù)位中“1”1”的數(shù)目是偶數(shù),校驗(yàn)的數(shù)目是偶數(shù),校驗(yàn)位應(yīng)為位應(yīng)為“1”1”,如果,如果“1”1”的數(shù)目是奇數(shù),校驗(yàn)位應(yīng)為的數(shù)目是奇數(shù),校驗(yàn)位應(yīng)為“0”0”。偶校驗(yàn):如果字符數(shù)據(jù)位中偶校驗(yàn):如果字符數(shù)據(jù)位中“1”1”的數(shù)目是偶數(shù),則校的數(shù)目是偶數(shù),則校驗(yàn)位應(yīng)為驗(yàn)位應(yīng)為“0”0”,如果是奇數(shù)則為,如果是奇數(shù)則為“1

6、”1”。4.4.串行通信的傳輸方式串行通信的傳輸方式1 1)單工()單工(SimplexSimplex):數(shù)據(jù)傳送是單向的,一端為發(fā)送):數(shù)據(jù)傳送是單向的,一端為發(fā)送端,另一端為接收端。這種傳輸方式中,除了地線之外,只端,另一端為接收端。這種傳輸方式中,除了地線之外,只要一根數(shù)據(jù)線就可以了。有線廣播就是單工的。要一根數(shù)據(jù)線就可以了。有線廣播就是單工的。42 2)全雙工()全雙工(Full-duplexFull-duplex):數(shù)據(jù)傳送是雙向的,):數(shù)據(jù)傳送是雙向的,且可以同時(shí)接收與發(fā)送數(shù)據(jù)。這種傳輸方式中,除了地且可以同時(shí)接收與發(fā)送數(shù)據(jù)。這種傳輸方式中,除了地線之外,需要兩根數(shù)據(jù)線,站在任何一

7、端的角度看,一線之外,需要兩根數(shù)據(jù)線,站在任何一端的角度看,一根為發(fā)送線,另一根為接收線。一般情況下,根為發(fā)送線,另一根為接收線。一般情況下,MCUMCU的異步的異步串行通信接口均是全雙工的。串行通信接口均是全雙工的。3 3)半雙工()半雙工(Half-duplexHalf-duplex):數(shù)據(jù)傳送也是雙向的):數(shù)據(jù)傳送也是雙向的,但是在這種傳輸方式中,除了地線之外,一般只有一,但是在這種傳輸方式中,除了地線之外,一般只有一根數(shù)據(jù)線。任何一個(gè)時(shí)刻,只能由一方發(fā)送數(shù)據(jù),另一根數(shù)據(jù)線。任何一個(gè)時(shí)刻,只能由一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù),不能同時(shí)收發(fā)。方接收數(shù)據(jù),不能同時(shí)收發(fā)。56.1.2 RS-23

8、26.1.2 RS-232總線標(biāo)準(zhǔn)總線標(biāo)準(zhǔn)MCUMCU引腳輸入引腳輸入/ /輸出一般使用輸出一般使用TTLTTL(Transistor Transistor TransistorTransistor Logic Logic)電平,即晶體管)電平,即晶體管- -晶體管邏輯電平,它晶體管邏輯電平,它適用于板內(nèi)數(shù)據(jù)傳輸。為使信號(hào)傳輸?shù)酶h(yuǎn),美國電子工適用于板內(nèi)數(shù)據(jù)傳輸。為使信號(hào)傳輸?shù)酶h(yuǎn),美國電子工業(yè)協(xié)會(huì)業(yè)協(xié)會(huì)EIAEIA(Electronic Industry AssociationElectronic Industry Association)制訂了)制訂了串行物理接口標(biāo)準(zhǔn)串行物理接口標(biāo)準(zhǔn)RS-

9、232CRS-232C,以下簡稱,以下簡稱RS-232RS-232。目前幾乎所有計(jì)算機(jī)上的串行口都是目前幾乎所有計(jì)算機(jī)上的串行口都是9 9芯接口。芯接口。66.1.3 TTL6.1.3 TTL電平到電平到RS-232RS-232電平轉(zhuǎn)換電路電平轉(zhuǎn)換電路具有串行通信接口的具有串行通信接口的MCUMCU,一般具有發(fā)送引腳,一般具有發(fā)送引腳( (TxDTxD) )與接與接收引腳收引腳( (RxDRxD) ),不同公司或不同系列的,不同公司或不同系列的MCUMCU,使用的引腳縮寫,使用的引腳縮寫名可能不一致,但含義相同。串行接口的外圍硬件電路,主名可能不一致,但含義相同。串行接口的外圍硬件電路,主要目

10、的是將要目的是將MCUMCU的發(fā)送引腳的發(fā)送引腳TxDTxD與接收引腳與接收引腳RxDRxD的的TTLTTL電平,通電平,通過過RS-232RS-232電平轉(zhuǎn)換芯片轉(zhuǎn)換為電平轉(zhuǎn)換芯片轉(zhuǎn)換為RS-232RS-232電平。下圖給出一個(gè)基電平。下圖給出一個(gè)基本芯片本芯片MAX232MAX232引腳圖及串行通信接口電平轉(zhuǎn)換電路引腳圖及串行通信接口電平轉(zhuǎn)換電路7MAX232MAX232芯片進(jìn)行電平轉(zhuǎn)換基本原理是:芯片進(jìn)行電平轉(zhuǎn)換基本原理是:發(fā)送過程:發(fā)送過程:MCUMCU的的TXDTXD(TTLTTL電平)經(jīng)過電平)經(jīng)過MAX232MAX232的的1111腳腳(T1IN)(T1IN)送到送到MAX232

11、MAX232內(nèi)部,在內(nèi)部內(nèi)部,在內(nèi)部TTLTTL電平被電平被“提升提升”為為RS-232RS-232電平,通過電平,通過1414腳腳(T1OUT)(T1OUT)發(fā)送出去。發(fā)送出去。接收過程:外部接收過程:外部RS-232RS-232電平經(jīng)過電平經(jīng)過MAX232MAX232的的1313腳(腳(R1INR1IN)進(jìn)入到)進(jìn)入到MAX232MAX232的內(nèi)部,在內(nèi)部的內(nèi)部,在內(nèi)部RS-232RS-232電平被電平被“降降低低”為為TTLTTL電平時(shí),經(jīng)過電平時(shí),經(jīng)過1212腳(腳(R1OUTR1OUT)送到)送到MCUMCU的的RXDRXD,進(jìn)入進(jìn)入MCUMCU內(nèi)部。內(nèi)部。86.1.4 6.1.4

12、串行通信編程模型串行通信編程模型從基本原理角度看,串行通信接口從基本原理角度看,串行通信接口UARTUART的主要功能的主要功能是:接收時(shí),把外部的單線輸入的數(shù)據(jù)變成一個(gè)字節(jié)的是:接收時(shí),把外部的單線輸入的數(shù)據(jù)變成一個(gè)字節(jié)的并行數(shù)據(jù)送入并行數(shù)據(jù)送入MCUMCU內(nèi)部;發(fā)送時(shí),把需要發(fā)送的一個(gè)字節(jié)內(nèi)部;發(fā)送時(shí),把需要發(fā)送的一個(gè)字節(jié)的并行數(shù)據(jù)轉(zhuǎn)換為單線輸出。的并行數(shù)據(jù)轉(zhuǎn)換為單線輸出。9106.2 UART模塊功能概述及編程結(jié)構(gòu)模塊功能概述及編程結(jié)構(gòu)6 6.2.1 .2.1 UARTUART模塊功能概述模塊功能概述1. 1. 外部引腳外部引腳MKL25Z128VLK4MKL25Z128VLK4芯片共有

13、三個(gè)串口,分別標(biāo)記為芯片共有三個(gè)串口,分別標(biāo)記為UART0UART0、UART1UART1、UART2UART2。它們并不是固定在哪幾個(gè)引腳上,而是通過可。它們并不是固定在哪幾個(gè)引腳上,而是通過可以引腳配置寄存器配置。見表以引腳配置寄存器配置。見表6-36-3(p129) p129) 2 2基本結(jié)構(gòu)與特點(diǎn)基本結(jié)構(gòu)與特點(diǎn)KL25KL25中共有中共有3 3個(gè)個(gè)UARTUART模塊,分別為模塊,分別為UART0UART0、UART1UART1和和UART2UART2??删幊痰目删幊痰? 8位、位、9 9位或位或1010位數(shù)據(jù)模式,其中位數(shù)據(jù)模式,其中UART1UART1與與UART2UART2只支持

14、只支持8 8位與位與9 9位數(shù)據(jù)模式,位數(shù)據(jù)模式,UART0UART0支持全部的數(shù)據(jù)模式。支持全部的數(shù)據(jù)模式。每個(gè)每個(gè)UARTUART模塊都有模塊都有1313位模數(shù)分頻器。每個(gè)位模數(shù)分頻器。每個(gè)UARTUART模塊都可模塊都可以獨(dú)立地啟用發(fā)送器和接收器,分別設(shè)置發(fā)送器與接收器的極以獨(dú)立地啟用發(fā)送器和接收器,分別設(shè)置發(fā)送器與接收器的極性。性。UART0UART0支持雙邊沿采樣,而支持雙邊沿采樣,而UART1UART1與與UART2UART2不支持此功能。不支持此功能。6.2.2 UART6.2.2 UART模塊編程結(jié)構(gòu)模塊編程結(jié)構(gòu)1 1寄存器地址分析寄存器地址分析KL25KL25芯片有芯片有3

15、3個(gè)個(gè)UARTUART模塊。每個(gè)模塊有其對(duì)應(yīng)的寄模塊。每個(gè)模塊有其對(duì)應(yīng)的寄存器。存器。2 2控制寄存器控制寄存器1 1)UARTxUARTx控制寄存器控制寄存器2 2(UARTx_C2UARTx_C2)2 2)UARTxUARTx控制寄存器控制寄存器1 1(UARTx_C1UARTx_C1)3 3)UART0UART0控制寄存器控制寄存器4 4(UART0_C4UART0_C4)4 4)UART0UART0控制寄存器控制寄存器5 5(UART0_C5UART0_C5)3 3狀態(tài)寄存器狀態(tài)寄存器UARTx_S1UARTx_S14. 4. 波特率寄存器波特率寄存器波特率高字節(jié)寄存器(波特率高字節(jié)寄

16、存器(UARTx_BDHUARTx_BDH)波特率低字節(jié)寄存器波特率低字節(jié)寄存器 (UARTx_BDLUARTx_BDL)5. 5. 數(shù)據(jù)寄存器數(shù)據(jù)寄存器UARTx_DUARTx_D(x=02x=02)11126.3 UART驅(qū)動(dòng)構(gòu)件封裝驅(qū)動(dòng)構(gòu)件封裝6.3.1 UART6.3.1 UART驅(qū)動(dòng)構(gòu)件封裝要點(diǎn)分析驅(qū)動(dòng)構(gòu)件封裝要點(diǎn)分析UARTUART具有初始化、接收和發(fā)送三種基本操作。具有初始化、接收和發(fā)送三種基本操作。實(shí)現(xiàn)構(gòu)件化編程的實(shí)現(xiàn)構(gòu)件化編程的UARTUART軟件模塊應(yīng)當(dāng)具有以下幾個(gè)特點(diǎn):軟件模塊應(yīng)當(dāng)具有以下幾個(gè)特點(diǎn):1 1)UARTUART模塊是最底層的構(gòu)件,它主要向上提供三種服務(wù),模塊是

17、最底層的構(gòu)件,它主要向上提供三種服務(wù),分別是分別是UARTUART模塊的初始化、接收單個(gè)字節(jié)和發(fā)送單個(gè)字節(jié),向模塊的初始化、接收單個(gè)字節(jié)和發(fā)送單個(gè)字節(jié),向下則直接訪問模塊寄存器,實(shí)現(xiàn)對(duì)硬件的直接操作。另外,從下則直接訪問模塊寄存器,實(shí)現(xiàn)對(duì)硬件的直接操作。另外,從實(shí)際使用角度出發(fā),它還需要封裝接收實(shí)際使用角度出發(fā),它還需要封裝接收N N個(gè)字節(jié)和發(fā)送個(gè)字節(jié)和發(fā)送N N個(gè)字節(jié)個(gè)字節(jié)的功能函數(shù)。的功能函數(shù)。2 2)UARTUART模塊在軟件上對(duì)應(yīng)模塊在軟件上對(duì)應(yīng)1 1個(gè)個(gè)uart.cuart.c程序源代碼文件和程序源代碼文件和1 1個(gè)個(gè)uart.huart.h頭文件,當(dāng)需要使用頭文件,當(dāng)需要使用UAR

18、TUART構(gòu)件時(shí),大多數(shù)情況下只需構(gòu)件時(shí),大多數(shù)情況下只需簡單拷貝這兩個(gè)文件即可,無需對(duì)源代碼文件和頭文件進(jìn)行修簡單拷貝這兩個(gè)文件即可,無需對(duì)源代碼文件和頭文件進(jìn)行修改,只有當(dāng)進(jìn)行不同芯片之間的移植時(shí),才需要修改頭文件中改,只有當(dāng)進(jìn)行不同芯片之間的移植時(shí),才需要修改頭文件中與硬件相關(guān)的宏定義。與硬件相關(guān)的宏定義。3 3)上層構(gòu)件或軟件在使用該構(gòu)件時(shí),嚴(yán)格禁止通過全局)上層構(gòu)件或軟件在使用該構(gòu)件時(shí),嚴(yán)格禁止通過全局變量來傳遞參數(shù),所有的數(shù)據(jù)傳遞都直接通過函數(shù)的形式參數(shù)變量來傳遞參數(shù),所有的數(shù)據(jù)傳遞都直接通過函數(shù)的形式參數(shù)來接收。來接收。13通過以上分析,可以設(shè)計(jì)通過以上分析,可以設(shè)計(jì)UARTUA

19、RT構(gòu)件的構(gòu)件的8 8個(gè)基本功能函數(shù)。個(gè)基本功能函數(shù)。(1 1)初始化:)初始化:void uart_init (uint_8 uartNo, void uart_init (uint_8 uartNo, uint_32 sel_clk,uint_32 baud_rate);uint_32 sel_clk,uint_32 baud_rate);(2 2)發(fā)送單個(gè)字節(jié):)發(fā)送單個(gè)字節(jié):uint_8 uart_send1(uint_8 uartNo, uint_8 uart_send1(uint_8 uartNo, uint_8 ch);uint_8 ch);(3 3)發(fā)送)發(fā)送N N個(gè)字節(jié):個(gè)字

20、節(jié):uint_8 uart_sendN (uint_8 uartNo, uint_8 uart_sendN (uint_8 uartNo, uint_16 len ,uint_8uint_16 len ,uint_8* * buff); buff);(4 4)發(fā)送字符串:)發(fā)送字符串:uint_8 uart_send_string(uint_8 uint_8 uart_send_string(uint_8 uartNo, void uartNo, void * *buff);buff);(5 5)接收單個(gè)字節(jié):)接收單個(gè)字節(jié):uint_8 uart_re1 (uint_8 uartNo, ui

21、nt_8 uart_re1 (uint_8 uartNo, uint_8 uint_8 * *fp);fp);(6 6)接收)接收N N個(gè)字節(jié):個(gè)字節(jié):uint_8 uart_reN (uint_8 uartNo, uint_8 uart_reN (uint_8 uartNo, uint_16 len ,uint_8uint_16 len ,uint_8* * buff); buff);(7 7)使能串口接收中斷:)使能串口接收中斷:void uart_enable_re_int void uart_enable_re_int (uint_8 uartNo);(uint_8 uartNo);(

22、8 8)禁止串口接收中斷:)禁止串口接收中斷:void uart_disable_re_int void uart_disable_re_int (uint_8 uartNo);(uint_8 uartNo);146.4 KL256.4 KL25的中斷機(jī)制及的中斷機(jī)制及UARTUART接收中斷接收中斷程序?qū)嵗绦驅(qū)嵗?.4.1 KL256.4.1 KL25中斷基本概念中斷基本概念1 1中斷的概念及其中斷的概念及其KL25KL25中斷分類中斷分類所謂中斷,是指所謂中斷,是指MCUMCU在正常運(yùn)行程序時(shí),在正常運(yùn)行程序時(shí), 由于由于MCUMCU內(nèi)核內(nèi)核異常或者異?;蛘進(jìn)CUMCU各模塊發(fā)出請(qǐng)求事件

23、,引起各模塊發(fā)出請(qǐng)求事件,引起MCUMCU停止正在運(yùn)行的停止正在運(yùn)行的程序,而轉(zhuǎn)去處理異?;驁?zhí)行處理外部事件的程序(又稱中程序,而轉(zhuǎn)去處理異?;驁?zhí)行處理外部事件的程序(又稱中斷服務(wù)程序)。斷服務(wù)程序)。這些引起這些引起MCUMCU中斷的事件稱為中斷源。中斷的事件稱為中斷源。KL25KL25的中斷源分的中斷源分為兩類,一類是內(nèi)核中斷,另一類是非內(nèi)核中斷。為兩類,一類是內(nèi)核中斷,另一類是非內(nèi)核中斷。內(nèi)核中斷主要是異常中斷,也就是說,當(dāng)出現(xiàn)錯(cuò)誤的時(shí)內(nèi)核中斷主要是異常中斷,也就是說,當(dāng)出現(xiàn)錯(cuò)誤的時(shí)候,這些中斷會(huì)復(fù)位芯片或是做出其他處理。候,這些中斷會(huì)復(fù)位芯片或是做出其他處理。非內(nèi)核中斷是指非內(nèi)核中斷是

24、指MCUMCU各個(gè)模塊為中斷源引起的中斷,各個(gè)模塊為中斷源引起的中斷, MCUMCU執(zhí)行完中斷服務(wù)程序后,又回到剛才正在執(zhí)行的程序,執(zhí)行完中斷服務(wù)程序后,又回到剛才正在執(zhí)行的程序,從停止的位置繼續(xù)執(zhí)行后續(xù)的指令。非內(nèi)核中斷又稱可屏蔽從停止的位置繼續(xù)執(zhí)行后續(xù)的指令。非內(nèi)核中斷又稱可屏蔽中斷,這類中斷可以通過編程控制,開啟或關(guān)閉該中斷。中斷,這類中斷可以通過編程控制,開啟或關(guān)閉該中斷。152 2中斷向量表的概念中斷向量表的概念中斷向量表是指按照中斷源的中斷向量序號(hào)的固定順中斷向量表是指按照中斷源的中斷向量序號(hào)的固定順序,存放中斷服務(wù)程序入口地址的一段存儲(chǔ)區(qū)域。每個(gè)中序,存放中斷服務(wù)程序入口地址的一

25、段存儲(chǔ)區(qū)域。每個(gè)中斷服務(wù)程序入口地址占用斷服務(wù)程序入口地址占用4 4個(gè)字節(jié)單元,個(gè)字節(jié)單元,KL25KL25中斷向量表的中斷向量表的位置在存儲(chǔ)區(qū)位置在存儲(chǔ)區(qū)0 x0000_00000 x0000_00c00 x0000_00000 x0000_00c0的一段地址范圍,的一段地址范圍,一共一共4848* *4=1924=192個(gè)字節(jié),存放個(gè)字節(jié),存放4848個(gè)中斷服務(wù)程序的入口地址。個(gè)中斷服務(wù)程序的入口地址。中斷服務(wù)程序的入口地址又稱為中斷向量或中斷向量指針,中斷服務(wù)程序的入口地址又稱為中斷向量或中斷向量指針,它指向中斷服務(wù)程序在存儲(chǔ)器中的位置。它指向中斷服務(wù)程序在存儲(chǔ)器中的位置。166.4.2

26、 KL256.4.2 KL25中斷向量表文件中斷向量表文件 如何將中斷服務(wù)程序的入口地址(中斷向量),按如何將中斷服務(wù)程序的入口地址(中斷向量),按照中斷源的中斷向量序號(hào)的順序,寫入到中斷向量表的照中斷源的中斷向量序號(hào)的順序,寫入到中斷向量表的位置呢?定義一個(gè)常量指針數(shù)組,再把中斷向量存入這位置呢?定義一個(gè)常量指針數(shù)組,再把中斷向量存入這個(gè)數(shù)組中,工程編譯時(shí)由鏈接文件個(gè)數(shù)組中,工程編譯時(shí)由鏈接文件intflash.ldintflash.ld指定這個(gè)指定這個(gè)數(shù)組存放到中斷向量表的位置。數(shù)組存放到中斷向量表的位置。 在在CW10.3CW10.3開發(fā)環(huán)境下,這個(gè)常量指針數(shù)組是在開發(fā)環(huán)境下,這個(gè)常量指

27、針數(shù)組是在vectors.hvectors.h 和和vectors.cvectors.c兩個(gè)文件中實(shí)現(xiàn)的,由于這兩個(gè)兩個(gè)文件中實(shí)現(xiàn)的,由于這兩個(gè)文件定義和存放著中斷向量,所以文件定義和存放著中斷向量,所以vectorsvectors文件稱為中斷文件稱為中斷向量表文件。向量表文件。176.4.3 KL256.4.3 KL25的中斷服務(wù)程序及其的中斷服務(wù)程序及其“注冊(cè)注冊(cè)”1. 1. 中斷服務(wù)程序設(shè)計(jì)中斷服務(wù)程序設(shè)計(jì)中斷服務(wù)程序的設(shè)計(jì)與普通構(gòu)件函數(shù)設(shè)計(jì)是一樣的,中斷服務(wù)程序的設(shè)計(jì)與普通構(gòu)件函數(shù)設(shè)計(jì)是一樣的,只是這些程序只有在產(chǎn)生中斷時(shí)才被執(zhí)行。為了規(guī)范編程只是這些程序只有在產(chǎn)生中斷時(shí)才被執(zhí)行。為了

28、規(guī)范編程將各個(gè)中斷服務(wù)程序,放在將各個(gè)中斷服務(wù)程序,放在“isr.cisr.c”中斷底層驅(qū)動(dòng)構(gòu)件中斷底層驅(qū)動(dòng)構(gòu)件源文件。如編寫一個(gè)串口中斷服務(wù)程序,串口源文件。如編寫一個(gè)串口中斷服務(wù)程序,串口1 1有數(shù)據(jù)到有數(shù)據(jù)到來時(shí)產(chǎn)生中斷,執(zhí)行來時(shí)產(chǎn)生中斷,執(zhí)行isr_uart1_re(void)isr_uart1_re(void)接收中斷服務(wù)程接收中斷服務(wù)程序。服務(wù)程序首先進(jìn)入臨界區(qū)關(guān)總中斷,接收一個(gè)到來的序。服務(wù)程序首先進(jìn)入臨界區(qū)關(guān)總中斷,接收一個(gè)到來的字符。若接收成功成功,則把這個(gè)字符發(fā)送回去,退出臨字符。若接收成功成功,則把這個(gè)字符發(fā)送回去,退出臨界區(qū)。界區(qū)。2. 2. 中斷服務(wù)程序的中斷服務(wù)程序

29、的“注冊(cè)注冊(cè)”中斷服務(wù)程序的中斷服務(wù)程序的“注冊(cè)注冊(cè)”就是將用戶編寫好中斷服就是將用戶編寫好中斷服務(wù)程序入口地址,添加到中斷向量表中。實(shí)際是在中斷向務(wù)程序入口地址,添加到中斷向量表中。實(shí)際是在中斷向量表頭文件量表頭文件vectors.hvectors.h中,將宏定義的中斷服務(wù)函數(shù)名替中,將宏定義的中斷服務(wù)函數(shù)名替換成用戶編寫好中斷服務(wù)程序名。換成用戶編寫好中斷服務(wù)程序名。186.4.4 ARM Cortex-M0+6.4.4 ARM Cortex-M0+非內(nèi)核模塊中斷編程結(jié)構(gòu)非內(nèi)核模塊中斷編程結(jié)構(gòu)1 1M0+M0+中斷結(jié)構(gòu)及中斷過程中斷結(jié)構(gòu)及中斷過程由模塊中斷源、中斷控制器(由模塊中斷源、中斷

30、控制器(NVICNVIC)和)和M0+M0+內(nèi)核組成。內(nèi)核組成。其中斷過程分為二步:其中斷過程分為二步:(1 1)模塊中斷源向中斷控制器()模塊中斷源向中斷控制器(NVICNVIC)發(fā)出中斷請(qǐng)求)發(fā)出中斷請(qǐng)求信號(hào)。信號(hào)。(2 2)中斷控制器對(duì)發(fā)來的中斷信號(hào)進(jìn)行管理,判斷該)中斷控制器對(duì)發(fā)來的中斷信號(hào)進(jìn)行管理,判斷該中斷是否允許中斷,若允許,通過私有外設(shè)總線發(fā)送給中斷是否允許中斷,若允許,通過私有外設(shè)總線發(fā)送給M0+M0+內(nèi)核,由內(nèi)核進(jìn)行中斷處理;如果同時(shí)有多個(gè)中斷信號(hào)到來,內(nèi)核,由內(nèi)核進(jìn)行中斷處理;如果同時(shí)有多個(gè)中斷信號(hào)到來,NVICNVIC根據(jù)設(shè)定好的中斷信號(hào)的優(yōu)先級(jí)進(jìn)行判斷,優(yōu)先級(jí)高的根據(jù)

31、設(shè)定好的中斷信號(hào)的優(yōu)先級(jí)進(jìn)行判斷,優(yōu)先級(jí)高的中斷首先響應(yīng),優(yōu)先級(jí)低的中斷掛起,壓入堆棧保存;如果中斷首先響應(yīng),優(yōu)先級(jí)低的中斷掛起,壓入堆棧保存;如果優(yōu)先級(jí)完全相同的多個(gè)中斷源同時(shí)請(qǐng)求,則先響應(yīng)優(yōu)先級(jí)完全相同的多個(gè)中斷源同時(shí)請(qǐng)求,則先響應(yīng)IRQIRQ中斷中斷號(hào)較小的,其他的被掛起。號(hào)較小的,其他的被掛起。19M0+M0+中斷結(jié)構(gòu)原理圖:中斷結(jié)構(gòu)原理圖:2 2NVICNVIC各寄存器簡介各寄存器簡介NVICNVIC向量中斷控制寄存器共有向量中斷控制寄存器共有1212個(gè)寄存器,如下表個(gè)寄存器,如下表所示。所示。203 3中斷初始化設(shè)置步驟中斷初始化設(shè)置步驟根據(jù)根據(jù)KL25KL25的中斷機(jī)制,想讓一個(gè)

32、非內(nèi)核中斷源能夠的中斷機(jī)制,想讓一個(gè)非內(nèi)核中斷源能夠得到內(nèi)核響應(yīng),必須要進(jìn)行初始化設(shè)置。初始化的幾個(gè)得到內(nèi)核響應(yīng),必須要進(jìn)行初始化設(shè)置。初始化的幾個(gè)基本步驟如下:基本步驟如下:(1 1)設(shè)置模塊中斷使能位使能模塊中斷,使模塊)設(shè)置模塊中斷使能位使能模塊中斷,使模塊能夠發(fā)送中斷請(qǐng)求信號(hào)。例如在能夠發(fā)送中斷請(qǐng)求信號(hào)。例如在UARTUART中,將控制寄存器中,將控制寄存器C2C2的的RIERIE位置位置1 1。(2 2)在中斷控制器中設(shè)置中斷使能寄存器,使該)在中斷控制器中設(shè)置中斷使能寄存器,使該模塊對(duì)應(yīng)的使能位置模塊對(duì)應(yīng)的使能位置1 1,允許該中斷請(qǐng)求。,允許該中斷請(qǐng)求。4 4中斷初始化示例中斷初始化示例串口模塊中斷初始化函數(shù)串口模塊中斷初始化函數(shù)uart_enable_re_intuart_enable_re_int(),(),包含兩個(gè)方面的內(nèi)容,一在控制寄存器包含兩個(gè)方面的內(nèi)容,一在控制寄存器UARTx_C2UARTx_C2中,將中,將接收中斷允許位接收中斷允許位D5D5設(shè)置成設(shè)置成1 1。另外根據(jù)。另外根據(jù)IRQIRQ號(hào),在斷控制號(hào),在斷控制器器NVICNVIC中斷使能寄存器(中斷使能寄存器(NVIC_ISERNVIC_ISER),將對(duì)應(yīng)為置),將對(duì)應(yīng)為置1 1開開中串口模塊中斷。中串口模塊中斷。216.5 6.5 進(jìn)一步討論進(jìn)一步討論KL25KL25串口支持串口

溫馨提示

  • 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)論