TMS320C6748的UART接口带有发送和接收缓冲(FIFO)功能,每个C6748包含有3个UART口(UART0,UART1和UART2)。
1. 波特率设置
UART输入时钟来自系统时钟的分频。UART的波特率可编程,将UART时钟分频(1-266)以产生波特率时钟(BCLK)。BCLK的频率为波特率的16倍(16×)(每个接收或发送的位持续16个BCLK周期)或波特率的13倍(13×)(每个接收或发送的位持续13个BCLK周期)。当UART接收时,在第8个BCLK周期对16×过采样模式位进行采样,在第6个BCLK周期对13×过采样模式位进行采样。通过在模式定义寄存器(MDR)中配置OSM_SEL位来选择16×或13×参考时钟。
2.UART使用中最常用到的API
(1)void UARTConfigSetExpClk (unsigned int baseAdd, unsigned int uartClk,
unsigned int baudrate, unsigned int config,
unsigned int overSampRate)
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_1_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
带时钟参数的UART配置函数,参数分别是:baseAdd,UART模块基地址;uartClk,系统提供给UART的时钟频率;baudrate,波特率;config,数据帧格式配置;overSampRate,Over-sampling rate(either 13x or 16x)。这个函数设置了波特率,数据帧格式。
(2) void UARTEnable (unsigned int baseAdd);
void UARTDisable (unsigned int baseAdd);
使能和禁能UART
(3) void UARTCharPut(unsigned int baseAdd, unsigned char byteTx);
UART发送功能函数,
- FIFO模式 - 等待发送FIFO和THR中都为空时,发送字符。
- 非FIFO模式 - 等待TSR和THR都为空时,发送字符。
Receive=UARTCharGet(SOC_UART_1_REGS);
UART接收功能函数
- FIFO模式 - 等待FIFO非空(至少有一个未读取字符),即RBR中有数据时,获取字符。
- 非FIFO模式 - 等待RBR中有数据时,获取字符。
(3)void UARTFIFOEnable(unsigned int baseAdd)
void UARTFIFODisable(unsigned int baseAdd)
使能和禁能FIFO
void UARTFIFOLevelSet (unsigned int baseAdd, unsigned int rxLevel)
设置接收FIFO触发水平。
//主函数
int main(void)
{
// 外设使能配置
PSCInit();
// GPIO 管脚复用配置
GPIOBankPinMuxSet();
// UART 初始化
UARTInit();
// 发送字符串
unsigned char i;
for(i = 0; i < 34; i++)
UARTCharPut(SOC_UART_1_REGS, Send[i]);
// 接收缓存
unsigned char Receive;
// 主循环
for(;;)
{
Receive=UARTCharGet(SOC_UART_1_REGS);
UARTCharPut(SOC_UART_1_REGS, Receive);
}
}
void GPIOBankPinMuxSet(void)
{
// 使能 UART1 禁用流控
UARTPinMuxSetup(1, FALSE); //UARTPinMuxSetup函数为创龙开发板特有的配置
//函数,该函数位于starterware/application/platform目录工程中的UART.C文件里。
//参数1代表是UART1,FALSE表示禁用流控功能,TRUE表示使能流控功能。
}
/****************************************************************************/
/* */
/* UART 初始化 */
/* */
/****************************************************************************/
void UARTInit(void)
{
// 配置 UART1 参数
// 波特率 115200 数据位 8 停止位 1 无校验位
UARTConfigSetExpClk(SOC_UART_1_REGS, UART_1_FREQ, BAUD_115200, UART_WORDL_8BITS, UART_OVER_SAMP_RATE_16);
// 使能 UART1
UARTEnable(SOC_UART_1_REGS);
}
UART相关知识:
通用异步收发传输器(Universal Asynchronous Receiver/Transmitter,通常称作UART) 是一种串行异步收发协议,应用十分广泛。UART工作原理是将数据的二进制位一位一位的进行传输。在UART通讯协议中信号线上的状态位高电平代表’1’低电平代表’0’。当然两个设备使用UART串口通讯时,必须先约定好传输速率和一些数据位。
硬件连接
硬件连接比较简单,仅需要3条线,注意连接时两个设备UART电平,如电平范围不一致请做电平转换后再连接,如下图所示:
- TX:发送数据端,要接对面设备的RX
- RX:接收数据端,要接对面设备的TX
- GND:保证两设备共地,有统一的参考平面
软件通信协议
UART作为异步串口通信协议的一种,工作原理是将数据的字节一位接一位地传输。协议如下
闲位:
UART协议规定,当总线处于空闲状态时信号线的状态为‘1’即高电平
起始位:
开始进行数据传输时发送方要先发出一个低电平’0’来表示传输字符的开始。因为空闲位一直是高电平所以开始第一次通讯时先发送一个明显区别于空闲状态的信号即为低电平。
数据位:
起始位之后就是要传输的数据,数据可以是5,6,7,8,9位,构成一个字符,一般都是8位。先发送最低位最后发送最高位。
奇偶校验位:
数据位传送完成后,要进行奇偶校验,校验位其实是调整个数,串口校验分几种方式:
1.无校验(no parity)
2.奇校验(odd parity):如果数据位中’1’的数目是偶数,则校验位为’1’,如果’1’的数目是奇数,校验位为’0’。
3.偶校验(even parity):如果数据为中’1’的数目是偶数,则校验位为’0’,如果为奇数,校验位为’1’。
4.mark parity:校验位始终为1
5.space parity:校验位始终为0
停止位:
数据结束标志,可以是1位,1.5位,2位的高电平。
波特率:
数据传输速率使用波特率来表示,单位bps(bits per second),常见的波特率9600bps,115200bps等等,其他标准的波特率是1200,2400,4800,19200,38400,57600。举个例子,如果串口波特率设置为9600bps,那么传输一个比特需要的时间是1/9600≈104.2us。
以9600 8N1(9600波特率,8个数据位,没有校验位,1位停止位)为例,这是目前最常用的串口配置,现在我们传输’O’'K’两个ASCII值,'O’的ASCII为79,对应的二进制数据为01001111 ,'K’对应的二进制数据为01001011 ,传输的格式数据如下图所示:
串口波特率为9600,1bit传输时间大约为104us,传送一个数据实际是10个比特(开始位,8个数据位,停止位),一个bytes传输速率实际为9600*8/10=7680bps。
————————————————
本文UART部分说明转载自:https://blog.youkuaiyun.com/sternlycore/article/details/85244515