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