0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

UART寄存器的循環(huán)緩沖區(qū)實現(xiàn)以及中斷驅(qū)動的UART實現(xiàn)和硬件設(shè)置

汽車玩家 ? 來源: Zilog ? 作者: Zilog ? 2021-06-23 15:43 ? 次閱讀

本應(yīng)用筆記介紹了用于 Z8 Encore 的中斷驅(qū)動 UART!XP? 和 Z8 Encore!MC? 微控制器。它描述了 UART 寄存器描述、循環(huán)緩沖區(qū)實現(xiàn),以及中斷驅(qū)動的 UART 實現(xiàn)和硬件設(shè)置。

Z8 Encore 中的 UART 外設(shè)概述設(shè)備

通用異步接收器/發(fā)送器 (UART) 是一種能夠處理異步數(shù)據(jù)傳輸?shù)娜p工通信通道。UART 使用具有可選奇偶校驗的單個 8 位數(shù)據(jù)模式。UART 的特性包括:

  • 8 位異步數(shù)據(jù)傳輸
  • 可選擇的偶數(shù)或奇數(shù)奇偶校驗生成和檢查
  • 一或兩個停止位的選項
  • 獨立的發(fā)送和接收中斷
  • 單獨的發(fā)送和接收使能
  • 幀、奇偶校驗、溢出和中斷檢測
  • 16 位波特率發(fā)生器 (BRG)
  • 具有三種可配置中斷方案的可選多處理器(9 位)模式
  • 波特率發(fā)生器定時器模式
  • 驅(qū)動器啟用外部總線收發(fā)器的輸出

UART 由三個主要功能塊組成:發(fā)送器、接收器和波特率發(fā)生器。UART 的發(fā)送器和接收器各自獨立運行,但使用相同的波特率和數(shù)據(jù)格式。圖 1 顯示了 UART 架構(gòu)。


圖 1 Z8 Encore 示意圖!XP UART 模塊

循環(huán)緩沖區(qū)實現(xiàn)

本節(jié)介紹循環(huán)緩沖區(qū)的實現(xiàn)。此處介紹的例程可用于任何排隊或緩沖應(yīng)用程序。

緩沖區(qū)通常用作臨時數(shù)據(jù)存儲,通常用于流式傳輸數(shù)據(jù)。類似地,循環(huán)緩沖區(qū)(或環(huán)形緩沖區(qū))是具有內(nèi)存分配方案的臨時數(shù)據(jù)存儲,其中緩沖區(qū)可以具有固定大小,并且當(dāng)索引指針返回到起始位置時可以重用每個內(nèi)存位置。這種緩沖方案被廣泛使用,并且有幾個現(xiàn)有版本,每個版本都根據(jù)應(yīng)用需求而變化。本節(jié)描述一個簡單的緩沖機制。

為了初始化循環(huán)緩沖區(qū),需要初始化一個內(nèi)存段或任何預(yù)定義長度的數(shù)組。這是緩沖數(shù)據(jù)的存儲位置。

《br》#define RBUF_IN_BUFFERSIZE (UINT8) 64)《br》UINT8 RBUF_InBuff [RBUF_IN_BUFFERSIZE];《br》

為了便于管理循環(huán)緩沖區(qū),初始化了兩個索引指針和一個數(shù)據(jù)計數(shù)器。

《br》UINT8 RBUF_InRdPtr; // Pointer to the next read location《br》UINT8 RBUF_InWrPtr; // Pointer to the next write location《br》UINT8 RBUF_InLength // Buffer length《br》

初始化時,緩沖區(qū)不包含任何內(nèi)容,指針位于緩沖區(qū)的開頭,如圖 2 所示。


圖 2 初始化緩沖區(qū)

當(dāng)數(shù)據(jù)被寫入緩沖區(qū)時,寫指針增加,數(shù)據(jù)計數(shù)器也增加。類似地,當(dāng)從緩沖區(qū)讀取數(shù)據(jù)時,讀取指針會遞增,而數(shù)據(jù)計數(shù)器會遞減。參見圖 3。


圖 3 緩沖區(qū)的讀/寫操作

當(dāng)讀或?qū)懼羔樀竭_(dá)緩沖區(qū)的末尾時,它會跳回到開頭,造成環(huán)繞效應(yīng)。因此,之前使用讀取操作獲取的數(shù)據(jù)將被覆蓋。見圖 4。


