Dallas Semiconductor高速微控制器系列允許系統設計人員通過內部UART優化串行通信。本應用筆記演示了如何利用這些增強型8051微控制器中的雙數據指針使用循環緩沖器。提供的示例匯編代碼用于顯示簡單的 256 字節串行端口循環緩沖區的實現。
介紹
原始 8051 微處理器的架構包括一個標準的通用 同步/異步接收器/發射器(USART,通常稱為UART)。這 外設允許器件通過RS-232接口以各種波特率進行通信。其中之一 8051 UART實現的缺點是其接收和發送緩沖區 只有一個深度,即軟件必須從接收緩沖區中檢索一個字節,然后才能被 下一個收到的字符。可以在許多達拉斯半導體公司中實現快速軟件FIFO 和Maxim微控制器,增加了串行端口的實用性。
本應用筆記演示了一個簡單的256字節循環緩沖器,但原理可以擴展到 緩沖長度可達 64kB。數據由串行端口接收并存儲在緩沖區中,直到對其采取行動 通過用戶提供的例程。當緩沖區變滿時,接收器通過軟件流控制將 向主機發出停止傳輸的信號。當用戶提供的例程清除緩沖區中的空間時,它將 向主機發出信號以恢復傳輸。本應用筆記中的示例足夠通用,可以 適用于各種用戶應用。示例隨附的匯編源代碼是 在網站上的文件AN603_SW中提供。回答 51.
支持先進先出構建的硬件增強功能
高速和超高速微控制器系列具有許多功能,大大簡化了 軟件先進先出的實施。所有這些功能都旨在最大限度地減少軟件開銷 與存儲和檢索數據相關聯。其中第一個功能是極高速 達拉斯半導體和Maxim微控制器的性質。他們增強的 4 時鐘和 1 時鐘 機器循環型芯最大限度地減少了維護緩沖區所花費的時間,并且通過擴展允許 應用程序運行得更快。
另一個重要功能是雙數據指針。最初的 8051 只有一個數據指針,它 使得同時實現輸入和輸出指針變得困難。每次系統需要 在指針之間切換,它必須保存當前值并加載另一個的值 指針。在嘗試將數據快速移入和移出緩沖區時,這會引入明顯的延遲。 使用兩個數據指針,一個可以分配給輸入(插入)指針,另一個分配給輸出 (刪除)緩沖區的指針,消除與處理指針相關的延遲。另外 一些微控制器集成了增強的數據指針,可以自動遞增數據 執行某些數據指針相關指令后的指針。這節省了額外的機器 每個緩沖區訪問的周期。
通過使用內部 1kB MOVX SRAM(其數據可用),可以進一步提高速度 可以在單個機器周期內訪問。在此內存中定位循環緩沖區允許 實現非常快速的緩沖區。
軟件說明
此示例介紹串行端口的循環 FIFO 緩沖區的基本體系結構。接收數據 通過串行端口 0 并存儲在 MOVX 存儲器中的循環緩沖區中,直到提取為止 并由用戶定義的算法操作。此示例使用達拉斯和 Maxim 微控制器 雙數據指針。DPTR(也稱為 DPTR0)用作輸入指針,并始終指定 應存儲通過串行端口接收的新信息的位置。DPTR1 是輸出指針, 顯示應用程序軟件將檢索下一個未處理字節的位置。伴隨的 軟件應該被認為是這樣一個例子的骨架。
做了一些假設來簡化軟件并減小其大小:
緩沖區長度為 256 字節,從 0000h 開始,到 00FFh 結束。軟件可以快速檢查 表示非零數據指針高字節,以指示翻轉。
輸入和輸出指針僅遞增,盡管軟件可以很容易地修改為 支持雙向指針。
收到字符后對緩沖區狀態的反饋限制為剩余 1 個字節 警告和 0 字節剩余關機方法。這種通過/不通過的方法允許非常快的錯誤 檢查,可最大限度地減少緩沖區輸入和輸出例程中花費的時間。緩沖區狀態 從緩沖區讀取字符后,用戶提供的算法負責。
主機的錯誤通知通過軟件流控制執行。這是一個常見的 傳輸協議易于實現,占用的處理器開銷很小。
當程序啟動時,兩個數據指針都初始化到緩沖區的開頭。串口 也被初始化,然后軟件流控制“就緒”字符(XON:11h)被發送到 主機以允許傳輸數據。然后,軟件會等待,直到收到新字符或 應用程序需要從緩沖區讀取一個字節。此示例僅顯示例程的外殼,該 緩沖區中的字節;實際代碼將由應用程序定義。
當串口收到字符時,調用串口0中斷服務例程(ISR)。第一 例程從串行端口檢索字節,并存儲在緩沖區中由 輸入指針 (DPTR)。然后調用子例程Increment_DPTx,這將遞增所選數據 指針,然后執行兩個操作。首先,它確保遞增的值不超過 緩沖區的上限。如果是這樣,它將指針值重置為緩沖區的開頭。二、它 檢查輸入指針是否有覆蓋輸出指針的危險,這種情況可能是 如果主機清空緩沖區的速度不夠快,則會遇到此問題。
溢出檢測和處理
溢出檢測和處理例程如圖 1 所示。它在輸入或 輸出指針遞增。首先,溢出例程確定輸入和 輸出指針。如果距離為一個字節,則軟件會聲明溢出警告。這將設置 溢出標志,并且還向另一個單元發送XOFF以停止傳輸,直到緩沖區 再次清空。串行端口接收器保持啟用狀態,以允許發送單元 在收到 XOFF 時的傳輸過程中。聲明警告狀態比 緩沖區已滿狀態允許接收這最后一個字符。
如果距離為零字節,則軟件聲明溢出關閉。這將設置溢出標志, 傳輸 XOFF,并禁用串行端口接收器以防止 緩沖區。退出溢出警告或關閉狀態的唯一方法是讓緩沖區輸出例程 刪除數據,直到距離增加到 2。
如果距離不是單個字節也不是零字節,則未檢測到溢出。然后例程檢查 溢出標志的狀態。如果未設置該標志,則例程將退出。如果設置了溢出標志,則 當前狀態指示緩沖區剛剛從溢出警告狀態轉換為否 警告。如果是這種情況,則緩沖區已準備好再次開始接收數據,因此例程將清除 溢出標志,重新啟用串行端口接收器,并傳輸 XON 字符。
圖1.溢出處理程序流程圖。
程序集代碼示例
以下匯編語言代碼示例是使用 Keil 軟件編譯和模擬的 μVision2 集成開發環境。頭文件 reg320.inc 是一個包含名稱的文件 目標微控制器(本例中為DS80C320)的寄存器和位,以及類似的文件 通常會隨您的匯編程序一起提供,以便與正在使用的特定微控制器一起使用。
審核編輯:郭婷
-
微控制器
+關注
關注
48文章
7907瀏覽量
153708 -
接收器
+關注
關注
15文章
2563瀏覽量
73396 -
fifo
+關注
關注
3文章
400瀏覽量
44621
發布評論請先 登錄
基于FPGA的異步FIFO的實現

Keil C51中對雙數據指針的直接利用
異步FIFO指針同步產生的問題
如何使用串行端口發送和接收數據
如何重置fifo指針
輕松上手單片機編程軟件——keil單片機編程軟件雙數據指針+二進制
Keil C51中對雙數據指針的支持情況及代碼生成

FPGA的FIFO實現過程
Keil C51是如何支持雙數據指針,有哪些特別的要求

評論