那曲檬骨新材料有限公司

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

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

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

使用雙數(shù)據(jù)指針實(shí)現(xiàn)串行端口FIFO

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-02-21 16:06 ? 次閱讀

Dallas Semiconductor高速微控制器系列允許系統(tǒng)設(shè)計(jì)人員通過內(nèi)部UART優(yōu)化串行通信。本應(yīng)用筆記演示了如何利用這些增強(qiáng)型8051微控制器中的雙數(shù)據(jù)指針使用循環(huán)緩沖器。提供的示例匯編代碼用于顯示簡單的 256 字節(jié)串行端口循環(huán)緩沖區(qū)的實(shí)現(xiàn)。

介紹

原始 8051 微處理器的架構(gòu)包括一個(gè)標(biāo)準(zhǔn)的通用 同步/異步接收器/發(fā)射器(USART,通常稱為UART)。這 外設(shè)允許器件通過RS-232接口以各種波特率進(jìn)行通信。其中之一 8051 UART實(shí)現(xiàn)的缺點(diǎn)是其接收和發(fā)送緩沖區(qū) 只有一個(gè)深度,即軟件必須從接收緩沖區(qū)中檢索一個(gè)字節(jié),然后才能被 下一個(gè)收到的字符。可以在許多達(dá)拉斯半導(dǎo)體公司中實(shí)現(xiàn)快速軟件FIFO 和Maxim微控制器,增加了串行端口的實(shí)用性。

本應(yīng)用筆記演示了一個(gè)簡單的256字節(jié)循環(huán)緩沖器,但原理可以擴(kuò)展到 緩沖長度可達(dá) 64kB。數(shù)據(jù)由串行端口接收并存儲在緩沖區(qū)中,直到對其采取行動(dòng) 通過用戶提供的例程。當(dāng)緩沖區(qū)變滿時(shí),接收器通過軟件流控制將 向主機(jī)發(fā)出停止傳輸?shù)?a target="_blank">信號。當(dāng)用戶提供的例程清除緩沖區(qū)中的空間時(shí),它將 向主機(jī)發(fā)出信號以恢復(fù)傳輸。本應(yīng)用筆記中的示例足夠通用,可以 適用于各種用戶應(yīng)用。示例隨附的匯編源代碼是 在網(wǎng)站上的文件AN603_SW中提供。回答 51.

支持先進(jìn)先出構(gòu)建的硬件增強(qiáng)功能

高速和超高速微控制器系列具有許多功能,大大簡化了 軟件先進(jìn)先出的實(shí)施。所有這些功能都旨在最大限度地減少軟件開銷 與存儲和檢索數(shù)據(jù)相關(guān)聯(lián)。其中第一個(gè)功能是極高速 達(dá)拉斯半導(dǎo)體和Maxim微控制器的性質(zhì)。他們增強(qiáng)的 4 時(shí)鐘和 1 時(shí)鐘 機(jī)器循環(huán)型芯最大限度地減少了維護(hù)緩沖區(qū)所花費(fèi)的時(shí)間,并且通過擴(kuò)展允許 應(yīng)用程序運(yùn)行得更快。

另一個(gè)重要功能是雙數(shù)據(jù)指針。最初的 8051 只有一個(gè)數(shù)據(jù)指針,它 使得同時(shí)實(shí)現(xiàn)輸入和輸出指針變得困難。每次系統(tǒng)需要 在指針之間切換,它必須保存當(dāng)前值并加載另一個(gè)的值 指針。在嘗試將數(shù)據(jù)快速移入和移出緩沖區(qū)時(shí),這會引入明顯的延遲。 使用兩個(gè)數(shù)據(jù)指針,一個(gè)可以分配給輸入(插入)指針,另一個(gè)分配給輸出 (刪除)緩沖區(qū)的指針,消除與處理指針相關(guān)的延遲。另外 一些微控制器集成了增強(qiáng)的數(shù)據(jù)指針,可以自動(dòng)遞增數(shù)據(jù) 執(zhí)行某些數(shù)據(jù)指針相關(guān)指令后的指針。這節(jié)省了額外的機(jī)器 每個(gè)緩沖區(qū)訪問的周期。

通過使用內(nèi)部 1kB MOVX SRAM(其數(shù)據(jù)可用),可以進(jìn)一步提高速度 可以在單個(gè)機(jī)器周期內(nèi)訪問。在此內(nèi)存中定位循環(huán)緩沖區(qū)允許 實(shí)現(xiàn)非常快速的緩沖區(qū)。

軟件說明

