嵌入式微處理器系統(tǒng)及應(yīng)用-Chapter12 嵌入式系統(tǒng)驅(qū)動軟件開發(fā)_第1頁
嵌入式微處理器系統(tǒng)及應(yīng)用-Chapter12 嵌入式系統(tǒng)驅(qū)動軟件開發(fā)_第2頁
嵌入式微處理器系統(tǒng)及應(yīng)用-Chapter12 嵌入式系統(tǒng)驅(qū)動軟件開發(fā)_第3頁
嵌入式微處理器系統(tǒng)及應(yīng)用-Chapter12 嵌入式系統(tǒng)驅(qū)動軟件開發(fā)_第4頁
嵌入式微處理器系統(tǒng)及應(yīng)用-Chapter12 嵌入式系統(tǒng)驅(qū)動軟件開發(fā)_第5頁
已閱讀5頁,還剩121頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式微處理器系統(tǒng)及應(yīng)用嵌入式微處理器系統(tǒng)及應(yīng)用第十二章第十二章 嵌入式系統(tǒng)驅(qū)動軟件開嵌入式系統(tǒng)驅(qū)動軟件開發(fā)發(fā)主要內(nèi)容主要內(nèi)容 1 1 嵌入式系統(tǒng)驅(qū)動軟件概述嵌入式系統(tǒng)驅(qū)動軟件概述 2 2 嵌入式系統(tǒng)設(shè)備的特性及操作界面嵌入式系統(tǒng)設(shè)備的特性及操作界面 3 3 設(shè)備操作的基本原理設(shè)備操作的基本原理 4 W90P7104 W90P710串口驅(qū)動開發(fā)實例串口驅(qū)動開發(fā)實例 5 MPC5554 SCI5 MPC5554 SCI驅(qū)動開發(fā)實例驅(qū)動開發(fā)實例 6 6 設(shè)備驅(qū)動開發(fā)需注意的問題設(shè)備驅(qū)動開發(fā)需注意的問題 7 7 驅(qū)動軟件與操作系統(tǒng)的關(guān)系驅(qū)動軟件與操作系統(tǒng)的關(guān)系12.1嵌入式系統(tǒng)驅(qū)動軟件概述嵌入式系統(tǒng)

2、驅(qū)動軟件概述 驅(qū)動軟件是直接與硬件打交道的一層,它對操作驅(qū)動軟件是直接與硬件打交道的一層,它對操作系統(tǒng)和應(yīng)用提供所需的驅(qū)動的支持。該層主要包系統(tǒng)和應(yīng)用提供所需的驅(qū)動的支持。該層主要包括三種類型的程序,即板級初始化程序、與系統(tǒng)括三種類型的程序,即板級初始化程序、與系統(tǒng)軟件相關(guān)的驅(qū)動和與應(yīng)用軟件相關(guān)的驅(qū)動。軟件相關(guān)的驅(qū)動和與應(yīng)用軟件相關(guān)的驅(qū)動。 板級初始化程序:這些程序在嵌入式系統(tǒng)上電后初始化系統(tǒng)的硬件環(huán)境,包括嵌入式微處理器、存儲器、中斷控制器、DMA、定時器等的初始化。12.1嵌入式系統(tǒng)驅(qū)動軟件概述嵌入式系統(tǒng)驅(qū)動軟件概述 與系統(tǒng)軟件相關(guān)的驅(qū)動:這類驅(qū)動是操作系統(tǒng)和中間件(包括各種通信協(xié)議)等系

3、統(tǒng)軟件所需的驅(qū)動程序,它們的開發(fā)要按照系統(tǒng)軟件的要求進行。目前操作系統(tǒng)內(nèi)核所需的硬件支持一般都已集成在嵌入式微處理器中了,因此操作系統(tǒng)廠商提供的內(nèi)核驅(qū)動一般不用修改,開發(fā)人員主要需要編寫的相關(guān)驅(qū)動如網(wǎng)絡(luò)、鍵盤、顯示、外存等的驅(qū)動程序。 與應(yīng)用軟件相關(guān)的驅(qū)動:與應(yīng)用軟件相關(guān)的驅(qū)動不一定是需要與操作系統(tǒng)連接的,這些驅(qū)動的設(shè)計和開發(fā)由應(yīng)用決定。主要內(nèi)容主要內(nèi)容 1 1 嵌入式系統(tǒng)驅(qū)動軟件概述嵌入式系統(tǒng)驅(qū)動軟件概述 2 2 嵌入式系統(tǒng)設(shè)備的特性及操作界面嵌入式系統(tǒng)設(shè)備的特性及操作界面 3 3 設(shè)備操作的基本原理設(shè)備操作的基本原理 4 W90P7104 W90P710串口驅(qū)動開發(fā)實例串口驅(qū)動開發(fā)實例 5

4、 MPC5554 SCI5 MPC5554 SCI驅(qū)動開發(fā)實例驅(qū)動開發(fā)實例 6 6 設(shè)備驅(qū)動開發(fā)需注意的問題設(shè)備驅(qū)動開發(fā)需注意的問題 7 7 驅(qū)動軟件與操作系統(tǒng)的關(guān)系驅(qū)動軟件與操作系統(tǒng)的關(guān)系12.2.1 嵌入式系統(tǒng)設(shè)備特性嵌入式系統(tǒng)設(shè)備特性 片內(nèi)設(shè)備和板級設(shè)備片內(nèi)設(shè)備和板級設(shè)備 串行設(shè)備和并行設(shè)備串行設(shè)備和并行設(shè)備 內(nèi)存映射設(shè)備和內(nèi)存映射設(shè)備和I/OI/O映射設(shè)備、特殊指令訪問設(shè)備映射設(shè)備、特殊指令訪問設(shè)備 設(shè)備設(shè)備 / / 接口緩沖接口緩沖片內(nèi)設(shè)備和板級設(shè)備片內(nèi)設(shè)備和板級設(shè)備 按照設(shè)備控制器所處的位置,可分為芯片內(nèi)的設(shè)備和按照設(shè)備控制器所處的位置,可分為芯片內(nèi)的設(shè)備和板級設(shè)備。板級設(shè)備。 芯

5、片內(nèi)設(shè)備,就是指集成在嵌入式微處理器或微控制芯片內(nèi)設(shè)備,就是指集成在嵌入式微處理器或微控制器內(nèi)部的設(shè)備,通常被稱為器內(nèi)部的設(shè)備,通常被稱為“片內(nèi)外設(shè)片內(nèi)外設(shè)”,這是因為,這是因為隨著硬件技術(shù)和應(yīng)用需求的發(fā)展,嵌入式微處理器或隨著硬件技術(shù)和應(yīng)用需求的發(fā)展,嵌入式微處理器或微控制器是集成度很高的片上系統(tǒng)(微控制器是集成度很高的片上系統(tǒng)(SOCSOC)。)。 板級設(shè)備就是在處理器芯片外部的,通過處理器提供板級設(shè)備就是在處理器芯片外部的,通過處理器提供的片外總線與處理器進行連接和通信的一些設(shè)備,它的片外總線與處理器進行連接和通信的一些設(shè)備,它們位于嵌入式硬件板上。典型的板級設(shè)備包括擴展的們位于嵌入式硬