圖 4 環(huán)繞

中斷驅(qū)動的 UART 實現(xiàn)

本節(jié)介紹通過Z8 Encore 的UART 外設(shè)初始化、發(fā)送和接收數(shù)據(jù)的方法!設(shè)備。

本文檔中介紹的 UART 軟件實現(xiàn)支持基本格式,即 8 個數(shù)據(jù)位、無奇偶校驗和 1 個停止位。程序等待接收一個字符串(以換行符結(jié)束),然后回顯到輸入字符串。

為了便于通過 UART 進(jìn)行數(shù)據(jù)輸入/輸出,上一節(jié)中討論的循環(huán)緩沖區(qū)用于存儲數(shù)據(jù)。單獨的緩沖區(qū)用于處理發(fā)送和接收數(shù)據(jù)。可以根據(jù)用戶需要更改緩沖區(qū)大小 RBUF_IN_BUFFERSIZE 和 RBUF_OUT_BUFFERSIZE。

硬件設(shè)置


圖 5 Z8 Encore 通過 RS-232 端口連接到 PC

圖 5 顯示了 Z8 Encore 的硬件設(shè)置!開發(fā)套件通過超級終端連接到 PC。超級終端設(shè)置為 8-N-1,流量控制設(shè)置為無。源代碼和本文檔中的默認(rèn)波特率設(shè)置使用 115 kbps。用戶可以根據(jù)需要更改設(shè)置。