此示例介紹串行端口的循環(huán) FIFO 緩沖區(qū)的基本體系結(jié)構(gòu)。接收數(shù)據(jù) 通過串行端口 0 并存儲在 MOVX 存儲器中的循環(huán)緩沖區(qū)中,直到提取為止 并由用戶定義的算法操作。此示例使用達(dá)拉斯和 Maxim 微控制器 雙數(shù)據(jù)指針。DPTR(也稱為 DPTR0)用作輸入指針,并始終指定 應(yīng)存儲通過串行端口接收的新信息的位置。DPTR1 是輸出指針, 顯示應(yīng)用程序軟件將檢索下一個(gè)未處理字節(jié)的位置。伴隨的 軟件應(yīng)該被認(rèn)為是這樣一個(gè)例子的骨架。

做了一些假設(shè)來簡化軟件并減小其大小:

緩沖區(qū)長度為 256 字節(jié),從 0000h 開始,到 00FFh 結(jié)束。軟件可以快速檢查 表示非零數(shù)據(jù)指針高字節(jié),以指示翻轉(zhuǎn)。

輸入和輸出指針僅遞增,盡管軟件可以很容易地修改為 支持雙向指針。

收到字符后對緩沖區(qū)狀態(tài)的反饋限制為剩余 1 個(gè)字節(jié) 警告和 0 字節(jié)剩余關(guān)機(jī)方法。這種通過/不通過的方法允許非常快的錯(cuò)誤 檢查,可最大限度地減少緩沖區(qū)輸入和輸出例程中花費(fèi)的時(shí)間。緩沖區(qū)狀態(tài) 從緩沖區(qū)讀取字符后,用戶提供的算法負(fù)責(zé)。

主機(jī)的錯(cuò)誤通知通過軟件流控制執(zhí)行。這是一個(gè)常見的 傳輸協(xié)議易于實(shí)現(xiàn),占用的處理器開銷很小。

當(dāng)程序啟動(dòng)時(shí),兩個(gè)數(shù)據(jù)指針都初始化到緩沖區(qū)的開頭。串口 也被初始化,然后軟件流控制“就緒”字符(XON:11h)被發(fā)送到 主機(jī)以允許傳輸數(shù)據(jù)。然后,軟件會等待,直到收到新字符或 應(yīng)用程序需要從緩沖區(qū)讀取一個(gè)字節(jié)。此示例僅顯示例程的外殼,該 緩沖區(qū)中的字節(jié);實(shí)際代碼將由應(yīng)用程序定義。

當(dāng)串口收到字符時(shí),調(diào)用串口0中斷服務(wù)例程(ISR)。第一 例程從串行端口檢索字節(jié),并存儲在緩沖區(qū)中由 輸入指針 (DPTR)。然后調(diào)用子例程Increment_DPTx,這將遞增所選數(shù)據(jù) 指針,然后執(zhí)行兩個(gè)操作。首先,它確保遞增的值不超過 緩沖區(qū)的上限。如果是這樣,它將指針值重置為緩沖區(qū)的開頭。二、它 檢查輸入指針是否有覆蓋輸出指針的危險(xiǎn),這種情況可能是 如果主機(jī)清空緩沖區(qū)的速度不夠快,則會遇到此問題。

溢出檢測和處理

溢出檢測和處理例程如圖 1 所示。它在輸入或 輸出指針遞增。首先,溢出例程確定輸入和 輸出指針。如果距離為一個(gè)字節(jié),則軟件會聲明溢出警告。這將設(shè)置 溢出標(biāo)志,并且還向另一個(gè)單元發(fā)送XOFF以停止傳輸,直到緩沖區(qū) 再次清空。串行端口接收器保持啟用狀態(tài),以允許發(fā)送單元 在收到 XOFF 時(shí)的傳輸過程中。聲明警告狀態(tài)比 緩沖區(qū)已滿狀態(tài)允許接收這最后一個(gè)字符。

如果距離為零字節(jié),則軟件聲明溢出關(guān)閉。這將設(shè)置溢出標(biāo)志, 傳輸 XOFF,并禁用串行端口接收器以防止 緩沖區(qū)。退出溢出警告或關(guān)閉狀態(tài)的唯一方法是讓緩沖區(qū)輸出例程 刪除數(shù)據(jù),直到距離增加到 2。