6、件板上。典型的板級設(shè)備包括擴展的存儲器、通過處理器存儲器、通過處理器GPIOGPIO或串行總線擴展的其他一些或串行總線擴展的其他一些設(shè)備等。設(shè)備等。片內(nèi)設(shè)備和板級設(shè)備片內(nèi)設(shè)備和板級設(shè)備 在芯片內(nèi)集成的設(shè)備與芯片的應(yīng)用領(lǐng)域、目標應(yīng)在芯片內(nèi)集成的設(shè)備與芯片的應(yīng)用領(lǐng)域、目標應(yīng)用系統(tǒng)的檔次等有關(guān),通常包括:用系統(tǒng)的檔次等有關(guān),通常包括: 片內(nèi)存儲器:部分嵌入式微處理器 外部存儲器的控制器,外設(shè)接口(串口,并口) LCD控制器:面向終端類應(yīng)用的嵌入式微處理器 中斷控制器,DMA控制器,協(xié)處理器 定時器,A/D、D/A轉(zhuǎn)換器 多媒體加速器:當(dāng)高級圖形功能需要時 總線(包括各種串行總線如UART, SPI,

7、 IIS, 工業(yè)控制領(lǐng)域所用的I2C, 汽車電子領(lǐng)域的CAN, LIN等) 其他標準接口或外設(shè)串行設(shè)備和并行設(shè)備串行設(shè)備和并行設(shè)備 按照與外界其他設(shè)備之間通信時數(shù)據(jù)傳輸?shù)膶挾劝凑张c外界其他設(shè)備之間通信時數(shù)據(jù)傳輸?shù)膶挾?,可分為串行設(shè)備、并行設(shè)備。設(shè)備與設(shè)備之間,可分為串行設(shè)備、并行設(shè)備。設(shè)備與設(shè)備之間進行數(shù)據(jù)傳輸時通過串行或并行總線進行數(shù)據(jù)的進行數(shù)據(jù)傳輸時通過串行或并行總線進行數(shù)據(jù)的按位串行傳輸或多數(shù)據(jù)位的并行傳輸。按位串行傳輸或多數(shù)據(jù)位的并行傳輸。內(nèi)存映射設(shè)備和內(nèi)存映射設(shè)備和I/O映射設(shè)備、特殊指令映射設(shè)備、特殊指令訪問設(shè)備訪問設(shè)備根據(jù)處理器核操作設(shè)備的方式,可分為內(nèi)存映射設(shè)備、根據(jù)處理器核操

8、作設(shè)備的方式,可分為內(nèi)存映射設(shè)備、I/OI/O映映射設(shè)備及特殊指令訪問設(shè)備。射設(shè)備及特殊指令訪問設(shè)備。內(nèi)存映射設(shè)備內(nèi)存映射設(shè)備指與內(nèi)存統(tǒng)一編址的設(shè)備,對于它們的訪問方式指與內(nèi)存統(tǒng)一編址的設(shè)備,對于它們的訪問方式與訪問內(nèi)存一樣,從操作指令上不能區(qū)分是訪問設(shè)備還是內(nèi)存與訪問內(nèi)存一樣,從操作指令上不能區(qū)分是訪問設(shè)備還是內(nèi)存,需要從具體訪問的地址來判斷。這種方式的好處是:,需要從具體訪問的地址來判斷。這種方式的好處是: 可采用豐富的內(nèi)存操作指令訪問I/O單元 無需單獨的I/O地址譯碼電路 無需專用的I/O指令壞處是:壞處是: 外設(shè)占用內(nèi)存空間 I/O程序不易讀很多很多RISCRISC架構(gòu)的嵌入式微處理

9、器比如架構(gòu)的嵌入式微處理器比如ARM, PPCARM, PPC等都采用這種設(shè)備編址等都采用這種設(shè)備編址方式。方式。內(nèi)存映射設(shè)備和內(nèi)存映射設(shè)備和I/O映射設(shè)備、特殊指令映射設(shè)備、特殊指令訪問設(shè)備訪問設(shè)備 I/OI/O映射設(shè)備映射設(shè)備就是指系統(tǒng)中就是指系統(tǒng)中I/OI/O設(shè)備與內(nèi)存地址是分開設(shè)備與內(nèi)存地址是分開的,的,I/OI/O設(shè)備端口具有獨立的地址空間。對于這樣的設(shè)備端口具有獨立的地址空間。對于這樣的設(shè)備,從處理器的操作指令上能區(qū)分與內(nèi)存訪問的區(qū)設(shè)備,從處理器的操作指令上能區(qū)分與內(nèi)存訪問的區(qū)別。這種方式的優(yōu)勢和劣勢剛好與內(nèi)存映射設(shè)備相反別。這種方式的優(yōu)勢和劣勢剛好與內(nèi)存映射設(shè)備相反。其好處是:。

10、其好處是: I/O單元不占用內(nèi)存空間 I/O程序易讀 缺點就是:缺點就是:I/OI/O操作指令僅有單一的傳送指令操作指令僅有單一的傳送指令,I/O,I/O接接口需有地址譯碼電路口需有地址譯碼電路 典型的典型的I/OI/O映射設(shè)備就是映射設(shè)備就是Intel80X86Intel80X86系列的處理器。系列的處理器。內(nèi)存映射設(shè)備和內(nèi)存映射設(shè)備和I/O映射設(shè)備、特殊指令映射設(shè)備、特殊指令訪問設(shè)備訪問設(shè)備 特殊指令訪問設(shè)備特殊指令訪問設(shè)備就是指必須通過特殊的處理器就是指必須通過特殊的處理器指令才能訪問的設(shè)備,比如指令才能訪問的設(shè)備,比如PowerPCPowerPC處理器內(nèi)部的處理器內(nèi)部的DEC, TBD

11、EC, TB等,對它們的相關(guān)控制雖然也是通過相關(guān)等,對它們的相關(guān)控制雖然也是通過相關(guān)寄存器來完成的,但是這些寄存器不像通常的設(shè)寄存器來完成的,但是這些寄存器不像通常的設(shè)備控制寄存器那樣具有訪問地址,而是需要通過備控制寄存器那樣具有訪問地址,而是需要通過特殊的指令進行操作。特殊的指令進行操作。設(shè)備設(shè)備 / 接口緩沖接口緩沖 在數(shù)據(jù)處理和傳輸過程中,處理器、總線以及各在數(shù)據(jù)處理和傳輸過程中,處理器、總線以及各種設(shè)備和接口具有較大的性能差異,因此有些設(shè)種設(shè)備和接口具有較大的性能差異,因此有些設(shè)備或接口提供了一定的數(shù)據(jù)緩沖存儲的能力,在備或接口提供了一定的數(shù)據(jù)緩沖存儲的能力,在驅(qū)動軟件開發(fā)時要注意對緩

12、沖的正確處理(或提驅(qū)動軟件開發(fā)時要注意對緩沖的正確處理(或提供專門的緩沖管理機制),以滿足正確的數(shù)據(jù)傳供專門的緩沖管理機制),以滿足正確的數(shù)據(jù)傳輸及性能方面的要求。輸及性能方面的要求。12.2.2 設(shè)備接口寄存器概述設(shè)備接口寄存器概述 在與處理器核連接時,基本都提供了三類可以被在與處理器核連接時,基本都提供了三類可以被處理器操作的寄存器:處理器操作的寄存器: 控制寄存器控制寄存器:對設(shè)備的工作模式、工作時鐘頻率或數(shù)據(jù)傳輸速率、數(shù)據(jù)格式、中斷使能或禁止等進行控制設(shè)置的寄存器??刂萍拇嫫饕话阍谠O(shè)備初始化的時候被進行相應(yīng)設(shè)置,之后在設(shè)備工作過程中還可以修改其中的內(nèi)容,以達到對設(shè)備靈活控制的目的。 狀

