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

下載本文檔

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

文檔簡介

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

2、串行通信功能的模塊在一部分實現(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)不歸零傳號標(biāo)準(zhǔn)不歸零傳號/ /空號數(shù)據(jù)格式空號數(shù)據(jù)格式”,“,“不歸零不歸零”的最初含的最初含義是:用正、負電平表示二進制值,不使用零電平。義是:用正、負電平表示二進制值,不使用零電平?!癿ark/space”mark/space”即即“傳號傳號/ /空號空號”分別是表示兩種狀態(tài)的分別是表示兩種狀態(tài)的物理名稱,邏輯名稱記為物理名稱,邏輯名稱記為“1/0”1/0”。 下圖給出了下圖給出了8 8位數(shù)據(jù)、無校驗情況的傳送格式位數(shù)據(jù)、無校驗情況的傳送格式32.2.串行通信的波特率串行通信的波特率串行通信的波特率單位是位串

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

5、rtical redundancy checkingvertical redundancy checking,VRCVRC),它是每個字符增加一個額外位使字符中,它是每個字符增加一個額外位使字符中“1”1”的個數(shù)為奇數(shù)的個數(shù)為奇數(shù)或偶數(shù)?;蚺紨?shù)。奇校驗:如果字符數(shù)據(jù)位中奇校驗:如果字符數(shù)據(jù)位中“1”1”的數(shù)目是偶數(shù),校驗的數(shù)目是偶數(shù),校驗位應(yīng)為位應(yīng)為“1”1”,如果,如果“1”1”的數(shù)目是奇數(shù),校驗位應(yīng)為的數(shù)目是奇數(shù),校驗位應(yīng)為“0”0”。偶校驗:如果字符數(shù)據(jù)位中偶校驗:如果字符數(shù)據(jù)位中“1”1”的數(shù)目是偶數(shù),則校的數(shù)目是偶數(shù),則校驗位應(yīng)為驗位應(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ù)傳送是雙向的,且可以同時接收與發(fā)送數(shù)據(jù)。這種傳輸方式中,除了地且可以同時接收與發(fā)送數(shù)據(jù)。這種傳輸方式中,除了地線之外,需要兩根數(shù)據(jù)線,站在任何一

7、端的角度看,一線之外,需要兩根數(shù)據(jù)線,站在任何一端的角度看,一根為發(fā)送線,另一根為接收線。一般情況下,根為發(fā)送線,另一根為接收線。一般情況下,MCUMCU的異步的異步串行通信接口均是全雙工的。串行通信接口均是全雙工的。3 3)半雙工()半雙工(Half-duplexHalf-duplex):數(shù)據(jù)傳送也是雙向的):數(shù)據(jù)傳送也是雙向的,但是在這種傳輸方式中,除了地線之外,一般只有一,但是在這種傳輸方式中,除了地線之外,一般只有一根數(shù)據(jù)線。任何一個時刻,只能由一方發(fā)送數(shù)據(jù),另一根數(shù)據(jù)線。任何一個時刻,只能由一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù),不能同時收發(fā)。方接收數(shù)據(jù),不能同時收發(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ù)傳輸。為使信號傳輸?shù)酶h,美國電子工適用于板內(nèi)數(shù)據(jù)傳輸。為使信號傳輸?shù)酶h,美國電子工業(yè)協(xié)會業(yè)協(xié)會EIAEIA(Electronic Industry AssociationElectronic Industry Association)制訂了)制訂了串行物理接口標(biāo)準(zhǔn)串行物理接口標(biāo)準(zhǔn)RS-

9、232CRS-232C,以下簡稱,以下簡稱RS-232RS-232。目前幾乎所有計算機上的串行口都是目前幾乎所有計算機上的串行口都是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電平。下圖給出一個基電平。下圖給出一個基本芯片本芯片MAX232MAX232引腳圖及串行通信接口電平轉(zhuǎn)換電路引腳圖及串行通信接口電平轉(zhuǎn)換電路7MAX232MAX232芯片進行電平轉(zhuǎ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)進入到)進入到MAX232MAX232的內(nèi)部,在內(nèi)部的內(nèi)部,在內(nèi)部RS-232RS-232電平被電平被“降降低低”為為TTLTTL電平時,經(jīng)過電平時,經(jīng)過1212腳(腳(R1OUTR1OUT)送到)送到MCUMCU的的RXDRXD,進入進入MCUMCU內(nèi)部。內(nèi)部。86.1.4 6.1.4

12、串行通信編程模型串行通信編程模型從基本原理角度看,串行通信接口從基本原理角度看,串行通信接口UARTUART的主要功能的主要功能是:接收時,把外部的單線輸入的數(shù)據(jù)變成一個字節(jié)的是:接收時,把外部的單線輸入的數(shù)據(jù)變成一個字節(jié)的并行數(shù)據(jù)送入并行數(shù)據(jù)送入MCUMCU內(nèi)部;發(fā)送時,把需要發(fā)送的一個字節(jié)內(nèi)部;發(fā)送時,把需要發(fā)送的一個字節(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、三個串口,分別標(biāo)記為芯片共有三個串口,分別標(biāo)記為UART0UART0、UART1UART1、UART2UART2。它們并不是固定在哪幾個引腳上,而是通過可。它們并不是固定在哪幾個引腳上,而是通過可以引腳配置寄存器配置。以引腳配置寄存器配置。2 2基本結(jié)構(gòu)與特點基本結(jié)構(gòu)與特點KL25KL25中共有中共有3 3個個UARTUART模塊,分別為模塊,分別為UART0UART0、UART1UART1和和UART2UART2。可編程的可編程的8 8位、位、9 9位或位或1010位數(shù)據(jù)模式,其中位數(shù)據(jù)模式,其中UART1UART1與與UART2UART2只支持只支持8 8位與位與9 9位數(shù)據(jù)模式,位數(shù)據(jù)模

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

15、寄模塊。每個模塊有其對應(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é)寄存器(UARTx_BDHUARTx_BDH)波

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

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

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

19、能函數(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ā)送單個字節(jié):)發(fā)送單個字節(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個字節(jié):個字節(jié):uint_8 uart_sendN (ui

20、nt_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)接收單個字節(jié):)接收單個字節(jié):uint_8 uart_re1 (uint_8 uartNo, uint_8 uart_re1 (uint_8 u

21、artNo, uint_8 uint_8 * *fp);fp);(6 6)接收)接收N N個字節(jié):個字節(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);(8 8)禁止串口接收中斷:)禁止串口接收中斷:

22、void uart_disable_re_int void uart_disable_re_int (uint_8 uartNo);(uint_8 uartNo);146.4 KL256.4 KL25的中斷機制及的中斷機制及UARTUART接收中斷接收中斷程序?qū)嵗绦驅(qū)嵗?.4.1 KL256.4.1 KL25中斷基本概念中斷基本概念1 1中斷的概念及其中斷的概念及其KL25KL25中斷分類中斷分類所謂中斷,是指所謂中斷,是指MCUMCU在正常運行程序時,在正常運行程序時, 由于由于MCUMCU內(nèi)核內(nèi)核異?;蛘弋惓;蛘進CUMCU各模塊發(fā)出請求事件,引起各模塊發(fā)出請求事件,引起MCUMCU停止

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

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

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

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

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

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

29、冊注冊”就是將用戶編寫好中斷服就是將用戶編寫好中斷服務(wù)程序入口地址,添加到中斷向量表中。實際是在中斷向務(wù)程序入口地址,添加到中斷向量表中。實際是在中斷向量表頭文件量表頭文件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)及中斷過程由模塊中斷源、中斷控制器(由模塊中斷源、中斷控制器(NVICNVIC)和)和M0+M0+內(nèi)

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

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

32、源能夠得到內(nèi)核響應(yīng),必須要進行初始化設(shè)置。初始化的幾個得到內(nèi)核響應(yīng),必須要進行初始化設(shè)置。初始化的幾個基本步驟如下:基本步驟如下:(1 1)設(shè)置模塊中斷使能位使能模塊中斷,使模塊)設(shè)置模塊中斷使能位使能模塊中斷,使模塊能夠發(fā)送中斷請求信號。例如在能夠發(fā)送中斷請求信號。例如在UARTUART中,將控制寄存器中,將控制寄存器C2C2的的RIERIE位置位置1 1。(2 2)在中斷控制器中設(shè)置中斷使能寄存器,使該)在中斷控制器中設(shè)置中斷使能寄存器,使該模塊對應(yīng)的使能位置模塊對應(yīng)的使能位置1 1,允許該中斷請求。,允許該中斷請求。4 4中斷初始化示例中斷初始化示例串口模塊中斷初始化函數(shù)串口模塊中斷初始

33、化函數(shù)uart_enable_re_intuart_enable_re_int(),(),包含兩個方面的內(nèi)容,一在控制寄存器包含兩個方面的內(nèi)容,一在控制寄存器UARTx_C2UARTx_C2中,將中,將接收中斷允許位接收中斷允許位D5D5設(shè)置成設(shè)置成1 1。另外根據(jù)。另外根據(jù)IRQIRQ號,在斷控制號,在斷控制器器NVICNVIC中斷使能寄存器(中斷使能寄存器(NVIC_ISERNVIC_ISER),將對應(yīng)為置),將對應(yīng)為置1 1開開中串口模塊中斷。中串口模塊中斷。216.5 6.5 進一步討論進一步討論KL25KL25串口支持串口支持DMADMA傳輸。所謂傳輸。所謂DMADMA(Direct

34、 Memory Direct Memory AccessAccess,直接內(nèi)存存?。?,是指存儲器的內(nèi)容可以不經(jīng)過,直接內(nèi)存存?。?,是指存儲器的內(nèi)容可以不經(jīng)過CPUCPU而與外部設(shè)備之間直接傳輸。而與外部設(shè)備之間直接傳輸。DMADMA是所有現(xiàn)代微控制器的是所有現(xiàn)代微控制器的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依重要特色,它允許不同速度的硬件裝置來溝通,而不需要依于于 MCU MCU 的大量中斷負載。否則,的大量中斷負載。否則,MCU MCU 需外設(shè)把資料復(fù)制到需外設(shè)把資料復(fù)制到暫存器,然后再把它們寫到新的地方。在這段時間,暫存器,然后再把它們寫到新的地方。在這段時間,MCUMCU無無法做其他工作。法做其他工作。DMA DMA 傳輸將數(shù)據(jù)從一個地址空間復(fù)制到另外一個地址傳輸將數(shù)據(jù)從一個地址空間復(fù)制到另外一個地址空間。當(dāng)空間。當(dāng)MCU MCU 初始化這個傳輸動作,傳輸動作本身是由初始化這個傳輸動作,傳輸動作本身是由 DMA DMA 控制器來實行和完成。控制器來實行和完成。6.6 6.6 本章小結(jié)本章小結(jié)(1 1)學(xué)習(xí)和掌握通信串行通

溫馨提示

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

評論

0/150

提交評論