如果距離不是單個(gè)字節(jié)也不是零字節(jié),則未檢測到溢出。然后例程檢查 溢出標(biāo)志的狀態(tài)。如果未設(shè)置該標(biāo)志,則例程將退出。如果設(shè)置了溢出標(biāo)志,則 當(dāng)前狀態(tài)指示緩沖區(qū)剛剛從溢出警告狀態(tài)轉(zhuǎn)換為否 警告。如果是這種情況,則緩沖區(qū)已準(zhǔn)備好再次開始接收數(shù)據(jù),因此例程將清除 溢出標(biāo)志,重新啟用串行端口接收器,并傳輸 XON 字符。

pYYBAGP0e5-AO7q0AAAusCS5RV4257.gif?imgver=1

圖1.溢出處理程序流程圖。

程序集代碼示例

以下匯編語言代碼示例是使用 Keil 軟件編譯和模擬的 μVision2 集成開發(fā)環(huán)境。頭文件 reg320.inc 是一個(gè)包含名稱的文件 目標(biāo)微控制器(本例中為DS80C320)的寄存器和位,以及類似的文件 通常會隨您的匯編程序一起提供,以便與正在使用的特定微控制器一起使用。

審核編輯:郭婷

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

    關(guān)注

    48

    文章

    7649

    瀏覽量

    152103
  • 接收器
    +關(guān)注

    關(guān)注

    14

    文章

    2479

    瀏覽量

    72210
  • fifo
    +關(guān)注

    關(guān)注

    3

    文章

    389

    瀏覽量

    43854