13、態(tài)寄存器狀態(tài)寄存器:狀態(tài)寄存器中包括了設(shè)備在工作過程中的一些狀態(tài)信息,這些信息可以被驅(qū)動軟件使用,以在合適的時機根據(jù)設(shè)備的狀態(tài)采取相應(yīng)的操作,完成數(shù)據(jù)的正常傳輸、錯誤處理等工作。如果設(shè)備工作在中斷方式下,狀態(tài)寄存器中的某些標識與特定的中斷相關(guān)聯(lián),也可以被中斷處理程序加以利用。12.2.2 設(shè)備接口寄存器概述設(shè)備接口寄存器概述 數(shù)據(jù)寄存器數(shù)據(jù)寄存器:數(shù)據(jù)寄存器中保存了需要通過設(shè)備向嵌入式系統(tǒng)外部發(fā)送的數(shù)據(jù)信息,或者從外部接收到的數(shù)據(jù)信息。某些設(shè)備的發(fā)送數(shù)據(jù)寄存器和接收數(shù)據(jù)寄存器是分離的,即CPU需要訪問不同的數(shù)據(jù)寄存器來發(fā)送和接收數(shù)據(jù);而有些設(shè)備的發(fā)送和接收數(shù)據(jù)寄存器是同一個,即CPU訪問同一個

14、數(shù)據(jù)寄存器來發(fā)送或接收數(shù)據(jù)(根據(jù)對數(shù)據(jù)寄存器的讀寫方向的不同來決定是數(shù)據(jù)發(fā)送還是接收)。在后一種情況下,實際上在設(shè)備內(nèi)部還是有2個不同的分別用來處理發(fā)送和接收的數(shù)據(jù)寄存器(如下圖所示,MPC5554的串行通信接口SCI單元分別有2個移位寄存器來實現(xiàn)數(shù)據(jù)的串行發(fā)送接收)。12.2.3 設(shè)備接口寄存器實例:設(shè)備接口寄存器實例:W90P710的的UART接口寄存器接口寄存器 在在W90P710W90P710內(nèi)部,集成了內(nèi)部,集成了4 4個個UARTUART端口,每個端口的一端口,每個端口的一組寄存器是連續(xù)編址的,需要先知道它們的基地址是組寄存器是連續(xù)編址的,需要先知道它們的基地址是多少。多少。 每個

15、每個UARTUART端口特有的寄存器有:端口特有的寄存器有: UART_LCR(線控制寄存器) UART_RBR/UART_THR(接收緩存/發(fā)送保持寄存器) UART_IER(中斷使能寄存器) UART_DLM和UART_DLL(波特率除數(shù)寄存器) UART_LSR(線形狀態(tài)寄存器) UART_FCR(FIFO控制寄存器) UART_IIR(中斷標識寄存器) 與與UARTUART有關(guān)的有關(guān)的GPIOGPIO功能配置的寄存器:功能配置的寄存器:GPIO_CFG5GPIO_CFG5。GPIO_CFG5寄存器(寄存器(GPIO端口端口5配置寄存器)配置寄存器) 該寄存器的該寄存器的PORT_0PO

16、RT_0PORT_3PORT_3可分別可分別用于將用于將GPIO5GPIO5GPIO8GPIO8配置成配置成UART0UART0和和UART1UART1的發(fā)送和接收的發(fā)送和接收引腳。引腳。UART_LCR(線控制寄存器線控制寄存器)位域位域描述描述7DLAB除數(shù)鎖存訪問位0:用來訪問RBR, THR, IER1:用來訪問除數(shù)鎖存寄存器DLL和DLM6BCBBreak控制位,當(dāng)該位設(shè)置為邏輯1,SOUT引腳被強制為邏輯0狀態(tài)。5SPE強制校驗使能4EPE偶校驗使能3PBE校驗位使能2NSB停止位的數(shù)量0:1停止位1:1.5停止位(5位字長)或2停止位(6,7,8位字長)1:0WLS字長度選擇WL

17、S1:0字符長度005位016位107位118位UART_RBRUART_THR(接收緩存接收緩存發(fā)發(fā)送保持寄存器送保持寄存器)位域位域描述描述7:0 8位的接收數(shù)據(jù)通過讀該寄存器,UART將返回一個8位的從SIN引腳接收的數(shù)據(jù)(最低有效位在前)UART_RBRUART_THR(接收緩存接收緩存發(fā)發(fā)送保持寄存器送保持寄存器)位域位域描述描述7:08 位已 發(fā) 送的數(shù)據(jù)通過向該寄存器寫數(shù)據(jù),UART將一個8位的數(shù)據(jù)從SOUT引腳輸出(最低有效位在前)UART_IER(中斷使能寄存器中斷使能寄存器) 該寄存器的各個位用于控制串口可能觸發(fā)的各種該寄存器的各個位用于控制串口可能觸發(fā)的各種中斷的使能狀態(tài)

18、,該寄存器的默認值是未打開所中斷的使能狀態(tài),該寄存器的默認值是未打開所有中斷。有中斷。位域位域描述描述31:5保留4nDBGACK_ENICE調(diào)試模式確認使能3MSIEMODEM狀態(tài)中斷(Irpt_MOS)使能2RLSIE接收線狀態(tài)中斷(Irpt_RLS)使能1THREIE發(fā)送保持寄存器空中斷(Irpt_THRE)使能0RDAIE接收數(shù)據(jù)可用中斷(Irpt_RDA)使能和超時中斷(Irpt_TOUT)使能UART_DLM和和UART_DLL(波特率除數(shù)波特率除數(shù)寄存器寄存器)位域位域描述描述7:0波特率除數(shù)(低字節(jié))波特率除數(shù)的低字節(jié)位位域域描述描述7:0 波特率除數(shù)(高字節(jié))波特率除數(shù)的高字

19、節(jié)Baud Rate = Crystal Clock / 16 * Divisor + 2UART_LSR(線狀態(tài)寄存器)(線狀態(tài)寄存器) 該寄存器用以表示串口傳輸數(shù)據(jù)時輸出線的狀態(tài)該寄存器用以表示串口傳輸數(shù)據(jù)時輸出線的狀態(tài)。位位域域描述描述7E R R _RXRX FIFO錯誤6TE發(fā)送器空5THRE發(fā)送保持寄存器空4BIIBreak中斷指示3FEI幀錯誤指示2校驗錯誤指示1OEI過載錯誤指示0RFDRRX FIFO數(shù)據(jù)就緒UART_FCR(FIFO控制寄存器控制寄存器) 串口是一個低速設(shè)備,為了緩解串口與總線的速串口是一個低速設(shè)備,為了緩解串口與總線的速度差距,度差距,UARTUART控制

