Universal Asynchronous Receiver Transmitter (UART)
概论
uart是两线的,提供通信和追踪功能,完美的编程现场解决方案
提供dma
特点:
两线uart
独立的发送器和接收器,和可编程波特率生成器
奇偶校验
自动回送,本地回环,远端回环模式
支持中断
发送和接收都有dma
uart的引脚是复用的 ,需要配置
uart的时钟是受Power Management Controller (PMC)控制,需要使能
uart的中断需要配置Interrupt Controller
uart只支持异步传输,只能处理包含校验的8bit,没有时钟线
相互独立的发送器和接收器,且公用一个波特率发生器
波特率时钟是外时钟16分频产生的,值存在Baud Rate Generator register (UART_BRGR)
如果Baud Rate Generator register (UART_BRGR)为零,将非能uart
最大是16分频,最小是16 x 65536分频
接收器
uart接收器在重启过后必须手动激活,置位Control Register (UART_CR) with the bit RXEN
置位UART_CR with the bit RXDIS,会非能uart接收器,如果没有在接收会直接停止
如果正在收,会等到收完这一次,然后非能
UART_CR with the bit RSTRX置位,会直接进入重启状态,且非能,不管在不在接收
uart只能异步传输,通过采样URXD信号线来检测接收开始,7个采样周期的低电平(space)预示着开始传输信号,
如果一个space少于7/16的一个周期,会被丢弃
如果接收开始理论上接收器采样URXD的每一位中间点,它假设每个位都是持续16个采样周期
所以第一个采样在开始bit后的第8个周期,大约在下降沿的24个采样周期
之后的每个bit都是采样16周期。
一个字节被接收会送到Receive Holding Register (UART_RHR),RXRDY status bit in the Status Register (UART_SR)被置位
RXRDY status bit in the Status Register (UART_SR)自动清零,当UART_RHR数据被读走
数据没读走但是又有新数据来OVRE status bit in UART_SR置位,
要清除它要写1到RSTSTA (Reset Status) in UART_CR
校验错误
每接收一字节根据PAR in the Mode register (UART_MR)进行校验
如果出错则置位PARE in UART_SR,且RXRDY被置位
置位UART_CR is written with the bit RSTSTA (Reset Status)会清除PARE
清除之前,如果新的字节来了,pare还是保持为1
FRAME (Framing Error) bit in UART_SR和RXRDY会被置位,如果stop位错误
置位RSTSTA in control register UART_CR才能清除
发送 :
设备重启,需要手动使能uart发送器,置位UART_CR with the bit TXEN
写入数据到Transmit Holding Register (UART_THR),传输开始
置位UART_CR with the bit TXDIS,则非能发送器
如果没有在发,直接停止,如果在发,发完停止
置位UART_CR with the bit RSTTX,直接关闭,不管发不发
format defined in UART_MR,0开始,8bits从低位到高位发,可选的校验,1结束
PARE in UART_MR决定是否发送校验,校验可选择an odd parity, an even parity, or a fixed space or mark bit.
TXRDY (Transmitter Ready) in UART_SR被置位时,说明(UART_THR)是空的
可以往里面写数据了。
TXEMPTY被置位说明UART_THR和移位寄存器都是空的
发送器和接收器都有dma通道,需要配置才能使用
uart 支持3种测试模式 配置CHMODE field in UART_MR
automatic echo mode,接收一位传出一位,发送器非能
local loopback mode,自己发送的直接到自己的接收器,外部发送脚拉高,接收脚非能
remote loopback mode,数据直接不到接收器和发送器中去,直接转发,接收脚被拉高