日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀] 三.中斷方式的串口編程1.用中斷方式編寫串口程序由那幾部分組成2.硬件上的支持1>UART0發(fā)送FIFO緩沖區(qū)A.UART0含有1個(gè)16字節(jié)的發(fā)送FIFO緩沖區(qū)B.U0THR是UART0發(fā)送FIFO的最高字節(jié)C.UART的發(fā)送FIFO是一直

三.中斷方式的串口編程

1.用中斷方式編寫串口程序由那幾部分組成


2.硬件上的支持

1>UART0發(fā)送FIFO緩沖區(qū)

A.UART0含有1個(gè)16字節(jié)的發(fā)送FIFO緩沖區(qū)

B.U0THR是UART0發(fā)送FIFO的最高字節(jié)

C.UART的發(fā)送FIFO是一直使能的

2>UART0接收FIFO緩沖區(qū)

A.UART0含有一個(gè)16字節(jié)的接收FIFO緩沖區(qū)。

B.軟件設(shè)置接收FIFO緩沖區(qū)的觸發(fā)字節(jié)。


3>中斷接口:UART0的中斷接口包含中斷使能寄存器(U0IER)和中斷標(biāo)識(shí)寄存器(U0IIR)。

lU0IIR:提供狀態(tài)碼用于指示一個(gè)掛起中斷的中斷源和優(yōu)先級(jí)。

lU0IER可以控制UART0的4個(gè)中斷源。

4>UART0有4個(gè)中斷源:

A.RLS(接收線狀態(tài))中斷:

(1)優(yōu)先級(jí)最高

(2)它在以下條件發(fā)生時(shí)產(chǎn)生錯(cuò)誤

l幀錯(cuò)誤(FE)

l溢出錯(cuò)誤(OE)

l奇偶錯(cuò)誤(PE)

l間隔中斷(BI)

注:

?可以通過查看U0LSR[4:1]中的值看到產(chǎn)生該中斷的錯(cuò)誤條件

?讀取U0LSR寄存器時(shí)清除該中斷。

B.RDA(接收數(shù)據(jù)可用)中斷:

(1)與CTI中斷并列第二優(yōu)先級(jí)。

(2)在以下情況觸發(fā)中斷:

l當(dāng)接收的有效數(shù)據(jù)到達(dá)接收FIFO設(shè)置寄存器(U0FCR)中設(shè)置的觸發(fā)點(diǎn)時(shí),RDA被激活。當(dāng)接收FIFO中的有效數(shù)據(jù)少于觸發(fā)點(diǎn)時(shí),RDA復(fù)位。

l中斷過程:

1>移位寄存器(U0RSR)從RxD引腳接收串行數(shù)據(jù)后,送入接收FIFO中

2>當(dāng)接收FIFO中的有效數(shù)據(jù)數(shù)量達(dá)到預(yù)定的觸發(fā)點(diǎn)時(shí),置位RDA中斷。

3>從U0RBR寄存器中讀取FIFO中最早到達(dá)的數(shù)據(jù),當(dāng)FIFO中的有效數(shù)據(jù)小于觸發(fā)點(diǎn)時(shí),清零RDA中斷。

C.CTI(字符超時(shí)指示)中斷

(1)優(yōu)先級(jí)為2.

(2)在以下情況發(fā)生中斷:

l當(dāng)接收FIFO中的有效數(shù)據(jù)少于預(yù)定的觸發(fā)點(diǎn)數(shù)量時(shí),如果在一定時(shí)間內(nèi)仍沒有接收到新的數(shù)據(jù),那將觸發(fā)該中斷。

(3)上面的時(shí)間指的是:3.5~4.5個(gè)字節(jié)所需要的時(shí)間。

(4)對(duì)接收FIFO的任何操作都會(huì)清零該中斷標(biāo)志。

(5)中斷過程:

l移位寄存器(U0RSR)從RxD0引腳接收串行數(shù)據(jù)后,送入接收FIFO中。

l當(dāng)接收FIFO中的有效數(shù)據(jù)少于觸發(fā)個(gè)數(shù),但如果長(zhǎng)時(shí)間沒有數(shù)據(jù)到達(dá),則觸發(fā)CTI中斷。