20、器提供了先進先出控制器提供了先進先出(first in (first in first out)first out)的緩沖區(qū),由的緩沖區(qū),由UART_FCRUART_FCR寄存器進行控寄存器進行控制。該寄存器的低制。該寄存器的低8 8位有效。當(dāng)數(shù)據(jù)通過位有效。當(dāng)數(shù)據(jù)通過UART_RBR UART_RBR UART_THR UART_THR寄存器接收或者發(fā)送的時候,數(shù)據(jù)并寄存器接收或者發(fā)送的時候,數(shù)據(jù)并不是直接傳送到總線上的,需要在緩沖區(qū)里暫存不是直接傳送到總線上的,需要在緩沖區(qū)里暫存一下。一下。UART_FCR(FIFO控制寄存器控制寄存器)位域位域描述描述7:6RFITL接收FIFO中斷(I

21、rpt_RDA)觸發(fā)水平RFITL7:6Irpt_RDA觸發(fā)水平(字節(jié))00010104100811143DMSDMA模式選擇2TFRTX FIFO復(fù)位1RFRRX FIFO復(fù)位0FMEFIFO模式使能UART_IIR(中斷標識寄存器中斷標識寄存器)位位描述描述7FMESFIFO模式使能狀態(tài)該位指示了是否FIFO模式被使能。一旦FIFO模式被總是使能,當(dāng)CPU讀該寄存器時該位總是顯示為邏輯16:5RFTLSRX FIFO 門限水平狀態(tài)這些位顯示了接收FIFO當(dāng)前的門限水平設(shè)置(RTHO)。4DMSDMA模式選擇DMA功能在該版本中未實現(xiàn)。當(dāng)讀IIR寄存器時,DMS位總是返回03:1IID中斷標

22、識IID和NIP位一起指示了UART當(dāng)前的中斷請求0NIP沒有中斷請求UART_IIR寄存器中斷標識位說明寄存器中斷標識位說明IIR3:0優(yōu)先級優(yōu)先級中斷類型中斷類型中斷源中斷源中斷復(fù)位控制中斷復(fù)位控制-1-無無-0110最高接 收 線 狀 態(tài)(Irpt_RLS)過載錯誤、極性錯誤、幀錯誤等讀LSR0100第二接 收 數(shù) 據(jù) 可 用(Irpt_RDA)接收FIFO已到達接收水平接收FIFO降到門限值以下1100第二接 收 F I F O 超 時(Irpt_TOUT)接收FIFO非空并且在TOR(超時寄存器)定義的時間范圍內(nèi)接收FIFO中沒有事件發(fā)生讀RBR0010第三發(fā)送保持寄存器空(Irpt

23、_THRE)發(fā)送保持寄存器空讀IIR(如果中斷源是Irpt_THRE)或?qū)慣HR0000第四M O D E M 狀 態(tài)(Irpt_MOS)CTS, DSR或DCD位在改變狀態(tài),或RI位正從高變到低讀MSR(可選)12.2.4 MPC5554嵌入式微處理器的串口嵌入式微處理器的串口相關(guān)寄存器相關(guān)寄存器 在在MPC5554MPC5554嵌入式微處理器中,有嵌入式微處理器中,有2 2個個eSCIeSCI模塊,即模塊,即增強串行通信接口模塊,支持增強串行通信接口模塊,支持UARTUART和和LINLIN通信功能通信功能。MPC5554的的eSCI模塊結(jié)構(gòu)模塊結(jié)構(gòu)MPC5554 eSCI接收模塊視圖接收

24、模塊視圖MPC5554 eSCI傳輸(發(fā)送)模塊視圖傳輸(發(fā)送)模塊視圖MPC5554 ESCI模塊寄存器清單模塊寄存器清單寄存器功能寄存器功能名稱名稱寬度(位數(shù))寬度(位數(shù))地址地址0 xFFFB_0000(A)0 xFFFB_4000(B)控制寄存器1ESCIx_CR132位Base + 0 x0000控制寄存器2ESCIx_CR216位Base + 0 x0004數(shù)據(jù)寄存器ESCIx_DR16位Base + 0 x0006狀態(tài)寄存器ESCIx_SR32位Base + 0 x0008LIN 控制寄存器ESCIx_LCR32位Base + 0 xLIN 傳輸寄存器ESCIx_LTR32位Ba

25、se + 0 x0010LIN 接收寄存器ESCIx_LRR32位Base + 0 x0014LIN CRC 多項式寄存器ESCIx_LPR32位Base + 0 x0018eSCI 控制寄存器控制寄存器1 (ESCIx_CR1)位位名稱名稱說明說明315 S B RnSCI波特率19M數(shù)據(jù)格式,決定數(shù)據(jù)位是8位還是9位。0:1開始位, 8 數(shù)據(jù)位, 1 停止位1:1開始位, 9 數(shù)據(jù)位, 1 停止位22PE極性使能,用于使能極性功能23PT校驗類型0 偶校驗1 奇校驗24TIE傳輸中斷使能26RIE接收滿中斷使能28TE傳輸使能29RE接收使能eSCI 控制寄存器控制寄存器2 (ESCIx_

26、CR2)位位名稱名稱描述描述1FBR快速位錯誤檢測2BSTP 位錯誤 / 物理總線錯誤停止6BRK13傳輸break字符的長度。在LIN2.0下該位必須被設(shè)置成1,即采用13位的Break字符8BESM13位錯誤采樣模式9SBSTPSCI 位錯誤停止eSCI 數(shù)據(jù)寄存器數(shù)據(jù)寄存器 (ESCIx_DR) 對于該寄存器的使用,就是在發(fā)送串口數(shù)據(jù)時將對于該寄存器的使用,就是在發(fā)送串口數(shù)據(jù)時將需要發(fā)送的數(shù)據(jù)放到該寄存器中,在接收串口數(shù)需要發(fā)送的數(shù)據(jù)放到該寄存器中,在接收串口數(shù)據(jù)時從該寄存器中讀取收到的數(shù)據(jù)。據(jù)時從該寄存器中讀取收到的數(shù)據(jù)。eSCI狀態(tài)寄存器狀態(tài)寄存器 (ESCIx_SR) 狀態(tài)標志可以

27、被輪詢,某些標志位可用來產(chǎn)生中狀態(tài)標志可以被輪詢,某些標志位可用來產(chǎn)生中斷。斷。ESCIESCIx x_SR_SR中的所有位除了中的所有位除了RAFRAF都是通過寫入都是通過寫入1 1來被清除的。來被清除的。eSCI 狀態(tài)寄存器位域功能說明狀態(tài)寄存器位域功能說明位位名稱名稱描述描述0TDRE傳輸數(shù)據(jù)寄存器空標志當(dāng)傳輸移位寄存器從eSCI數(shù)據(jù)寄存器ESCIx_DR中接收到數(shù)據(jù)后該標志就被設(shè)置,也可產(chǎn)生一個對應(yīng)的中斷。一個TDRE中斷表示傳輸數(shù)據(jù)寄存器(ESCIx_DR) 空,因此一個新的數(shù)據(jù)可以被寫入到ESCIx_DR中傳輸了。向ESCIx_SR 的TDRE位置寫入1可以清除TDRE標志。2RD

28、RF接收數(shù)據(jù)寄存器滿標志。當(dāng)接收移位寄存器中的數(shù)據(jù)傳輸?shù)絜SCI數(shù)據(jù)寄存器中該標志被設(shè)置并可產(chǎn)生相應(yīng)的中斷。一個RDRF中斷表示接收到的數(shù)據(jù)已經(jīng)被傳輸?shù)絜SCI數(shù)據(jù)寄存器中了,可以被MCU讀取了。向ESCIx_SR的RDRF位置寫入1可以清除TDRE標志。11BERR位錯誤標志。當(dāng)eSCI工作在LIN模式下,當(dāng)前字節(jié)中有一個或多個位的讀回的值與傳輸?shù)闹挡幌嗤瑫r該標志被設(shè)置。位錯誤會導(dǎo)致LIN FSM復(fù)位16RXRDYeSCI 接收到了LIN 數(shù)據(jù)。在LIN模式下,當(dāng)eSCI 接收到了一個有效的RX數(shù)據(jù)字節(jié)時接收就緒(RXRDY) 標志被設(shè)置。17TXRDYLIN FSM 可以接受向ESCIx_

