UART项目验证(二) spec阅读

1.1 about uart

UART(PL011)是一种先进的微控制器总线体系结构(AMBA)兼容片上系统(SoC)外围设备。UART是连接到高级外围总线(APB)的AMBA从模块。UART包括红外数据关联(IrDA)串行红外(SIR)协议编码器/解码器(ENDEC)。

1.1.1 features

•可编程FIFO可以禁用变为1字节深度。

•可编程波特率发生器。这允许将参考时钟除以(1x16)到(65535 x16),并生成内部x16时钟。

•独立屏蔽传输FIFO、接收FIFO、接收超时、调制解调器状态和错误条件中断

•支持直接内存访问(DMA)。

•完全可编程串行接口特性:

-数据可以是5、6、7或8位可配

-偶、奇、棒或无奇偶校验位生成和检测

-1或2停止位生成

-波特率生成,dc高达UARTCLK_max_freq /16

1.1.2 可编程参数(programmable parameters)

•通信波特率、整数和小数部分

•数据位数

•停止位数,1.5个停止位

•奇偶校验模式

•FIFO启用(深度为16)或禁用(深度为1)

•FIFO触发级别可在1 \8、1 \4、1 \2、3 \4和7 \8之间选择。

•内部标称1.8432MHz时钟频率(1.42–2.12MHz),用于生成低功率模式较短的位持续时间

•硬件流控制。

2.1 功能概述(function overview)

UART执行:

•对从外围设备接收的数据进行串行到并行转换(rx方向)

•对传输到外围设备的数据进行并行到串行转换。(tx方向)

CPU通过AMBA APB接口读写数据和控制/状态信息。发送和接收路径由内部FIFO存储器缓冲,可在发送和接收模式下独立存储多达16个字节。

包括一个可编程波特率生成器,

•该生成器可从UART内部参考时钟输入生成通用的发送和接收内部时钟,UARTCLK

•提供与行业标准16C550 UART设备类似的功能

•支持高达460.8Kbits \/s的波特率,具体取决于UARTCLK参考时钟频率。

UART操作和波特率值由线路控制寄存器(UARTLCR_U H)和波特率除数寄存器(UARTIBRD和UARTFBRD)控制。

2.2 功能框架图


•APB接口AMBA: APB接口生成读写解码,用于访问状态\控制寄存器和发送\接收FIFO存储器。 

•寄存器块:寄存器块存储通过AMBA APB接口写入或读取的数据。

•波特率生成器:波特率生成器包含自由运行计数器,用于生成内部x16时钟、Baud16和IrLPBaud16信号。Baud16为UART发送和接收控制提供定时信息。Baud16是一个脉冲流,宽度为一个UARTCLK时钟周期,频率为波特率的16倍。IrLPBaud16提供定时信息,以在低功率模式下生成IrDA编码传输比特流的脉冲宽度。

•传输FIFO:传输FIFO是一个8位宽、16位深的FIFO内存缓冲区。通过APB接口写入的CPU数据存储在FIFO中,直到被传输逻辑读出。您可以禁用传输FIFO,使其像一个单字节保持寄存器一样工作。 

•接收FIFO:接收FIFO是一个12位宽、16位深的FIFO内存缓冲区。接收的数据和相应的错误位由接收逻辑存储在接收FIFO中,直到CPU通过APB接口读出。可以禁用接收FIFO,使其起到单字节保持寄存器的作用。

•传输逻辑:传输逻辑对从传输FIFO读取的数据执行并行到串行转换。根据控制寄存器中的编程配置,控制逻辑输出以起始位开始的串行位流,首先是最低有效位(LSB)的数据位,然后是奇偶校验位,然后是停止位。

•接收逻辑:在检测到有效的启动脉冲后,接收逻辑对接收的位流执行串行到并行转换。还将执行超限、奇偶校验、帧错误检查和换行检测,其状态与写入接收FIFO的数据一起显示。

•中断生成逻辑:UART生成单个可屏蔽的高电平活动中断。组合中断输出也作为单个中断请求的OR函数生成。您可以将单个组合中断与系统中断控制器一起使用,该控制器在每个外围设备的基础上提供另一级别的屏蔽。这使您能够使用模块化设备驱动程序,这些驱动程序总是知道在哪里可以找到中断源代码控制寄存器位。您还可以将各个中断请求与系统中断控制器一起使用,该控制器为每个外围设备的输出提供屏蔽。这样,全局中断服务例程可以从系统中断控制器中的一个宽寄存器中读取整个源集合。与实时系统中的CPU时钟速度相比,从外围寄存器读取的时间非常重要。