l從U0RBR中讀取接收FIFO中的數(shù)據(jù),或者有新的數(shù)據(jù)送入接收FIFO,都將清零CTI中斷。

注:

?3.5~4.5個(gè)字節(jié)的時(shí)間:指在串口當(dāng)前的波特率下,發(fā)送3.5~4.5個(gè)字節(jié)所需要的時(shí)間。

?當(dāng)接收FIFO中存放多個(gè)數(shù)據(jù),從U0RBR讀取數(shù)據(jù),但是沒有讀完所有數(shù)據(jù),那么在經(jīng)過3.5~4.5個(gè)字節(jié)的時(shí)間后觸發(fā)CTI中斷。

D.THRE(發(fā)送)中斷

(1)優(yōu)先級(jí)為第三級(jí)優(yōu)先級(jí)。

(2)當(dāng)FIFO為空并且在以下情況觸發(fā)中斷:

l系統(tǒng)啟動(dòng)時(shí),雖然發(fā)送FIFO為空,但不會(huì)產(chǎn)生THRE中斷。

l在上一次發(fā)生THRE中斷后,向發(fā)送FIFO中寫入1個(gè)字節(jié)數(shù)據(jù),將在一個(gè)字節(jié)加上一個(gè)停止位后發(fā)生THRE中斷

(because:如果發(fā)送移位寄存器為空,那么寫入發(fā)送FIFO的數(shù)據(jù)將直接進(jìn)入發(fā)送移位寄存器。此時(shí)發(fā)送FIFO仍然為空,如果立即產(chǎn)生THRE中斷,就會(huì)影響緊接著寫入發(fā)送FIFO的數(shù)據(jù)。

所以在發(fā)送完該一個(gè)字節(jié)以及一個(gè)停止位后,才產(chǎn)生THRE中斷。

l如果在發(fā)送FIFO中有過兩個(gè)字節(jié)以上的數(shù)據(jù),但是現(xiàn)在發(fā)送FIFO為空時(shí),將立即觸發(fā)THRE中斷。

l當(dāng)THRE中斷為當(dāng)前有效的最高優(yōu)先級(jí)中斷時(shí),往U0THR寫數(shù)或者對(duì)U0IIR的讀操作,將使THRE中斷復(fù)位

我們來看看這些中斷源與存儲(chǔ)器之間的關(guān)系:

注:

?由上圖可知:UART0有4個(gè)中斷源:分別是RLS(線狀態(tài))中斷,RDA(接收數(shù)據(jù))中斷,CTI(字符超時(shí))中斷,THRE(發(fā)送數(shù)據(jù))中斷。

?4個(gè)中斷源的優(yōu)先級(jí)如下圖所示:

3.串口中斷接收初始化


1>串口中斷接收初始化流程

l設(shè)置I/O引腳連接到UART0

l置位除數(shù)鎖存位,配置UART0幀數(shù)據(jù)格式

l根據(jù)波特率計(jì)算分頻值

l設(shè)置波特率

l清除除數(shù)鎖存位,并設(shè)置工作模式

l使能FIFO,并設(shè)置觸發(fā)點(diǎn)

l允許RBR中斷

注:我們可以發(fā)現(xiàn)與輪訓(xùn)方式相比,中斷方式只是增加了使能FIFO,并設(shè)置中斷觸發(fā)點(diǎn)和允許RBR中斷兩步。

2>中斷串口初始化需要配置的寄存器

(與輪循方式配置方法相同的寄存器在此處不在涉及)

lU0FCR(FIFO控制寄存器):U0FCR控制UART0 Rx和Tx FIFO的操作。

lU0IER(中斷使能寄存器):U0IER用于使能4個(gè)UART0中斷源。

3>具體寄存器的配置

(1)U0FCR

A作用:控制UART0 Rx和Tx的操作。

B長(zhǎng)度:8位寄存器。

C:每一位的含義:

l第0位:表示FIFO使能

置1:表示使能對(duì)UART0 Rx和Tx的FIFO以及U0FCR[7:1]的訪問。

置0:表示不能使用Rx和Tx的FIFO以及步能對(duì)U0FCR[7:1]的訪問。

注:該位的任何變化都將使UART0 FIFO清空。

l第1位:表示Rx FIFO的復(fù)位。

置1:會(huì)清零UART0 RxFIFO中的所有字節(jié)并復(fù)位指針邏輯。該位自動(dòng)清零。

l第2位:表示Tx FIFO的復(fù)位。

置1:會(huì)清零UART0 TxFIFO中的所有字節(jié)并復(fù)位指針邏輯。改位自動(dòng)清零。

l第[5:3]位:保留位,用戶不能對(duì)其進(jìn)行操作。從保留位讀出的值未被定義。

l第[7:6]位:表示Rx觸發(fā)選擇

00:觸發(fā)點(diǎn)為0(默認(rèn)為1字節(jié))

01:觸發(fā)點(diǎn)為1(默認(rèn)為4字節(jié))

10:觸發(fā)點(diǎn)為2(默認(rèn)為8字節(jié))

11:觸發(fā)點(diǎn)為3(默認(rèn)為14字節(jié))

注:這兩個(gè)位決定在激活中斷之前,接收UART0 FIFO必須寫入個(gè)字符。

(2)U0IER(中斷使能寄存器)

A作用:U0IER用于使能4個(gè)UART0中斷源

B長(zhǎng)度:8位寄存器

C每一位的含義:

l第0位:表示RBR中斷使能

置1:使能RDA中斷

置0:禁止RDA中斷

注:U0IEER第零位使能UART0接收數(shù)據(jù)可用中斷。它還控制(CTI)字符接收超時(shí)中斷。

l第1位:表示THRE中斷使能

置1:使能THRE中斷

置0:禁止THRE中斷

l第2位:表示Rx線狀態(tài)中斷使能

置1:使能Rx線狀態(tài)中斷

置0:禁止RX線狀態(tài)中斷

注:U0IER第二位使能UART0 Rx線狀態(tài)中斷。該中斷的狀態(tài)可從U0LSR[4:1]讀出

l第[7:3]位:是保留位

注:用戶不能向其寫入1.

4>串口初始化程序:

***********************************************************

*作者:tiger-john

*時(shí)間:2011年1月18日

*名稱:UART0_Init

*功能:UART0初始化通訊波特率115200,8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn)