29、LTR的又一個寫操作。在LIN模式下,當(dāng)eSCI可以接收一個控制或數(shù)據(jù)字節(jié)時傳輸就緒(TXRDY)標志被設(shè)置。19STO從設(shè)備超時。當(dāng)LIN從設(shè)備沒有在指定的時間延遲內(nèi)完成完整的RX數(shù)據(jù)字節(jié)的發(fā)送時,該標志被設(shè)置。23FRC禎完成標志,LIN 禎完成傳輸,所有的LIN 數(shù)據(jù)字節(jié)都接收到。當(dāng)一個TX禎的最后一個字節(jié)發(fā)送以后或一個RX禎的最后字節(jié)接收到以后,該標志被設(shè)置。注意1:此時已經(jīng)完成了校驗和的比較。注意2:FRC標志用來指示CPU可以建立下一禎。然而,它可能在DMA控制器將最后一個字節(jié)從eSCI傳輸?shù)较到y(tǒng)內(nèi)存之前被設(shè)置。因此在這種情況下不能使用FRC,而需要使用DMA中斷。31OVFLES

30、CIx_LRR 溢出。當(dāng)ESCIx_LRR中的數(shù)據(jù)在被CPU讀走之前又接收到了另一個字節(jié)時,該標志被設(shè)置。這意味著CPU負載過大,不能及時讀走收到的數(shù)據(jù)。LIN 控制寄存器控制寄存器 (ESCIx_LCR)位位名稱名稱描述描述0LRESLIN 同步,導(dǎo)致LIN協(xié)議引擎返回到開始狀態(tài)。這會在位錯誤后自動發(fā)生,但軟件可能會通過設(shè)置該位來強制回到開始狀態(tài)。該位首先必須被設(shè)置然后被清除,以便協(xié)議引擎又可操作了。1WULIN 總線wake-up,產(chǎn)生一個wake-up 信號在LIN 總線上。每次傳輸開始時都必須設(shè)置該位。23WUD0:1 Wake-up 定界符時間。確定當(dāng)產(chǎn)生信號后多長時間開始一個新的禎

31、,可以選擇4、8、32、64個位時間的延遲。6PRTY激活極性生成功能,為LIN頭自動生成2個極性位。7LINLIN 模式,設(shè)置設(shè)備工作在LIN模式下。8RXIELIN RXREG 就緒中斷使能。9TXIELIN TXREG 就緒中斷使能。15FCIE禎完成中斷使能。LIN 傳輸寄存器傳輸寄存器 (ESCIx_LTR) 該寄存器用來傳輸該寄存器用來傳輸LINLIN禎數(shù)據(jù),其各個位域的定義禎數(shù)據(jù),其各個位域的定義隨著所發(fā)送的隨著所發(fā)送的LINLIN禎字節(jié)類型的不同而不同。禎字節(jié)類型的不同而不同。 第一個字節(jié)選擇傳輸?shù)刂?第二個字節(jié)決定禎的長度 第三、四個字節(jié)設(shè)置不同的禎選項并決定超時計數(shù)器。 如

32、果ESCIx_LCRPRTY位被設(shè)置頭校驗會自動產(chǎn)生。 對于 TX 禎,第四個字節(jié)(位 T7T0)被省略,因為超時功能不起作用。 后面的所有字節(jié)都是數(shù)據(jù)。 當(dāng)適當(dāng)?shù)倪x項被設(shè)置,CRC 和校驗和字節(jié)會被自動附加上去。LIN 傳輸寄存器傳輸寄存器 (ESCIx_LTR)LIN 接收寄存器接收寄存器 (ESCIx_LRR) 在輪循和中斷方式下,可以通過讀取該寄存器的在輪循和中斷方式下,可以通過讀取該寄存器的內(nèi)容來得到每個收到的內(nèi)容來得到每個收到的LINLIN數(shù)據(jù)字節(jié)的內(nèi)容。數(shù)據(jù)字節(jié)的內(nèi)容。LIN CRC 多項式寄存器多項式寄存器 (ESCIx_LPR)位位名稱名稱描述描述0-15Pn多項式數(shù)據(jù)位xn

33、. 位P15P0 被用來定義LIN多項式 標準是x15 +x14 + x10 + x8 + x7 + x4 + x3 + 1 (與CAN協(xié)議所用的多項式相同).主要內(nèi)容主要內(nèi)容 1 1 嵌入式系統(tǒng)驅(qū)動軟件概述嵌入式系統(tǒng)驅(qū)動軟件概述 2 2 嵌入式系統(tǒng)設(shè)備的特性及操作界面嵌入式系統(tǒng)設(shè)備的特性及操作界面 3 3 設(shè)備操作的基本原理設(shè)備操作的基本原理 4 W90P7104 W90P710串口驅(qū)動開發(fā)實例串口驅(qū)動開發(fā)實例 5 MPC5554 SCI5 MPC5554 SCI驅(qū)動開發(fā)實例驅(qū)動開發(fā)實例 6 6 設(shè)備驅(qū)動開發(fā)需注意的問題設(shè)備驅(qū)動開發(fā)需注意的問題 7 7 驅(qū)動軟件與操作系統(tǒng)的關(guān)系驅(qū)動軟件與操作

34、系統(tǒng)的關(guān)系12.3.1 概述概述 從從CPU CoreCPU Core參與數(shù)據(jù)傳輸過程的密切程度,設(shè)備參與數(shù)據(jù)傳輸過程的密切程度,設(shè)備操作可分為三種典型的模式操作可分為三種典型的模式 輪循方式輪循方式下CPU Core參與的密切程度最高,輪循時處理器不能進行其他工作; 中斷方式中斷方式的密切程度次之,中斷未發(fā)生之前CPU core可以進行其他工作,當(dāng)中斷發(fā)生時再通過響應(yīng)中斷對設(shè)備進行相關(guān)操作,提高了處理器與設(shè)備工作的并行度。但中斷的問題主要是:處理器在進行中斷響應(yīng)時需要一定的存儲開銷,并且有響應(yīng)延遲;特別是如果對中斷觸發(fā)的水平設(shè)置不適宜時(比如要求設(shè)備每完成一個字節(jié)的傳輸就產(chǎn)生一次中斷),頻繁

35、中斷的開銷是很大的。這還會造成第二個問題,即頻繁地響應(yīng)中斷可能會造成傳輸性能的下降,甚至丟失數(shù)據(jù)(通信的設(shè)備雙方速率不匹配)。12.3.1 概述概述 在需要連續(xù)的、大量的數(shù)據(jù)通信時,可通過DMA方式方式進行數(shù)據(jù)的收發(fā)。DMA是具有一定復(fù)雜性的總線主控設(shè)備,當(dāng)采用DMA來完成設(shè)備之間、設(shè)備與內(nèi)存之間的連續(xù)數(shù)據(jù)傳輸時,處理器對數(shù)據(jù)傳輸過程的參與密切程度是最低的,在很大程度上提升了處理器與設(shè)備的并行性。當(dāng)然,DMA傳輸完成后也可以通過中斷方式通知處理器進行下一步的處理,但與單純的中斷方式相比,中斷的發(fā)生頻率降低了,造成的額外開銷也就更小了。12.3.1 概述概述 設(shè)備初始化設(shè)備初始化 通過控制寄存器

