发送时,数据被写入发送FIFO。如果UART被使能,则会按照预先设置好的参数(波特率、数据位、停止位、校验位等)开始发送数据,一直到发送FIFO中没有数据。一旦向发送FIFO写数据(如果FIFO未空),UART的忙标志位BUSY就有效,并且在发送数据期间一直保持有效。BUSY位仅在发送FIFO为空,且已从移位寄存器发送最后一个字符,包括停止位时才变无效。即UART不再使能,它也可以指示忙状态。BUSY位的相关库函数是UARTBusy( )。
在UART接收器空闲时,如果数据输入变成“低电平”,即接收到了起始位,则接收计数器开始运行,并且数据在Baud16的第8个周期被采样。如果Rx在Baud16的第8周期仍然为低电平,则起始位有效,否则会被认为是错误的起始位并将其忽略。
如果起始位有效,则根据数据字符被编程的长度,在Baud16的每第16个周期对连续的数据位(即一个位周期之后)进行采样。如果奇偶校验模式使能,则还会检测奇偶校验位。
最后,如果Rx为高电平,则有效的停止位被确认,否则发生帧错误。当接收到一个完整的字符时,将数据存放在接收FIFO中。
一、关于UART的配置
函数UARTConfigSetExpClk( )用来对UART端口的波特率、数据格式进行配置。函数UARTConfigGetExpClk( )用来获取当前的配置情况。参见表4-7和表4-8的描述。在实际编程时,往往用两个形式更简单的宏函数UARTConfigSet( )和UARTConfigGet( )来代替上述两个库函数。参见表4-9和表4-10的描述。
表4-7 函数UARTConfigSetExpClk( )
函数功能 UART配置(要求提供明确的时钟速率)
函数原型 void UARTConfigSetExpClk(unsigned long ulBase,
unsigned long ulUARTClk,
unsigned long ulBaud,
unsigned long ulConfig)
参 数 ulBase:UART端口的基址,取值UART0_BASE、UART1_BASE或UART2_BASE
ulUARTClk:提供给UART模块的时钟速率,即系统时钟频率
ulBaud:期望设定的波特率
ulConfig:UART端口的数据格式,取下列各组数值之间的“或运算”组合形式:
数据字长度
UART_CONFIG_WLEN_8 // 8位数据
UART_CONFIG_WLEN_7 // 7位数据
UART_CONFIG_WLEN_6 // 6位数据
UART_CONFIG_WLEN_5 // 5位数据
停止位
UART_CONFIG_STOP_ONE // 1个停止位
UART_CONFIG_STOP_TWO // 2个停止位(可降低误码率)
校验位
UART_CONFIG_PAR_NONE // 无校验
UART_CONFIG_PAR_EVEN // 偶校验
UART_CONFIG_PAR_ODD // 奇校验
返 回 值 无
表4-8 函数UARTConfigGetExpClk( )
函数功能 获取UART的配置(要求提供明确的时钟速率)
函数原型 void UARTConfigGetExpClk(unsigned long ulBase,
unsigned long ulUARTClk,
unsigned long *pulBaud,
unsigned long *pulConfig)
<< 上一页 [11] [12] [13] [14] [15] [16] 下一页