1 引 言
UART(Universal Asynchronous Receiver/Transmitter,通用異步收發(fā)器)是用于控制CPU與串行設(shè)備通信的芯片,,將由CPU傳送過(guò)來(lái)的并行數(shù)據(jù)轉(zhuǎn)換為輸出的串行數(shù)據(jù)流,。將系統(tǒng)外部來(lái)的串行數(shù)據(jù)轉(zhuǎn)換為字節(jié),,供系統(tǒng)內(nèi)部使用并行數(shù)據(jù)的器件使用,。他可以在輸出的串行數(shù)據(jù)流中加人奇偶校驗(yàn)位和啟停標(biāo)記,,并對(duì)從外部接收的數(shù)據(jù)流進(jìn)行奇偶校驗(yàn)以及刪除啟停標(biāo)記。常見UART主要有INS8250,,PC16450和PCI6550,其中16550發(fā)送和接收都帶有16 B的FIFO,,為協(xié)調(diào)發(fā)送,、接收端的速率匹配提供了更大的緩沖余地,同時(shí)也可以提高CPU的使用效率,,從而提高系統(tǒng)的整體性能,。
2 UART16550的基本結(jié)構(gòu)
如圖1所示,UART16550的基本結(jié)構(gòu)由CPU接口模塊,、波特率發(fā)生器,、FIFO控制器、發(fā)送/接收FIFO和發(fā)送/接收模塊共7個(gè)部分組成,。
CPU通過(guò)UART的CPU接口模塊配置整個(gè)UART,,波特率發(fā)生器在CPU寫入初始值后產(chǎn)生需要的波特率,控制發(fā)送和接收模塊在設(shè)定的波特率下工作,。CPU通過(guò)接口模塊向發(fā)送FIFO內(nèi)寫入
需
要發(fā)送的8位數(shù)據(jù),,同時(shí)發(fā)送模塊開始讀取FIFO中的數(shù)據(jù),,并加入起始位、奇偶校驗(yàn)位和停止位后以串行發(fā)送的方式傳輸給串行接收設(shè)備,。接收模塊時(shí)刻監(jiān)視串行輸入端口,,發(fā)現(xiàn)有數(shù)據(jù)發(fā)送來(lái)的時(shí)候馬上啟動(dòng)接收模塊開始接收數(shù)據(jù)并有效的判斷出奇偶校驗(yàn)位來(lái)檢測(cè)數(shù)據(jù)的正確性,最后把剩下的8位數(shù)據(jù)放入接收FIFO,,并通知CPU有數(shù)據(jù)進(jìn)來(lái)進(jìn)行接收,。異步串行通信協(xié)議的數(shù)據(jù)傳輸格式如圖2所示。
UART16550的發(fā)送數(shù)據(jù)位可以選擇為5~8位,,同時(shí)可以選擇奇校驗(yàn),、偶校驗(yàn)或者不設(shè)置校驗(yàn)位,停止位可以約定為1,,1.5或2位,。
3 UART16550的設(shè)計(jì)實(shí)現(xiàn)
3.1 CPU接口模塊
CPU接口模塊完成了CPU指令的解讀與寄存器配置以及UART狀態(tài)讀取等功能。通過(guò)3位的地址線和8位的數(shù)據(jù)線,,CPU可以對(duì)波特率發(fā)生器的波特率進(jìn)行預(yù)先的設(shè)定,,以使串口兩端的設(shè)備在同一波特率下完成接收和發(fā)送的工作。同時(shí)CPU接口接收來(lái)自CPU的需要發(fā)送的5∽8位數(shù)據(jù),,送人發(fā)送模塊,,或者把接收模塊接收到的數(shù)據(jù)通過(guò)接口送給CPU進(jìn)行數(shù)據(jù)處理。在此接口模塊里,,設(shè)置了8個(gè)控制和狀態(tài)寄存器,,包括RBR(Receiver Buffer Register)接收緩沖寄存器、THR(Transmit Hold Register)發(fā)送保持寄存器,、IER(Interrupt Enable Register)中斷使能寄存器,、IIR(Interrupt ID Register)中斷寄存器、LCR(Line Control Register)線控制寄存器,、LSR(Line Status Register)線狀態(tài)寄存器,、SCR(Scratchpad Register)暫存寄存器和FCR(FIFO Control Register)。在使用UART16550前,,CPU必須要對(duì)控制寄存器進(jìn)行配置,,包括波特率、數(shù)據(jù)位數(shù),、奇偶校驗(yàn),、停止位位數(shù)及FIFO的控制等。這也是16550區(qū)別于一般UART的具有可編程的特點(diǎn),。
3.2波特率發(fā)生器
波特率是單位時(shí)間內(nèi)傳送的二進(jìn)制數(shù)據(jù)的位數(shù),,以位/秒(b/s)表示,也稱為數(shù)據(jù)位率,。
收/發(fā)時(shí)鐘頻率與波特率之間關(guān)系:
收/發(fā)時(shí)鐘頻率=N×波特率
N可以取8,,16,,32和64等,為了兼顧速度和穩(wěn)定性一般取為16,。N在硬件設(shè)計(jì)時(shí)已經(jīng)設(shè)定好,,軟件不能改變。波特率發(fā)生器由兩個(gè)8位的數(shù)據(jù)寄存器組合成16位的分頻寄存器,,可以實(shí)現(xiàn)系統(tǒng)頻率的1~2(16)分頻,,達(dá)到預(yù)定的波特率設(shè)置。
3.3 FIFO控制器和發(fā)送/接收FIFO
帶有緩存是16550以及更高端UART的突出的特點(diǎn),。16550帶有8位寬,、16字節(jié)深的異步FIFO。FIFO控制器從CPU接口讀入信息,,配置發(fā)送/接收FIFO,,并且在需要的時(shí)候使能FIFO,并且把FIFO的實(shí)時(shí)狀態(tài)通過(guò)CPU接口送給CPU以方便CPU讀取數(shù)據(jù),。在發(fā)送FIFO空和接收FIFO滿的時(shí)候,,F(xiàn)IFO控制器立即產(chǎn)生中斷請(qǐng)求,通知CPU進(jìn)行下一步的操作,。另外,,當(dāng)配置DMA模式時(shí),CPU可以進(jìn)行大數(shù)據(jù)量的發(fā)送和讀取,,減輕了CPU的負(fù)擔(dān),,可以提高整個(gè)系統(tǒng)的運(yùn)行效率。
3.4發(fā)送模塊
發(fā)送模塊的核心是one hot編碼的狀態(tài)機(jī),。他可以讀人來(lái)自FIFO的數(shù)據(jù),,并根據(jù)配置寄存器里面的信息加入起始位、1,,1.5或2位停止位和奇偶校驗(yàn)位,,然后把打包的數(shù)據(jù)通過(guò)移位寄存器把數(shù)據(jù)以標(biāo)準(zhǔn)的串口協(xié)議發(fā)送給串口接收設(shè)備。只要發(fā)送FIFO中有數(shù)據(jù)存在,,發(fā)送模塊就會(huì)一直發(fā)送,直到FIFO空為止,。在不選擇FIFO的情況下,,發(fā)送模塊則直接接收來(lái)自THR(Transmit Hold Register)發(fā)送保持寄存器的數(shù)據(jù),不經(jīng)過(guò)緩存直接發(fā)送,。
3.5接收模塊
接收模塊是發(fā)送模塊功能的逆序執(zhí)行,。他接收來(lái)自外部的串行數(shù)據(jù),根據(jù)配置去除數(shù)據(jù)的起始,、停止位和奇偶校驗(yàn)位,,若出現(xiàn)數(shù)據(jù)差錯(cuò)則立即產(chǎn)生錯(cuò)誤信息,。如果沒有錯(cuò)誤,則將剩余的8位有用數(shù)據(jù)送入接收FIFO讓CPU讀取,。同樣接收模塊也可以選擇不使用FIFO,,這時(shí)接收模塊就會(huì)把8位數(shù)據(jù)直接送給RBR(Receive Buffer Register)接收緩沖寄存器,再由RBR送給CPU,。
4結(jié)果的驗(yàn)證仿真
設(shè)計(jì)采用VHDL語(yǔ)言在FPGA Advantage平臺(tái)下編寫,,并通過(guò)Modelsim編譯仿真,并且通過(guò)ISE下載到電路板上驗(yàn)證,,硬件驗(yàn)證FPGA芯片采用Xilinx的Spartan3,。XC400PQ208。由于驗(yàn)證UART接收/發(fā)送時(shí)序必須要有處理器,,所以采用在FPGA內(nèi)部嵌入Xilinx的MicroBlaze軟核模擬CPU控制時(shí)序,,通過(guò)FPGA外接的串口實(shí)現(xiàn)與計(jì)算機(jī)串口進(jìn)行通信。
5 結(jié) 語(yǔ)
本文介紹了UARTl6550在可編程邏輯器件FPGA上的實(shí)現(xiàn),,并通過(guò)實(shí)際電路驗(yàn)證了設(shè)計(jì)的功能,,使用FP-GA不僅可以方便地用串口協(xié)議與PC機(jī)進(jìn)行串行通信,而且擴(kuò)展了板級(jí)系統(tǒng)的接口功能,。應(yīng)用在可編程器件FPGA內(nèi)部,,可以很大程度地減少電路板的使用面積,并提高系統(tǒng)的穩(wěn)定性和可編程性,。