36、對設(shè)備的工作模式(是中斷方式、輪循方式還是DMA方式,對于計數(shù)器設(shè)備是加計數(shù)還是減計數(shù))進行設(shè)置 對通訊相關(guān)硬件參數(shù)(比如UART傳輸?shù)臄?shù)據(jù)位數(shù)、停止位、校驗方式、FIFO設(shè)置、傳輸波特率設(shè)置等)進行設(shè)置 對設(shè)備進行使能控制(比如各種中斷的使能控制、數(shù)據(jù)接收或發(fā)送的使能控制,甚至為了盡量減少系統(tǒng)的功耗,關(guān)閉某些不需使用的設(shè)備或功能塊)12.3.2 輪循方式輪循方式 在輪循工作方式下,設(shè)備操作的基本步驟如下:在輪循工作方式下,設(shè)備操作的基本步驟如下: 查詢設(shè)備接口的狀態(tài)寄存器; 根據(jù)數(shù)據(jù)接收或發(fā)送的要求,檢查狀態(tài)寄存器中相應(yīng)的狀態(tài)標識是否滿足數(shù)據(jù)傳輸?shù)臈l件; 如果狀態(tài)標識不滿足工作條件,回到第1

37、)步繼續(xù)查詢; 如果狀態(tài)標識滿足工作條件,則由處理器從設(shè)備接口的數(shù)據(jù)寄存器讀數(shù)據(jù)或?qū)憯?shù)據(jù),完成單次數(shù)據(jù)的接收或發(fā)送,并將相應(yīng)的狀態(tài)標識清除,以準備好下一次的傳輸; 判斷是否滿足傳輸結(jié)束條件,如果滿足則退出,如果不滿足則回到第1)步進行下一次的數(shù)據(jù)傳輸。12.3.3 中斷方式中斷方式 中斷控制的硬件基礎(chǔ)中斷控制的硬件基礎(chǔ) 中斷控制的硬件基礎(chǔ)涉及三個層次,根據(jù)與CPU Core的距離,由內(nèi)到外依次是: 處理器核心。 中斷控制器。 設(shè)備的中斷標識與控制。 Z C V Q I F T M 4 M 3 M 2 M 1 M 0 C P S R 寄寄 存存 器器 I 位位 : 一一 級級 開開 關(guān)關(guān) , 控

38、控 制制 IR Q 中中 斷斷 ,但但 紅紅 色色 標標 注注 的的 為為 F IQ 中中 斷斷 3 1 3 0 - - - 1 3 - - 4 3 2 1 A IC 的的 M E C R ,M D C R 寄寄 存存 器器 控控 制制 通通 道道 通通 道道 的的 關(guān)關(guān) 閉閉 , 程程 序序 中中 已已 將將 其其 時時 鐘鐘 的的 通通 道道 打打 開開 中中 斷斷 信信 號號 屏屏 蔽蔽 門門 由由 T im er0 的的 T C S R 寄寄 存存 器器 中中 斷斷 使使 能能 位位 IE 2 9控控 制制 T IM E R 第一級:第一級:CPU Core中的中斷控制中的中斷控制NZ

39、CV QIFTM4M3M2M1M0當(dāng)I=1時禁止IRQ中斷,為0時則打開IRQ中斷。當(dāng)F=1時禁止FIQ中斷,為0時則打開FIQ中斷。ARM CPSR寄存器中斷屏蔽初始化函數(shù)寄存器中斷屏蔽初始化函數(shù)第二級:中斷控制器中的中斷控制第二級:中斷控制器中的中斷控制 在W90P710處理器中有一個中斷控制器AIC(advanced interrupt controller),可以處理多達32個中斷源,已定義的有31種,每個中斷源都對應(yīng)了唯一的中斷號W90P710 AIC的中斷優(yōu)先級位表的中斷優(yōu)先級位表中斷號中斷號優(yōu)先級優(yōu)先級432103876511211109216151413320191817424

40、23222152827262563130297其中中斷號越低,優(yōu)先級就越高,例如1號中斷即看門狗中斷的優(yōu)先級是最高的。另外優(yōu)先級為0的四個中斷觸發(fā)的是FIQ中斷,而其余級別的中斷全都屬于IRQ中斷。與與AIC編程相關(guān)的主要寄存器編程相關(guān)的主要寄存器 rAIC_IPERrAIC_IPER(中斷優(yōu)先編碼寄存器)(中斷優(yōu)先編碼寄存器) rAIC_MECRrAIC_MECR,rAIC_MDCRrAIC_MDCR(掩碼使能寄存器,第二(掩碼使能寄存器,第二級的中斷開關(guān)就在此)級的中斷開關(guān)就在此) rAIC_IMRrAIC_IMR(中斷掩碼寄存器)(中斷掩碼寄存器)中斷控制器的主要操作函數(shù)中斷控制器的主要

41、操作函數(shù) 中斷控制器的初始化:AIC_Init 中斷使能函數(shù):AIC_Int_EnableVoid Aic_Int_Enable ( char vector )unsigned int mask;if ( vector INTERRUPT_VECTOR_END )return;mask = 1 vector;rAIC_MECR = mask;中斷控制器的主要操作函數(shù)中斷控制器的主要操作函數(shù) 中斷禁止函數(shù):AIC_Int_Disable 獲取當(dāng)前最高優(yōu)先級中斷號:AIC_Get_Vector第三級:設(shè)備自身的中斷控制第三級:設(shè)備自身的中斷控制 第三級的中斷使能控制是對設(shè)備接口的控制寄存器的中斷相

42、關(guān)位進行設(shè)置,以便使能需要處理的中斷類型,這通常是在設(shè)備的初始化過程中完成的。 當(dāng)設(shè)備產(chǎn)生中斷請求時,剛開始處理器還只能確定到底是哪個設(shè)備產(chǎn)生了中斷,而一個設(shè)備可能發(fā)生中斷的具體原因有多種,因此需要在中斷處理程序中通過檢測相應(yīng)的標志位確定具體發(fā)生的中斷類型,以針對中斷的具體原因采取相應(yīng)的處理。12.3.3 中斷方式中斷方式 中斷響應(yīng)過程與兩級中斷處理程序中斷響應(yīng)過程與兩級中斷處理程序 1)初始化 2)處理器響應(yīng)中斷的過程 3)第一級的中斷處理程序 4)第二級的中斷處理程序初始化初始化 初始化的主要目的是為了讓設(shè)備能正常發(fā)生中斷初始化的主要目的是為了讓設(shè)備能正常發(fā)生中斷、處理器能正常響應(yīng)和處理中

