Menu Close

RISC-V UART中断设计与应用(1)UART简介和设计

1.UART简介

 

相关参考文章:

RISC-V教学教案

在进入RISC-V UART中断设计之前,这里先简单介绍一下UART。 UART(universal asynchronous receiver-transmitter),通用异步串型收发传输器。UART接收数据字节,并以顺序方式传输各个位,目的地的另一个UART将位重新组装成完整的字节。UART将并型的数据转换为串型收发,通信可以是单工(仅在一个方向上,没有规定接收设备将信息发送回发送设备),全双工(两个设备同时发送和接收)或半双工(设备轮流发送和接收)。

更多关于UART的详细背景知识及设计参见:

 

2.RISC-V UART 设计

RISC-V CPU之前已经实现了一个用于传输指令给ITCM的UART,这里是新加了一个UART模块,UART1,用于外部平台级中断的实现和应用。

 

2.1.RISC-V UART1设计概述:

  • 8比特数据 + 可选奇偶校检位 + 可选1/2 stop位
  • 奇偶校检位选项为:无校检,奇校检(odd),偶校检(even),1校检(mark),0校检(space)
  • 支持可编程发送和接收FIFO的水印(watermark)中断
  • 支持校检位错误中断
  • 可通过软件写寄存器DIV,控制波特率

 

2.2.地址图

UART1的寄存器地址排在之前的UART寄存器后,以0xe000_1000为基地址(详细地址图点击这里)。

%title插图%num

图1 UART1寄存器地址

 

  • TXDADA,发送数据寄存器

UART1发送数据寄存器如图2所示,其中发送的数据是bit 0-7,bit 31是FIFO发送满标志。也就是说,如果TXDATA的bit 31为0,表示发送FIFO没有满,还可以继续写入发送数据;反之,如果TXDATA的bit 31为1,表示发送FIFO已经满了,无法再写入数据。TXDATA bit 8-30目前为保留位。如果发送FIFO没有满,TXDATA中的发送数据在被软件写入后会直接进入FIFO。

虽然TXDATA是一个可读可写的寄存器(R/W表示read/write),但是在读TXDATA寄存器时,只能读出FIFO满的标志,发送数据的bit 0-7读出的值为0。如果FIFO满标志的读出值为1,写入发送数据位会被忽略。

%title插图%num

图2 发送数据寄存器

 

  • RXDADA,接收数据寄存器

UART1接收数据寄存器如图3所示,与发送寄存器类似,bit 0-7为接收数据,bit 31为FIFO空标志,其余的位暂时被保留。RXDATA是一个只读寄存器。当RXDATA的bit 31为1时,表示接收FIFO为空,即没有数据可以读。当RXDATA的bit31为0时,可正常读出接收数据。

%title插图%num

图3 接收数据寄存器

 

  • TXCTRL,发送控制寄存器

UART1发送控制寄存器如图4所示,bit 0是发送使能,bit 1控制停止位个数,0对应1个停止位,1对应两个停止位。bit 16-18为发送FIFO水印的中断阈值。TXCTRL的其他位被保留。

%title插图%num

图4 发送控制寄存器

 

  • RXCTRL,接收控制寄存器

UART1接收控制寄存器如图5所示,bit 0是接收使能,bit 16-18是接收FIFO水印的中断阈值。RXCTRL的其他位为保留位。

%title插图%num

图5 接收控制寄存器

 

  • IE,IP和IC,中断使能,中断悬挂和中断清除

UART1中断使能,中断悬挂和中断清除寄存器如图6所示。RISC-V UART1的IE寄存器和IC寄存器都是可读可写的,IP寄存器只是可读。RISC-V UART1支持3种中断:奇偶校检中断,接收水印中断和发送水印中断。IE,IP和IC的bit 0对应的都是发送水印中断,bit 1对应接收水印中断, bit 3对应的都是奇偶校检中断。当奇偶校检有错误时,perror被立起来;当发送FIFO中的数据严格小于txctrl寄存器的txcnt中的阈值时,txwm被立起来。当数据超过阈值时,相应的悬挂位被清除;当发送FIFO中的数据严格大于rxctrl寄存器的rxcnt中的阈值时,rxwm被立起来。当数据少于阈值时,相应的悬挂位被清除。软件将中断清除IC立起来后,硬件会自动清零,确保软件写入一次中断清除寄存器只对应清除一次中断悬挂。

%title插图%num

图6 中断使能,中断悬挂和中断清除寄存器

 

  • DIV,波特率分频寄存器

UART1波特率分频寄存器如图7所示。fin为FPGA的系统时钟主频,DIV寄存器中的bit 0-15是真正写入的波特率分频除数。bit 16-31为保留位。Div计算公式为(fin / Fbaud)- 1。用一些常见的波特率举例,以50 MHz主频为例,图8是计算所得出的相应的div值。

%title插图%num

图7 波特率分频寄存器

 

%title插图%num

图8 以常见的波特率举例,其对应的div值

 

  • LCR,奇偶校检寄存器

UART1的奇偶校检寄存器如图9所示,LCR寄存器是和TI(Texas Instrument),德州仪器的UART LCR寄存器兼容的,所以也用了类似的定义。这里只用了bit 3-5选择所用的奇偶校检,其余的位是暂时保留的。LCR的bit 3-5位选择奇偶校检方法如图9所示。例如选用偶校检,通过图9的表格可知需要设置LCR[5:3]为3‘b011。

%title插图%num

图9 LCR奇偶校检寄存器

Posted in C语言, RISC-V, RISC-V 外设, RISC-V 教案, Verilog, 应用开发, 教材与教案, 文章, 编程语言

发表评论

相关链接