發(fā)送接收
發(fā)送邏輯對(duì)從發(fā)送FIFO 讀取的數(shù)據(jù)執(zhí)行“并→串”轉(zhuǎn)換??刂七壿嬢敵銎鹗嘉辉谙鹊拇形涣?,并且根據(jù)控制寄存器中已編程的配置,后面緊跟著數(shù)據(jù)位(注意:最低位 LSB 先輸出)、奇偶校驗(yàn)位和停止位。
在檢測(cè)到一個(gè)有效的起始脈沖后,接收邏輯對(duì)接收到的位流執(zhí)行“串→并”轉(zhuǎn)換。此外還會(huì)對(duì)溢出錯(cuò)誤、奇偶校驗(yàn)錯(cuò)誤、幀錯(cuò)誤和線中止(line-break)錯(cuò)誤進(jìn)行檢測(cè),并將檢測(cè)到的狀態(tài)附加到被寫(xiě)入接收FIFO 的數(shù)據(jù)中。
波特率產(chǎn)生
波特率除數(shù)(baud-rate divisor)是一個(gè)22 位數(shù),它由16 位整數(shù)和6 位小數(shù)組成。波特率發(fā)生器使用這兩個(gè)值組成的數(shù)字來(lái)決定位周期。通過(guò)帶有小數(shù)波特率的除法器,在足夠高的系統(tǒng)時(shí)鐘速率下,UART 可以產(chǎn)生所有標(biāo)準(zhǔn)的波特率,而誤差很小。
數(shù)據(jù)收發(fā)
發(fā)送時(shí),數(shù)據(jù)被寫(xiě)入發(fā)送FIFO。如果UART 被使能,則會(huì)按照預(yù)先設(shè)置好的參數(shù)(波特率、數(shù)據(jù)位、停止位、校驗(yàn)位等)開(kāi)始發(fā)送數(shù)據(jù),一直到發(fā)送FIFO 中沒(méi)有數(shù)據(jù)。一旦向發(fā)送FIFO 寫(xiě)數(shù)據(jù)(如果FIFO 未空),UART 的忙標(biāo)志位BUSY 就有效,并且在發(fā)送數(shù)據(jù)期間一直保持有效。
BUSY 位僅在發(fā)送FIFO 為空,且已從移位寄存器發(fā)送最后一個(gè)字符,包括停止位時(shí)才變無(wú)效。即 UART 不再使能,它也可以指示忙狀態(tài)。BUSY 位的相關(guān)庫(kù)函數(shù)是UARTBusy( )
在UART 接收器空閑時(shí),如果數(shù)據(jù)輸入變成“低電平”,即接收到了起始位,則接收計(jì)數(shù)器開(kāi)始運(yùn)行,并且數(shù)據(jù)在Baud16 的第8 個(gè)周期被采樣。如果Rx 在Baud16 的第8 周期仍然為低電平,則起始位有效,否則會(huì)被認(rèn)為是錯(cuò)誤的起始位并將其忽略。
如果起始位有效,則根據(jù)數(shù)據(jù)字符被編程的長(zhǎng)度,在 Baud16 的每第 16 個(gè)周期(即一個(gè)位周期之后)對(duì)連續(xù)的數(shù)據(jù)位進(jìn)行采樣。如果奇偶校驗(yàn)?zāi)J绞鼓?,則還會(huì)檢測(cè)奇偶校驗(yàn)位。
最后,如果Rx 為高電平,則有效的停止位被確認(rèn),否則發(fā)生幀錯(cuò)誤。當(dāng)接收到一個(gè)完整的字符時(shí),將數(shù)據(jù)存放在接收FIFO 中。
原文標(biāo)題:UART工作原理
文章出處:【微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
責(zé)任編輯:haq
-
uart
+關(guān)注
關(guān)注
22文章
1275瀏覽量
103742
原文標(biāo)題:UART工作原理
文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論