43、斷,主要包括以下、處理器能正常響應(yīng)和處理中斷,主要包括以下幾部分的工作:幾部分的工作: 中斷控制器初始化,注意在中斷控制器中為需要以中斷方式工作的設(shè)備設(shè)置相應(yīng)的中斷級別,并使能該級中斷。 設(shè)備中斷方式初始化 處理器內(nèi)核中斷屏蔽的設(shè)置:使能處理器內(nèi)核的中斷屏蔽位 中斷向量與中斷處理程序的關(guān)聯(lián),即中斷處理程序的安裝。初始化初始化W90P710學(xué)習(xí)板相關(guān)初始化函數(shù)處理器響應(yīng)中斷的過程處理器響應(yīng)中斷的過程 在基于在基于ARMARM微處理器的系統(tǒng)中,對中斷的處理通常微處理器的系統(tǒng)中,對中斷的處理通常是分兩級完成的:是分兩級完成的: 處理器響應(yīng)中斷的過程:外部設(shè)備中斷作為快速中斷(FIQ)或普通中斷(IR

44、Q)被CPU Core響應(yīng)。IRQ和FIQ都屬于ARM的異常,當(dāng)ARM響應(yīng)這些異常時,硬件會自動跳轉(zhuǎn)到相應(yīng)的異常向量處執(zhí)行指令。通過對FIQ異常或IRQ異常向量進行適宜的設(shè)置,可以讓程序跳轉(zhuǎn)到第一級的中斷處理程序中; 在第一級的中斷處理程序中,訪問中斷控制器,根據(jù)相應(yīng)的中斷號判斷到底是哪一個設(shè)備發(fā)生了觸發(fā)中斷的事件,然后跳轉(zhuǎn)到第二級的中斷處理程序中; 在第二級的中斷處理程序中,進行設(shè)備具體的中斷處理。處理器響應(yīng)中斷的過程處理器響應(yīng)中斷的過程 ARMARM異常向量表及異常處理程序地址定義異常向量表及異常處理程序地址定義第一級的中斷處理程序第一級的中斷處理程序 第一級的中斷處理程序通常用特定處理器

45、的匯編第一級的中斷處理程序通常用特定處理器的匯編語言編寫,一是為提高中斷響應(yīng)性能,二則在其語言編寫,一是為提高中斷響應(yīng)性能,二則在其中需要使用一些特殊的指令。第一級中斷處理程中需要使用一些特殊的指令。第一級中斷處理程序的主要內(nèi)容是:序的主要內(nèi)容是: 保存上下文:保存中斷服務(wù)程序?qū)⒁褂玫乃屑拇嫫鞯膬?nèi)容,以便于在退出中斷服務(wù)程序之前進行恢復(fù) 如果中斷向量被多個設(shè)備所共享,為了確定產(chǎn)生該中斷信號的具體設(shè)備,需要查看中斷控制器的內(nèi)容,并調(diào)用第二級的(具體設(shè)備的)中斷處理程序。如果多個設(shè)備甚至連接到中斷控制器的同一輸入端,還需要進一步輪詢這些設(shè)備的中斷狀態(tài)寄存器,以確定到底是哪個設(shè)備產(chǎn)生的中斷;第一

46、級的中斷處理程序第一級的中斷處理程序 清中斷:為避免已經(jīng)處理的中斷再次觸發(fā)處理器的響應(yīng),需要清除掉設(shè)備以及中斷控制器中的相應(yīng)中斷請求標識(不同設(shè)備的清中斷方式可能不一樣,有的是讀一下狀態(tài)寄存器,有的是向狀態(tài)寄存器相應(yīng)位寫1,有的則是讀一下再寫); 恢復(fù)保存的上下文; 執(zhí)行中斷返回指令,返回被中斷的程序繼續(xù)執(zhí)行。第二級的中斷處理程序第二級的中斷處理程序 第二級的中斷處理程序也稱為設(shè)備級的中斷處理第二級的中斷處理程序也稱為設(shè)備級的中斷處理程序,通常的操作是檢查設(shè)備接口的狀態(tài)寄存器程序,通常的操作是檢查設(shè)備接口的狀態(tài)寄存器的各個位,以判斷具體中斷的類型,并做出相應(yīng)的各個位,以判斷具體中斷的類型,并做

47、出相應(yīng)的處理。的處理。示例示例代碼代碼 MPC5554 串口中斷處理程序串口中斷處理程序/*|中斷名稱: SCIInt|參 數(shù): 無|返 回 值: 無|注 釋: SCIInt中斷處理程序,中斷級別6*/ISR(SCIInt)uint32 Status; / 32位無符號整型變量Status,用于存儲狀態(tài)寄存器的信息/*start user code*/ 查看中斷標志,確定產(chǎn)生中斷的具體原因/ 目前只處理串口的TDRE(傳輸數(shù)據(jù)寄存器空)和RDRF(接收數(shù)據(jù)寄存器滿)中斷Get_SCI_status_reg(&Status); /讀取SCI狀態(tài)寄存器的值if(Status & (

48、1ESCI_SR_RDRF)!= 0) / 判斷是否是RDRF中斷/ 設(shè)置與后臺主程序 / 任務(wù)的通訊標志ReceiveReady = TRUE;if(Status & (1ESCI_SR_TDRE)!= 0) / 判斷是否是TDRE中斷/ 設(shè)置與后臺主程序 / 任務(wù)的通訊標志SendReady = TRUE;/*end user code*/12.3.3 中斷方式中斷方式 中斷與任務(wù)的協(xié)同工作中斷與任務(wù)的協(xié)同工作 需求: 在嵌入式系統(tǒng)中,為了提高系統(tǒng)的響應(yīng)性能,通常要求盡量短的關(guān)閉中斷時間。 中斷處理程序也應(yīng)盡量簡短,保持高優(yōu)先級的軟件是輕量級的 中斷處理程序的主要職責(zé) 對設(shè)備硬件端

49、口進行訪問和處理,根據(jù)設(shè)備的狀態(tài),完成基本的數(shù)據(jù)接收或發(fā)送,或是進行相關(guān)的控制處理(比如修改設(shè)置狀態(tài)),并在需要的情況下向外圍設(shè)備發(fā)送確認信息 把后續(xù)的可能需要的復(fù)雜的數(shù)據(jù)處理過程交給系統(tǒng)中其他的軟件部件來完成,比如任務(wù)。12.3.3 中斷方式中斷方式 中斷與任務(wù)的協(xié)同工作中斷與任務(wù)的協(xié)同工作 好處: 任務(wù)可以根據(jù)其優(yōu)先級的高低按照相應(yīng)的順序被調(diào)度執(zhí)行,任務(wù)優(yōu)先級體現(xiàn)了需要完成的工作的重要或緊急程度,更高優(yōu)先級的任務(wù)可優(yōu)先執(zhí)行,也就確保了與其關(guān)聯(lián)的中斷事件繼續(xù)按照合理的優(yōu)先順序被處理。 任務(wù)運行過程中系統(tǒng)是可以響應(yīng)外部中斷的,不會引起更多的延遲。示例示例代碼代碼 配合中斷完成數(shù)據(jù)收發(fā)處理的任務(wù)

50、代碼配合中斷完成數(shù)據(jù)收發(fā)處理的任務(wù)代碼TASK(UART_Function_Test)/設(shè)置串口的中斷工作方式,并使能其接收中斷,sci_config為串口配置參數(shù)結(jié)構(gòu)體sci_config.mode = INTERRUPT; /設(shè)置中斷工作方式sci_config.control_reg_value |= (1ESCI_CR1_RIE); /使能串口接收中斷Set_SCI_control_reg(sci_config.control_reg_value); /向串口控制寄存器寫入串口配置參數(shù)/使能全局中斷,在設(shè)備中斷打開后調(diào)用BSP_InterruptEnable(0);/通過檢測與中斷程序

