Dallas Semiconductor高速微控制器系列允許系統(tǒng)設(shè)計(jì)人員通過內(nèi)部UART優(yōu)化串行通信。本應(yīng)用筆記演示了如何利用這些增強(qiáng)型8051微控制器中的雙數(shù)據(jù)指針使用循環(huán)緩沖器。提供的示例匯編代碼用于顯示簡(jiǎ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è)收到的字符??梢栽谠S多達(dá)拉斯半導(dǎo)體公司中實(shí)現(xiàn)快速軟件FIFO 和Maxim微控制器,增加了串行端口的實(shí)用性。
本應(yīng)用筆記演示了一個(gè)簡(jiǎn)單的256字節(jié)循環(huán)緩沖器,但原理可以擴(kuò)展到 緩沖長(zhǎng)度可達(dá) 64kB。數(shù)據(jù)由串行端口接收并存儲(chǔ)在緩沖區(qū)中,直到對(duì)其采取行動(dòng) 通過用戶提供的例程。當(dāng)緩沖區(qū)變滿時(shí),接收器通過軟件流控制將 向主機(jī)發(fā)出停止傳輸?shù)?a target="_blank">信號(hào)。當(dāng)用戶提供的例程清除緩沖區(qū)中的空間時(shí),它將 向主機(jī)發(fā)出信號(hào)以恢復(fù)傳輸。本應(yīng)用筆記中的示例足夠通用,可以 適用于各種用戶應(yīng)用。示例隨附的匯編源代碼是 在網(wǎng)站上的文件AN603_SW中提供?;卮?51.
支持先進(jìn)先出構(gòu)建的硬件增強(qiáng)功能
高速和超高速微控制器系列具有許多功能,大大簡(jiǎn)化了 軟件先進(jìn)先出的實(shí)施。所有這些功能都旨在最大限度地減少軟件開銷 與存儲(chǔ)和檢索數(shù)據(jù)相關(guān)聯(lián)。其中第一個(gè)功能是極高速 達(dá)拉斯半導(dǎo)體和Maxim微控制器的性質(zhì)。他們?cè)鰪?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í),這會(huì)引入明顯的延遲。 使用兩個(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 并存儲(chǔ)在 MOVX 存儲(chǔ)器中的循環(huán)緩沖區(qū)中,直到提取為止 并由用戶定義的算法操作。此示例使用達(dá)拉斯和 Maxim 微控制器 雙數(shù)據(jù)指針。DPTR(也稱為 DPTR0)用作輸入指針,并始終指定 應(yīng)存儲(chǔ)通過串行端口接收的新信息的位置。DPTR1 是輸出指針, 顯示應(yīng)用程序軟件將檢索下一個(gè)未處理字節(jié)的位置。伴隨的 軟件應(yīng)該被認(rèn)為是這樣一個(gè)例子的骨架。
做了一些假設(shè)來簡(jiǎn)化軟件并減小其大小:
緩沖區(qū)長(zhǎng)度為 256 字節(jié),從 0000h 開始,到 00FFh 結(jié)束。軟件可以快速檢查 表示非零數(shù)據(jù)指針高字節(jié),以指示翻轉(zhuǎn)。
輸入和輸出指針僅遞增,盡管軟件可以很容易地修改為 支持雙向指針。
收到字符后對(duì)緩沖區(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ù)。然后,軟件會(huì)等待,直到收到新字符或 應(yīng)用程序需要從緩沖區(qū)讀取一個(gè)字節(jié)。此示例僅顯示例程的外殼,該 緩沖區(qū)中的字節(jié);實(shí)際代碼將由應(yīng)用程序定義。
當(dāng)串口收到字符時(shí),調(diào)用串口0中斷服務(wù)例程(ISR)。第一 例程從串行端口檢索字節(jié),并存儲(chǔ)在緩沖區(qū)中由 輸入指針 (DPTR)。然后調(diào)用子例程Increment_DPTx,這將遞增所選數(shù)據(jù) 指針,然后執(zhí)行兩個(gè)操作。首先,它確保遞增的值不超過 緩沖區(qū)的上限。如果是這樣,它將指針值重置為緩沖區(qū)的開頭。二、它 檢查輸入指針是否有覆蓋輸出指針的危險(xiǎn),這種情況可能是 如果主機(jī)清空緩沖區(qū)的速度不夠快,則會(huì)遇到此問題。
溢出檢測(cè)和處理
溢出檢測(cè)和處理例程如圖 1 所示。它在輸入或 輸出指針遞增。首先,溢出例程確定輸入和 輸出指針。如果距離為一個(gè)字節(jié),則軟件會(huì)聲明溢出警告。這將設(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é),則未檢測(cè)到溢出。然后例程檢查 溢出標(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 字符。
圖1.溢出處理程序流程圖。
程序集代碼示例
以下匯編語言代碼示例是使用 Keil 軟件編譯和模擬的 μVision2 集成開發(fā)環(huán)境。頭文件 reg320.inc 是一個(gè)包含名稱的文件 目標(biāo)微控制器(本例中為DS80C320)的寄存器和位,以及類似的文件 通常會(huì)隨您的匯編程序一起提供,以便與正在使用的特定微控制器一起使用。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151426 -
接收器
+關(guān)注
關(guān)注
14文章
2472瀏覽量
71913 -
fifo
+關(guān)注
關(guān)注
3文章
388瀏覽量
43682
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論