*接收FIFO觸發(fā)點(diǎn)為8字節(jié),使能RDR(接收數(shù)據(jù))中斷

*入口參數(shù):bps串口波特率

*出口參數(shù):無

****************************************************************************/

voidUART0_Init(uint32 bps)

{

uint16Fdiv;

PINSEL0 = (PINSEL0 & ~(0xf) " 0x05) ;//設(shè)置UART0的引腳

U0LCR = 0x83;//置為除數(shù)鎖存位,進(jìn)行配置

Fdiv = (Fpclk>>4)/bps;

U0DLM = Fdiv>>8;

U0DLL = Fdiv%256;

U0LCR = 0x03;//清除除數(shù)鎖存位,并設(shè)置工作模式

U0FCR = 0x81;//使能FIFO,并設(shè)置觸發(fā)點(diǎn)為8字節(jié)

U0IER = 0x01;//允許RBR中斷,即接收中斷

}

5.中斷初始化

先來看一下UART0和VIC之間的關(guān)系:


1>中斷初始化流程:

l選擇中斷為向量中斷或快速中斷

l分配中斷通道

l設(shè)置UART0向量地址

l使能UART0中斷

2>關(guān)于ARM中斷編程方法和寄存器的使用在此不做涉及(如果想知道的話,可以看這篇文章http://blog.csdn.net/tigerjb/archive/2010/11/30/6045409.aspx

3>中斷初始化程序:

/**********************************************************

*作者:tiger-john

*時(shí)間:2011年1月18日

* 名稱: Interrupt_Init

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

串口全稱是串行接口(Serial Interface),串口通訊指僅用一對(duì)傳輸線就能將數(shù)據(jù)以比特位進(jìn)行傳輸?shù)囊环N通訊方式。盡管串口通訊必按字節(jié)傳輸?shù)牟⑿型ㄐ怕谴诳梢栽趦H用兩根線的情況下完成數(shù)據(jù)傳輸,大大降低了成本...

關(guān)鍵字: 串口 UART

隨著電腦技術(shù)的發(fā)展,一些老的設(shè)備在新電腦上不能被使用,主要原因是不管是臺(tái)式電腦,還是筆記本電腦,都很少有串口接口,也就是我們常說的COM口。好在這些設(shè)備都有USB接口,不妨通過接口轉(zhuǎn)換的方式,使我們的設(shè)備在新電腦上重新被...

關(guān)鍵字: 串口 USB

串口:串口是一個(gè)泛稱,UART、TTL、RS232、RS485都遵循類似的通信時(shí)序協(xié)議,因此都被通稱為串口。串口通訊應(yīng)用是工控人必須掌握的一個(gè)技能,幾乎在每一個(gè)項(xiàng)目中都會(huì)用到,今天我們就來詳細(xì)比較一下它們究竟有何區(qū)別。

關(guān)鍵字: 串口 協(xié)議

在嵌入式開發(fā)過程中,許多系統(tǒng)通常使用串口驅(qū)動(dòng)來滿足通信要求,但在實(shí)際應(yīng)用中,使用SPI通信方式會(huì)更加高效和快捷。

關(guān)鍵字: 串口 驅(qū)動(dòng)

串口WiFi模塊作為新一代嵌入式WiFi模塊,因其體積小、功耗低的特點(diǎn),廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居等領(lǐng)域。

關(guān)鍵字: 串口 WiFi模塊 嵌入式

在現(xiàn)代嵌入式系統(tǒng)設(shè)計(jì)中,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門陣列)的靈活性和可重構(gòu)性使其成為許多應(yīng)用的理想選擇。而在FPGA的開發(fā)和部署過程中,如何實(shí)現(xiàn)遠(yuǎn)程升級(jí)和故障恢復(fù)成為了一個(gè)重要議題。本文將詳細(xì)探討如何通過BPI FLASH實(shí)現(xiàn)...

關(guān)鍵字: FPGA 串口 MultiBoot 嵌入式系統(tǒng)

在現(xiàn)代電子設(shè)計(jì)中,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門陣列)因其高度的靈活性和可重構(gòu)性,成為眾多領(lǐng)域的核心組件。特別是在需要?jiǎng)討B(tài)更新或調(diào)整系統(tǒng)功能的場(chǎng)景中,F(xiàn)PGA的串口升級(jí)和MultiBoot功能顯得尤為重要。本文將深入探討FPGA...

關(guān)鍵字: FPGA 串口 MultiBoot

之前有個(gè)同事因?yàn)橛么诓樵兎绞桨l(fā)送數(shù)據(jù),被我說了一頓,明明有DMA資源,竟然放著不用,對(duì)于魚鷹這種性能強(qiáng)迫癥來說,肯定無法忍受,所以當(dāng)時(shí)就和他說,有時(shí)間你把它改一下。誰知道過了好幾個(gè)月他才有時(shí)間弄這個(gè),然后還是出了問題,...

關(guān)鍵字: DMA 串口

串行通訊是指僅用一根接收線和一根發(fā)送線就能將數(shù)據(jù)以位進(jìn)行傳輸?shù)囊环N通訊方式。盡管串行通訊的比按字節(jié)傳輸?shù)牟⑿型ㄐ怕?,但是串口可以在僅僅使用兩根線的情況下就能實(shí)現(xiàn)數(shù)據(jù)的傳輸。

關(guān)鍵字: 串口 串行通信

在下述的內(nèi)容中,小編將會(huì)對(duì)手把手教大家如何去實(shí)現(xiàn)RA UART實(shí)現(xiàn)串口波特率自適應(yīng),如果串口波特率自適應(yīng)內(nèi)容是您想要了解的焦點(diǎn)之一,不妨和小編共同閱讀這篇文章哦。

關(guān)鍵字: 串口 波特率 UART
關(guān)閉