2.3 操作

接口重置:

UART和IrDA SIR ENDEC由全局重置信号PRESETn和块特定重置信号nUARTRST重置。外部重置控制器必须使用PRESETn异步断言nUARTRST,并向UARTCLK同步否定它。PRESETn必须在足够长的时间内被断言为LOW(低),以重置片上系统中最慢的块,然后再次被设置为HIGH(高)。UART要求在至少一个PCLK周期内将PRESETn断言为低。

时钟信号:

为UARTCLK选择的频率必须适应所需的波特率范围:

FUARTCLK(min)>=16(波特率因子,采样次数) x baud_u rate(max)(发送数据频率)

FUARTCLK(max)<=16 (波特率因 子,采样次数)x 65535(2^16-1) x baud\u rate(min)。

例如,对于110波特到460800波特的波特率范围,UARTCLK频率必须在7.3728MHz到115MHz的范围内。UARTCLK的频率也必须在所有波特率所需的错误限制范围内。PCLK与UARTCLK的时钟频率比也有限制。UARTCLK的频率不得超过PCLK频率的5 \/3倍:

FUARTCLK<=5 \3 x FPCLK(apb总线clk)

这允许有足够的时间将接收到的数据写入接收FIFO。

2.3.1 uart 具体操作

控制数据写入UART线路控制寄存器UARTLCR_H。该寄存器内部宽29位,但外部通过AMBA APB总线通过三次写入寄存器位置UARTLCR_H、UARTIBRD和UARTFBRD进行访问。

UARTLCR_H定义:

•传输参数

•字长

•缓冲区模式

•传输停止位数

•奇偶校验模式

•中断生成。

UARTIBRD和UARTFBRD一起定义波特率除数。

波特率配置:

波特率除数是由16位整数和6位小数部分组成的22位数字。波特率生成器使用该值来确定位周期。分数波特率分频器允许使用频率>3.6864MHz的任何时钟作为UARTCLK,同时仍然可以生成所有标准波特率。16位整数通过UARTIBRD寄存器加载。6位小数部分加载到UARTFBRD寄存器中。波特率除数与UARTCLK的关系如下:

波特率除数=UARTCLK /(16xBaud Rate)=BRDI+BRDF,其中BRDI是整数部分,BRDF是小数点分隔的小数部分

小数m=integer(BRDF*2^n+0.5)

生成内部时钟启用信号Baud16,它是一个UARTCLK宽脉冲流,平均频率为所需波特率的16倍。然后将该信号除以16,得到传输时钟。波特率除数中的低数字表示较短的位周期,而波特率除数中的高数字表示较长的位周期

数据传输或接收:

接收或传输的数据存储在两个16字节FIFO中,接收FIFO每个字符有额外的四位用于状态信息。

对于传输,数据被写入传输FIFO。如果UART已启用,则会导致数据帧开始使用UARTLCR_H中指定的参数进行传输。数据继续传输,直到传输FIFO中没有数据为止。一旦数据写入传输FIFO(即FIFO非空),BUSY信号就会变高,并在传输数据时保持高电平。只有当传输FIFO为空,并且最后一个字符(包括停止位)已从移位寄存器传输时,BUSY才被否定。即使UART可能不再启用,也可以将BUSY断言为HIGH。

对于每个数据样本,取三个读数,并保留多数值。在以下段落中,定义了中间采样点,并在其两侧各取一个样本。

当接收器空闲为idle时(UARTRXD连续1,处于标记状态)且在数据输入上检测到低电平(已接收到起始位)时,接收计数器(时钟由Baud16启用)开始运行,并在正常UART模式下在该计数器的第八个周期对数据进行采样,或SIR模式下计数器的第四个周期,以允许更短的逻辑0脉冲(位周期的一半)。

如果UARTRXD在Baud16的第八个周期上仍然处于低位,则起始位有效,否则会检测到错误的起始位并将其忽略。如果起始位有效,则根据数据字符的编程长度,在Baud16的每16个周期(即一个位周期之后)对连续数据位进行采样。如果启用了奇偶校验模式,则检查奇偶校验位。最后,如果UARTRXD高,则确认有效的停止位,否则会发生帧错误。

 
————————————————
版权声明:本文为CSDN博主「whddddddddddd」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/whddddddddddd/article/details/125117044

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值