收藏 人收藏

    評論

    相關(guān)推薦

    基于FPGA的異步FIFO實(shí)現(xiàn)

    大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來聊一聊基于FPGA的異步FIFO實(shí)現(xiàn)。 一、FIFO簡介 FIFO是英文First In First Out 的縮寫,是一種先進(jìn)先出的
    的頭像 發(fā)表于 06-21 11:15 ?6566次閱讀
    基于FPGA的異步<b class='flag-5'>FIFO</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    Keil C51中對雙數(shù)據(jù)指針的直接利用

    在8051體系中,數(shù)據(jù)指針DPTR作為一個(gè)特殊的16位寄存器,用于尋址64 KB的XDATA或CODE空間,通常它被當(dāng)作一個(gè)16位指針,指向一個(gè)常數(shù)表。雙數(shù)據(jù)
    發(fā)表于 11-30 17:30

    異步FIFO指針同步產(chǎn)生的問題

    如圖所示的異步FIFO,個(gè)人覺得在讀寫時(shí)鐘同步時(shí)會產(chǎn)生兩個(gè)時(shí)鐘周期的延時(shí),如果讀寫時(shí)鐘頻率相差不大,某一時(shí)刻讀寫指針相等,當(dāng)寫指針同步到讀模塊時(shí)會產(chǎn)生延時(shí),實(shí)際同步到讀模塊的寫指針是兩
    發(fā)表于 08-29 18:30

    如何使用串行端口發(fā)送和接收數(shù)據(jù)

    你好,我必須發(fā)送3個(gè)長TIPE可變形式的PLC到CY8C KIT01,我應(yīng)該使用這個(gè)工具包的串行端口,但我沒有任何線索如何開始。我應(yīng)該使用哪些組件來編程它來使用串行端口發(fā)送和接收
    發(fā)表于 04-09 12:06

    如何重置fifo指針

    它不會產(chǎn)生額外的SLWR信號。在傳輸開始時(shí),F(xiàn)IFI重置FIFO,第一個(gè)字是不確定的。我不知道為什么。所以我認(rèn)為如果我能重置FIFO指針,問題就可以解決了。那么有人知道如何重置FIFO
    發(fā)表于 04-24 14:06

    輕松上手單片機(jī)編程軟件——keil單片機(jī)編程軟件雙數(shù)據(jù)指針+二進(jìn)制

    keil對雙數(shù)據(jù)指針的支持情況以及其代碼生成機(jī)制,并為大家介紹keil c51直接使用二進(jìn)制的方法。在8051體系中,數(shù)據(jù)指針DPTR作為一個(gè)特殊的16位寄存器,用于尋址64 KB的X
    發(fā)表于 12-28 08:00

    如何通過一個(gè)簡單的INC AUXR1指令來回切換兩個(gè)數(shù)據(jù)指針

    Keil C51對雙數(shù)據(jù)指針的支持情況Keil C中直接生成雙數(shù)據(jù)指針的代碼
    發(fā)表于 04-26 06:11

    串行端口工作原理

    串行端口工作原理 串行端口工作原理 9針連
    發(fā)表于 07-24 00:21 ?1899次閱讀

    Keil C51中對雙數(shù)據(jù)指針的支持情況及代碼生成

    在8051體系中,數(shù)據(jù)指針DPTR作為一個(gè)特殊的16位寄存器,用于尋址64 KB的XDATA或CODE空間,通常它被當(dāng)作一個(gè)16位指針,指向一個(gè)常數(shù)表。雙數(shù)據(jù)
    發(fā)表于 07-20 17:36 ?1427次閱讀
    Keil C51中對<b class='flag-5'>雙數(shù)據(jù)</b><b class='flag-5'>指針</b>的支持情況及代碼生成

    使用mxtni的串行端口

    外部串行端口 在使用外部串行端口之前,必須添加必要的硬件。外部串行端口包括五個(gè)模塊:DUART、
    發(fā)表于 04-12 11:08 ?6次下載
    使用mxtni的<b class='flag-5'>串行</b><b class='flag-5'>端口</b>

    FPGA的FIFO實(shí)現(xiàn)過程

    FIFO隊(duì)列有兩個(gè)位置指示指針。一個(gè)是寫指針,指向隊(duì)列的第一個(gè)存儲單元。一個(gè)讀指針,指向隊(duì)列的最后一個(gè)存儲單元。當(dāng)有寫命令的時(shí)候,數(shù)據(jù)寫入寫
    發(fā)表于 06-29 08:51 ?1.6w次閱讀

    Keil C51是如何支持雙數(shù)據(jù)指針,有哪些特別的要求

    在8051體系中,數(shù)據(jù)指針DPTR作為一個(gè)特殊的16位寄存器,用于尋址64 KB的XDATA或CODE空間,通常它被當(dāng)作一個(gè)16位指針,指向一個(gè)常數(shù)表。雙數(shù)據(jù)
    的頭像 發(fā)表于 09-19 16:47 ?3811次閱讀
    Keil C51是如何支持<b class='flag-5'>雙數(shù)據(jù)</b><b class='flag-5'>指針</b>,有哪些特別的要求

    同步FIFO和異步FIFO的區(qū)別 同步FIFO和異步FIFO各在什么情況下應(yīng)用

    簡單的一種,其特點(diǎn)是輸入和輸出都與時(shí)鐘信號同步,當(dāng)時(shí)鐘到來時(shí),數(shù)據(jù)總是處于穩(wěn)定狀態(tài),因此容易實(shí)現(xiàn)數(shù)據(jù)的傳輸和存儲。 而異步FIFO則是在波形的上升沿和下降沿上進(jìn)行處理,在輸入輸出
    的頭像 發(fā)表于 10-18 15:23 ?1766次閱讀

    什么是串行端口?有哪幾種分類?

    什么是串行端口?有哪幾種分類? 串行端口是計(jì)算機(jī)中用于進(jìn)行數(shù)據(jù)傳輸?shù)囊环N接口類型,通過單一的數(shù)據(jù)
    的頭像 發(fā)表于 02-02 15:40 ?2293次閱讀

    Keil+C51中對雙數(shù)據(jù)指針的直接利用

    Keil+C51中對雙數(shù)據(jù)指針的直接利用
    發(fā)表于 06-18 10:15 ?0次下載
    百樂坊娱乐场| 百家乐官网防伪筹码套装| 百家乐官网保单机作弊| 百家乐心得打法| 大发888注册开户| 可以玩百家乐官网的博彩网站| 百家乐平台信誉| 八大胜娱乐场| 速博百家乐官网的玩法技巧和规则| 菲律宾百家乐赌场娱乐网规则 | 百家乐官网赌场程序| 南京百家乐赌博现场被| 米易县| 属龙属虎合伙做生意吗| 顶级赌场是骗人的吗| 百家乐官网单注打法| 实战百家乐十大取胜原因百分百战胜百家乐不买币不吹牛只你能做到按我说的.百家乐基本规则 | 女神百家乐娱乐城| 永济市| 澳门百家乐真人娱乐城| 蓝盾百家乐| 闻喜县| 在线百家乐博彩| 博狗百家乐官网现场| 玩百家乐秘诀| 澳门赌盘| 波音百家乐网上娱乐| 疏附县| 至尊百家乐20130402| 顶尖百家乐官网对单| 网上百家乐官网解码器| 百家乐国际娱乐平台| 百家乐官网那个平台好| 百家乐官网最新庄闲投注法| 威尼斯人娱乐城澳门威| 互联网百家乐官网的玩法技巧和规则 | 连环百家乐官网的玩法技巧和规则 | 百家乐旺门打| 网络百家乐官网公式打法| 二八杠自行车| 防伪百家乐官网筹码币套装|