51、通訊的標識進行延時,確保串口有接收到數(shù)據(jù)/先接收10個字節(jié)的數(shù)據(jù),INTERRUPT_NUMBER宏的值為10,interruptReceive為計數(shù)變量doif(ReceiveReady = TRUE)Get_SCI_data_reg(&dataReceivedinInterruptinterruptReceive+); /從串口數(shù)據(jù)寄存器中接收數(shù)據(jù)到內(nèi)存中ReceiveReady = FALSE;/ 清除相應(yīng)的中斷標志BSP_OutLong(sci_config.port_address_base+ESCI_SR, 1ESCI_SR_RDRF);while(interruptRec

52、eive INTERRUPT_NUMBER);示例代碼示例代碼 配合中斷完成數(shù)據(jù)收發(fā)處理的任務(wù)代碼(續(xù))配合中斷完成數(shù)據(jù)收發(fā)處理的任務(wù)代碼(續(xù))/將收到的數(shù)據(jù)拷貝到發(fā)送數(shù)組中for(i=0; i10; i+)dataSentbyInterrupti = dataReceivedinInterrupti;/使能串口發(fā)送中斷,禁止接收中斷sci_config.control_reg_value &= (1ESCI_CR1_RIE); / 清除串口接收中斷使能位sci_config.control_reg_value |= (1ESCI_CR1_TIE); / 設(shè)置串口發(fā)送中斷使能位Set_

53、SCI_control_reg(sci_config.control_reg_value); / 將新的串口配置信息寫入控制寄存器/再將收到的10個數(shù)據(jù)發(fā)送出去doif(SendReady = TRUE)Set_SCI_data_reg(dataSentbyInterruptinterruptSent+); /向串口數(shù)據(jù)寄存器寫入需發(fā)送的數(shù)據(jù)SendReady = FALSE;/ 清除相應(yīng)的中斷標識BSP_OutLong(sci_config.port_address_base+ESCI_SR, 1ESCI_SR_TDRE);while(interruptSent INTERRUPT_NUMB

54、ER);12.3.4 DMA方式方式一個一個LIN發(fā)送禎的發(fā)送禎的DMA傳輸過程傳輸過程1)主機首先將需要發(fā)送的完整禎的內(nèi)容(包括LIN從機的ID、禎數(shù)據(jù)長度、控制/超時信號、以及連續(xù)若干個數(shù)據(jù)字節(jié))放到一段連續(xù)的內(nèi)存空間中;2)然后主機對DMA控制器實施初始化以啟動禎的傳輸。 DMA傳輸方式利用DMA控制器和eSCI完成通信處理、位錯誤和物理總線錯誤檢測、校驗和以及CRC生成(它們將在數(shù)據(jù)的接收端即RX端被檢查)等一系列工作。在這個過程中,處理器的介入是最少的,代價是最低的。主要內(nèi)容主要內(nèi)容 1 1 嵌入式系統(tǒng)驅(qū)動軟件概述嵌入式系統(tǒng)驅(qū)動軟件概述 2 2 嵌入式系統(tǒng)設(shè)備的特性及操作界面嵌入式系

55、統(tǒng)設(shè)備的特性及操作界面 3 3 設(shè)備操作的基本原理設(shè)備操作的基本原理 4 W90P7104 W90P710串口驅(qū)動開發(fā)實例串口驅(qū)動開發(fā)實例 5 MPC5554 SCI5 MPC5554 SCI驅(qū)動開發(fā)實例驅(qū)動開發(fā)實例 6 6 設(shè)備驅(qū)動開發(fā)需注意的問題設(shè)備驅(qū)動開發(fā)需注意的問題 7 7 驅(qū)動軟件與操作系統(tǒng)的關(guān)系驅(qū)動軟件與操作系統(tǒng)的關(guān)系12.4.1 W90P710的串口操作流程的串口操作流程主要實現(xiàn)的功能接口主要實現(xiàn)的功能接口 串口初始化串口初始化 為指定串口設(shè)置波特率為指定串口設(shè)置波特率 為指定串口設(shè)置數(shù)據(jù)位的長度為指定串口設(shè)置數(shù)據(jù)位的長度 為指定串口設(shè)置數(shù)據(jù)校驗位為指定串口設(shè)置數(shù)據(jù)校驗位 為指定

56、串口設(shè)置數(shù)據(jù)停止位為指定串口設(shè)置數(shù)據(jù)停止位 從指定串口讀取一個字符從指定串口讀取一個字符 向指定串口發(fā)送一個字符向指定串口發(fā)送一個字符 從指定串口讀取一個字符串從指定串口讀取一個字符串 向指定串口發(fā)送一個字符串向指定串口發(fā)送一個字符串 向指定串口發(fā)送一個字符串,在結(jié)尾添加回車符向指定串口發(fā)送一個字符串,在結(jié)尾添加回車符和換行符和換行符12.4.2串口驅(qū)動程序頭文件串口驅(qū)動程序頭文件“Uart.h” 宏定義宏定義 串口端口的宏定義串口端口的宏定義 串口可用的波特率的宏定義串口可用的波特率的宏定義 串口數(shù)據(jù)位數(shù)的宏定義串口數(shù)據(jù)位數(shù)的宏定義 串口校驗極性的宏定義串口校驗極性的宏定義 串口各功能函數(shù)的

57、聲明串口各功能函數(shù)的聲明 Uart_Init:串口初始化:串口初始化 Uart_SetBaudRate:為指定串口設(shè)置波特率:為指定串口設(shè)置波特率 Uart_SetDataBits:為指定串口設(shè)置數(shù)據(jù)位的長度:為指定串口設(shè)置數(shù)據(jù)位的長度 Uart_GetChar:從指定串口讀取一個字符:從指定串口讀取一個字符 Uart_PutChar:向指定串口發(fā)送一個字符:向指定串口發(fā)送一個字符 12.4.3串口驅(qū)動程序?qū)崿F(xiàn)文件串口驅(qū)動程序?qū)崿F(xiàn)文件“Uart.c” 各功能函數(shù)的具體實現(xiàn),以下是以各功能函數(shù)的具體實現(xiàn),以下是以Uart_GetChar Uart_GetChar (從指定(從指定串口端口讀取一個

58、字符)為例的實現(xiàn)代碼串口端口讀取一個字符)為例的實現(xiàn)代碼12.4.4驅(qū)動程序的簡單功能測試驅(qū)動程序的簡單功能測試int main()int main()/ / 應(yīng)用程序的主函數(shù)應(yīng)用程序的主函數(shù) unsigned char myStringMAX_CHAR_NUM;unsigned char myStringMAX_CHAR_NUM;/ / 初始化某個初始化某個 串口端口串口端口 Uart_Init(UART_PORT0);Uart_Init(UART_PORT0);/ / 調(diào)用函數(shù)調(diào)用函數(shù)Uart_PutString()Uart_PutString()向串口向串口0 0輸出一些字符串信息輸出一

59、些字符串信息Uart_PutString(uartPort0,rnUart_PutString(uartPort0,rn歡迎使用歡迎使用W90P710W90P710嵌入式學(xué)習(xí)板嵌入式學(xué)習(xí)板rn);rn);Uart_PutString(uartPort0,“rnThis is Port”);Uart_PutString(uartPort0,“rnThis is Port”);/ / 調(diào)用函數(shù)調(diào)用函數(shù)Uart_PutChar()Uart_PutChar()向串口向串口0 0輸出單個字符輸出單個字符Uart_PutChar(uartPort0,0);Uart_PutChar(uartPort0,0)

60、;Uart_PutString(uartPort0,“rn”);Uart_PutString(uartPort0,“rn”);while(1) /while(1) /循環(huán)地讓用戶從控制臺輸入一些字符,由串口接收,這個過程是交互式的循環(huán)地讓用戶從控制臺輸入一些字符,由串口接收,這個過程是交互式的 / / 提示用戶輸入提示用戶輸入Uart_PutString(uartPort0,Please input something:t);Uart_PutString(uartPort0,Please input something:t); / / 調(diào)用函數(shù)調(diào)用函數(shù)Uart_GetString()Uart_GetString()獲取輸入的字符

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論