編輯:ymf

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1214

    瀏覽量

    100995
  • 波特率
    +關(guān)注

    關(guān)注

    2

    文章

    292

    瀏覽量

    33998
  • 中斷驅(qū)動
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1707
收藏 人收藏

    評論

    相關(guān)推薦

    基于C語言實現(xiàn)環(huán)形緩沖區(qū)/循環(huán)隊列

    這里分享一個自己用純C實現(xiàn)的環(huán)形緩沖區(qū)。
    的頭像 發(fā)表于 04-11 10:39 ?3014次閱讀
    基于C語言<b class='flag-5'>實現(xiàn)</b>環(huán)形<b class='flag-5'>緩沖區(qū)</b>/<b class='flag-5'>循環(huán)</b>隊列

    基于宏高效實現(xiàn)環(huán)形緩沖區(qū)教程

    來源 | 小麥大叔 循環(huán)緩沖區(qū)是嵌入式軟件工程師在日常開發(fā)過程中的關(guān)鍵組件。 多年來,互聯(lián)網(wǎng)上出現(xiàn)了許多不同的循環(huán)緩沖區(qū)實現(xiàn)和示例。我非常喜
    的頭像 發(fā)表于 09-02 09:24 ?6675次閱讀
    基于宏高效<b class='flag-5'>實現(xiàn)</b>環(huán)形<b class='flag-5'>緩沖區(qū)</b>教程

    使用UART FIFO緩沖區(qū)時,緩沖區(qū)中的數(shù)據(jù)有時會損壞的原因?

    1 TX FIFO 緩沖區(qū)中的一個字節(jié)從 UART 0 TX FIFO 更改為一個字節(jié)(見下圖)。 據(jù)我所見,問題發(fā)生在FIFO硬件的某個地方,因為軟件發(fā)送的數(shù)據(jù)是正確的。 UART
    發(fā)表于 03-06 06:59

    UART上的FIFO循環(huán)緩沖區(qū)大小

    ?示例:{STX,Hello \ 0,RTX}和{STX,這是一個長文本\ 0,RTX}我一直在互聯(lián)網(wǎng)上挖掘,我發(fā)現(xiàn)最好的方法是使用FIFO循環(huán)緩沖區(qū)。問題是BUFFER_SIZE在這種情況下如何解
    發(fā)表于 09-13 15:42

    UART緩沖區(qū)問題

    問題與中斷有關(guān)。只要UARTHI PUCHCHAR例程將字符直接放入PSoC UART發(fā)送數(shù)據(jù)寄存器,就發(fā)送字符。如果UARTHIPPUCHAR例程將字符放置到緩沖區(qū)中,則
    發(fā)表于 05-22 13:19

    UART緩沖技術(shù):友好中斷

    釋想象一下執(zhí)行一個任務(wù)的中斷例程:通過UART接收到字節(jié)后,它將字節(jié)存儲到緩沖區(qū)數(shù)組中,并增加totalBytes計數(shù)。isr_routine(){if(
    發(fā)表于 09-19 08:32

    DMA循環(huán)緩沖區(qū)如何重置起點?

    ){head_index = (head_index + dma_buffer_interrupt_size) % uartsize;}我遇到的問題是,當(dāng)我設(shè)置一個循環(huán)緩沖區(qū)時,一旦它進(jìn)入
    發(fā)表于 12-13 08:22

    如何接收UART數(shù)組緩沖區(qū)的長度呢?有何解決方案?

    數(shù)據(jù),禁用接收并返回。如果緩沖區(qū)數(shù)組已滿,但傳輸仍在繼續(xù),只需等待傳輸結(jié)束,然后禁用接收并返回。代碼:void uart1_receiveArray(uint8_t *arrayp
    發(fā)表于 12-14 08:18

    msp430 UART 通訊寄存器的詳細(xì)解讀

    msp430 UART 通訊 寄存器的詳細(xì)解讀 相關(guān)參數(shù)的設(shè)置和命令的詳見等等
    發(fā)表于 08-15 19:03 ?1次下載

    51單片機內(nèi)核UART串行總線環(huán)形緩沖區(qū)驅(qū)動實現(xiàn)的程序免費下載

    驅(qū)動實現(xiàn)串口中斷接收和發(fā)送數(shù)據(jù),緩沖區(qū)使用環(huán)形緩沖區(qū)。發(fā)送:手動置RI中斷標(biāo)志位為1,發(fā)生
    發(fā)表于 07-19 17:38 ?3次下載
    51單片機內(nèi)核<b class='flag-5'>UART</b>串行總線環(huán)形<b class='flag-5'>緩沖區(qū)</b><b class='flag-5'>驅(qū)動</b><b class='flag-5'>實現(xiàn)</b>的程序免費下載

    環(huán)形緩沖區(qū)實現(xiàn)原理

    在通信程序中,經(jīng)常使用環(huán)形緩沖區(qū)作為數(shù)據(jù)結(jié)構(gòu)來存放通信中發(fā)送和接收的數(shù)據(jù)。環(huán)形緩沖區(qū)是一個先進(jìn)先出的循環(huán)緩沖區(qū),可以向通信程序提供對緩沖區(qū)
    的頭像 發(fā)表于 03-22 10:03 ?7449次閱讀
    環(huán)形<b class='flag-5'>緩沖區(qū)</b>的<b class='flag-5'>實現(xiàn)</b>原理

    UART寄存器介紹與中斷操作詳解

    簡介 UART核提供了一個Avalon存儲映射(Avalon-MM)的接口,這個接口使得Avalon-MM的主要周邊設(shè)備(例如Nios II處理)通過讀和寫數(shù)據(jù)、控制寄存器,就能
    的頭像 發(fā)表于 08-25 16:46 ?1.6w次閱讀
    <b class='flag-5'>UART</b><b class='flag-5'>寄存器</b>介紹與<b class='flag-5'>中斷</b>操作詳解

    什么是緩沖區(qū)?有什么作用

    緩沖區(qū)其實就是一個存儲區(qū)域,它是由專門的硬件寄存器所組成的。
    的頭像 發(fā)表于 02-02 09:57 ?2.5w次閱讀

    環(huán)形緩沖區(qū)實現(xiàn)思路

    單片機程序開發(fā)一般都會用到UART串口通信,通過通信來實現(xiàn)上位機和單片機程序的數(shù)據(jù)交互。通信中為了實現(xiàn)正常的收發(fā),一般都會有對應(yīng)的發(fā)送和接收緩存來暫存通信數(shù)據(jù)。這里使用環(huán)形緩沖區(qū)的方式
    的頭像 發(fā)表于 01-17 15:07 ?1536次閱讀

    C++環(huán)形緩沖區(qū)設(shè)計與實現(xiàn)

    Buffer) 環(huán)形緩沖區(qū)(Circular Buffer),也被稱為循環(huán)緩沖區(qū)(Cyclic Buffer)或者環(huán)形隊列(Ring Buffer),是一種數(shù)據(jù)結(jié)構(gòu)類型,它在內(nèi)存中形成一個環(huán)形
    的頭像 發(fā)表于 11-09 11:21 ?1593次閱讀
    C++環(huán)形<b class='flag-5'>緩沖區(qū)</b>設(shè)計與<b class='flag-5'>實現(xiàn)</b>