您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF51X技术支持专区 -> BF518的UART详解
本帖共有980个阅读者
发表帖子 发表投票 回复主题
BF518的UART详解
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF518的UART详解

UART(Universal Asynchronous Receiver/Transmitter port)接口,是全双工通用的串行接口,由RX 和TX 两根线组成,扩展RS232 芯片可以直接和计算机串口通讯,通常作为调试用的命令和数据通讯接口。

ADSP-BF51x 上有两个UART 接口,接口除了支持标准串口功能外,还支持IrDA 模式,在硬件上增加一个红外通讯模块可以进行红外数据传输。当设置 IrDA 模式后,输出的波形会与原数据相反,且信号宽度变窄,下图是IrDA 模式下和正常模式下的比较。

上传的图片
  20126713284034.jpg [ 18.05 KB 725×255 ] (缩略时请点击查看原图)

 

UART 接口通讯的波特率配置值可以通过下面公式进行计算:BAUD RATE = SCLK/(16 x Divisor)



我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/6/7 13:28:58
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

接口寄存器说明

UARTx_THR UART :传输数据寄存器
UARTx_RBR UART :接收缓存寄存器
UARTx_DLL UART :波特率配置低8 位寄存器
UARTx_DLH UART :波特率配置高8 位寄存器
UARTx_IER UART :中断使能寄存器
UARTx_IIR UART :中断识别寄存器
UARTx_LCR UART :线路控制寄存器
UARTx_MCR UART :调制控制寄存器
UARTx_LSR UART :线路状态寄存器
UARTx_SCR UART :暂存寄存器
UARTx_GCTL UART :全局控制寄存器

例子代码分析

代码请参考板卡驱动代码的 RS232 程序。

div = SYSCLK/rate/16; //计算波特率配置值
*pUART0_GCTL=0x0009; //配置UART 工作模式
*pUART0_LCR=0x0080;// DLAB=1 允许访问DLL 和DLH
*pUART0_DLL=div;
*pUART0_DLH=div>>8; //DLL DLH 分别赋值
*pUART0_LCR=0x0003;// 允许访问 RBR THR 和IER
*pUART0_IER=0x0001;// 接收中断允许

*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xffffffff; // UART 中断等级定义
*pSIC_IAR2 = 0xf3ffffff;
register_handler(ik_ivg10, UART0_ISR); //注册中断
*pSIC_IMASK0 = 0x00400000; //使能中断
*pUART0_THR=TXbuf[i]; //向UART0 传输数据寄存器写数据
while(!(*pUART_LSR&0x0020)); //等待传输完成
EX_INTERRUPT_HANDLER(UART0_ISR) //UART 接收数据中断函数
{
if(*pUART0_LSR&DR) //判断是否有新的数据。
{
if(cont>512) //防止buff 溢出,测试代码,将接收到的数据重复写入512 字节的buff
cont = 0;
RXbuf[cont]=*pUART0_RBR; //读取数据
cont++;
}
}


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/6/7 13:30:39
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

代码实现功能

代码实现了配置波特率为 9600,设定了数据接收中断,运行代码后,会将数组Txbuf 中的字符串通过串口发送出,当接收到数据后,会进入中断函数读取数据。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/6/7 13:31:58
xtqbp(论坛新手)
xtqbp
头衔:社区公民
帮派:无帮无派
帖数:18
金钱:194
积分:18
注册时间:2013/2/16
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
能把源码上传一份吗!?

给的例程不完整,没有管脚的定义啊!
————————————————————————————————————————————
UART的问题已经全部解决,3Q!


「该帖子被 xtqbp 在 2013-03-27 16:29:51 编辑过」

xtqbp
等级:论坛新手 参考IP地址:*.*.*.*
2013/3/26 9:21:13
杰式悦敏(论坛新手)
杰式悦敏
头衔:社区公民
帮派:无帮无派
帖数:1
金钱:105
积分:1
注册时间:2015/6/11
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

楼主,可否把这个UART的源代码发我一份,小弟邮箱是xinyu778778@163.com,谢谢


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2015/9/18 12:02:55
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154033 Call, 1 Queries, Processed in 0.015625 second(s),