基于FPGA的UARTl6550的設(shè)計(jì)
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)記。常見(jiàn)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寫(xiě)入初始值后產(chǎn)生需要的波特率,控制發(fā)送和接收模塊在設(shè)定的波特率下工作。CPU通過(guò)接口模塊向發(fā)送FIFO內(nèi)寫(xiě)入需
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位的地址線(xiàn)和8位的數(shù)據(jù)線(xiàn),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)線(xiàn)控制寄存器、LSR(Line Status Register)線(xiàn)狀態(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)表示,也稱(chēng)為數(shù)據(jù)位率。
收/發(fā)時(shí)鐘頻率與波特率之間關(guān)系:
收/發(fā)時(shí)鐘頻率=N
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論