四、s3c2440 裸机开发 通用异步收发器UARN
四、通用异步收发器UARN
原文地址 http://blog.csdn.net/woshidahuaidan2011/article/details/51137047
by jaosn Email: woshidahuaidan2011@hotmail.com
UART(Universal AsynchronousReceiver/Transmitter。通用异步接收/发送装置)用于异步通信。能够实现全双工发送和接收。
2440有三个UART:UART0。UART1。UART2其结构图例如以下所看到的:
通过上图能够看到UART包括baud-rate generator波特率发生器,transmitter发送器,receiver 接收器and a control unit控制单元。
对于波特率产生器,首先要提到UBRDIVn(n为0,1,2以下雷同)。能够通过该寄存器设置波特率,设置的公式例如以下:
UBRDIVn=(int)(UARTclock / (buad ratex 16) ) –1
当中UART clock正如上面说的,能够选择PCLK, FCLK/n or UEXTCLK
UBRDIVn能够取值为0到2^16-1,在旁路模式下(bypass mode),该寄存器能够设置为0,该寄存器图为:
此寄存器不用多说明。直接填写数字就能够。
如果要设置的波特率为115200。UART的时钟UART clock为40M的话,那么:
UBRDIVn =(int)(40000000 / (115200 x 16) ) -1
= (int)(21.7) -1 [round to the nearestwhole number]
=22 -1 = 21
能够看到。上面的计算取整之后将会出现误差,这里的误差同意范围为1.87%,误差计算方式为:
tUPCLK = (UBRDIVn + 1)x 16 x 1Frame / PCLK tUPCLK: 实际UART Clock
tUEXACT = 1Frame / baud-rate tUEXACT: 理想UART Clock
UART error = (tUPCLK – tUEXACT) / tUEXACTx 100%
当中1Frame = start bit + data bit + parity bit + stop bit. 開始位+数据位奇偶校验位+停止位
这里的帧能够绘图表示:
start bit(1位) |
data bit(5-8位) |
parity bit(1位) |
stop bit(1或2位) |
||||||||||
|
|
至于一帧数据究竟是怎么设置的,能够使用ULCONn寄存器。以ULCON0为例:
通过ULCONn设置帧的传输格式是最基本设置,设置完帧格式后就能够设置UART时钟源和一些模式设置。这个设计的寄存器为UCONn:
这里。UCONn主要是设置一写发送或者接收数据模式、中断触发形式和UART的时钟选择设置。看一下每一位详细含义:
UCONn【1:0】选择怎样接收缓存器读取数据 00表示禁止接收数据
DMA3请求(UART2独有) 11表示DMA1请求(UART1独有)
UCONn【3:2】选择怎样发送缓存器发送数据 00表示禁止发送数据
DMA3请求(UART2独有) 11表示DMA1请求(UART1独有)
UCONn【4】 设置此位,UART会在一帧的时间内发送一个break信号,发送完之后改位自己主动清除。
UCONn【5】 自循环模式,这样的模式仅用于測试,该位设置为1能够,在内部,RX和TX会连接起来。
UCONn【6】设置接收错误状态接收使能,此位设置为1时。当发生比方帧错误,溢出错误时将产生中断。
UCONn【7】当使用UART的FIFO的时,此位设置为1时,当接收超时时,会触发中断。
UCONn【8】接收中断设置。设置为1表示电平触发。设置为0表示脉冲触发。在FIFO模式时。当FIFO的值达到设置的阈值会触发中断。在非FIFO模式时。有一个数据便触发中断。
UCONn【9】发送中断设置,设置为1表示电平触发,设置为0表示脉冲触发,在FIFO模式时,当FIFO的值达到设置的阈值会触发中断,在非FIFO模式时,有一个数据便触发中断。
UCONn【11:10】UART时钟选择: 00/10 PCLK 01外部时钟UEXTCLK 11 FCLK/n
UCONn【15:12】选择FCLK/n模式的时候,用来确定n的具体数值。以下具体介绍一下:
n的值要受到UCON0【15:12】、UCON1【15:12】和UCON2【14:12】共同决定的,且当当中的一个设置为非0时,其余两个必须设置为0,当中要注意的是:
当n的范围为7到21时,UART时钟=FCLK/( UCON0【15:12】的设定值+6)
当n的范围为22到36时,UART时钟=FCLK/(UCON1【15:12】的设定值+21)
当n的范围为37到43时,UART时钟=FCLK/(UCON2【14:12】的设定值+36)
UFCON0【1】接收FIFO复位位,设置为1,将自己主动清除接收FIFO的内容
UFCON0【2】发送FIFO复位位,设置为1。将自己主动清除发送FIFO的内容
流控制能解决问题。当接收端数据处理只是来时,就发出“不再接收”的信号,发送端就停止发送。直到收到“能够继续发送”的信号再发送数据。因此流控制能够控制传输数据的进程,防止数据的丢失。
PC机中经常使用的两种流控制是硬件流控制(包含RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止)
通过以下的凝视能够注意到仅仅有UART0和UART1拥有AFC功能,以下对寄存器的位做出简要说明
UMCONn【0】:设置为1使能nRTS(请求发送),可是假如使能使能AFC功能,该位是无效的,该位的值是2440自己主动设置的
与之相应的状态寄存器是UMSTATn。主要是读取一些请求发送的状态信息,这里不再具体说明,具体查阅手冊。
设置部分已经介绍完成,通过上面的设置,就可以完整的完成通信。
UTSTATn寄存器用于表明收发的一些状态,是一些仅仅读寄存器:
UTSTATn【0】收到数据该位自己主动置1。当使用FIFO。应该配合查询检測UFSTAT寄存器
UTSTATn【1】当发送缓冲区没有数据时该位置1,当使用FIFO,应该配合查询检測UFSTAT寄存器
UTSTATn【2】当发送缓存器没有数据且最后一个数据发送完成的时候该为置1.
UFSTATn【6】当接收FIFO缓存器的满了之后该位自己主动为置1
UFSTATn【14】当发送FIFO缓存器的满了之后该位自己主动为置
UERSTATn【3】在接受数据时。到BREAK信号的时候则置1
注意,当读取该寄存器时,UERSTATn寄存器将自己主动清零。
寄存器UFSTATn和寄存器UERSTATn就像一个显示器一样,通过这两个显示器。你能够知道UART的收发数据状态及其FIFO的状态。
到如今为止。有关UART的原理及其寄存器已经介绍完成。一切设置完成后就可接收或者发送数据了,接收和发送比較简单,仅仅须要向着UTXHn 和URXHn写入数据或者读取数据就能够(都是以byte为单位):
UTXHn:将要发送的数据发到此寄存器,UART会把数据放到发送缓冲区,自己主动发送出去。数值0到255
1、 设置相关的引脚为UART功能的引脚 能够通过GPnCON寄存器来设置。普通情况下要使能上拉电阻功能以使port稳定。通过GPnUP设置上拉使能
3、 设置UART的时钟源,及其发送接收方式 可通过UCONn来设置
//1、设置相关的引脚为UART功能的引脚能够通过GPnCON寄存器来设置,普通情况下要使能上拉电阻功能以使port稳定,通过GPnUP设置上拉使能
//3、设置UART的时钟源,及其发送接收方式 可通过UCONn来设置
rUCON0 |=(1|(1<<2));//设置查询或者中断接收,查询或者中断发送,时钟源为PCLK其余採用默认值
//4、对于有关FIFO的设置通过UFCONn来设置
rUFCON0 &=~1;//不使用FIFO
//5、设置是否使用自己主动流控可通过UMCONn来设置
rUMCON0 &=~(1<<4);//不使用AFC
//6、设置UART的波特率 UBRDIVn
rUBRDIV0=(int)( PCLK_DATA /( BUAD_RATE * 16) )-1;//PCLK=50m 波特率115200
}
void send_c(unsigned char c) //发送一个字符函数
{
/* 等待,直到发送缓冲区中的数据已经所有发送出去 */
while(!(rUTRSTAT0 & (1<<2)));
/* 向UTXH0寄存器中写入数据。UART即自己主动将它发送出去 */
rUTXH0 = c;
}
unsigned char get_c(void) //接收函数
{
/* 等待。直到接收缓冲区中的有数据 */
while(!(rUTRSTAT0 & 1));
/* 直接读取URXH0寄存器,就可以获得接收到的数据 */
returnrURXH0;
}
參考:http://blog.csdn.net/g1036583997/article/details/12717297
四、s3c2440 裸机开发 通用异步收发器UARN相关推荐
- 基于FPGA通用异步收发器UART设计
摘要 通用异步收发器(UART)是一种能同时支持近距离和远距离传输的异步串行接口,具有传输速率较高.传输距离长.抗干扰性能好.电路结构简单以及节省布线资源等优点.然而,随着社会的发展,信息传输容量越来 ...
- ARM裸机开发——双机异步串行通信
写在前面 本报告因为期末将至,后续还需要完成一次课程设计,故本次实验较为简单,完成的时间也非常匆忙,故文章内容较为单薄,也可能有着更多疏忽之处,还望大家海涵. 1. 项目任务 1) 利用S3C24 ...
- platform框架--Linux MISC杂项框架--Linux INPUT子系统框架--串行集成电路总线I2C设备驱动框架--串行外设接口SPI 设备驱动框架---通用异步收发器UART驱动框架
platform框架 input. pinctrl. gpio 子系统都是 Linux 内核针对某一类设备而创建的框架, input子系统是管理输入的子系统 pinctrl 子系统重点是设置 PIN( ...
- keil5(MDK5)配置S3C2440裸机开发调试环境
源:keil5(MDK5)配置S3C2440裸机开发调试环境
- 通用异步收发器UART
UART的介绍 UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器),俗称串口. 通常计算机与外部设备通信的端口分为并行与串行: a. 并 ...
- STM32F103系列实战之通用同步异步收发器(USART)
通用同步/异步收发器(USART) STM32F103xC. STM32F103xD和STM32F103xE增强型系列产品中,内置了3个通用同步/异步收发器(USART1. USART2和USART3 ...
- 通用同步和异步收发器---Usart
在介绍之前,先简单介绍几种通信协议: Usart:通用同步异步收发器,这篇文章会详细讲解的. Uart:通用异步收发器,相当于Usart的异步通信功能. SPI:串行外设接口,是一种同步协议. IIC ...
- linux编译运行uart,嵌入式Linux裸机开发(七)——UART串口通信
嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTE ...
- Keil5 平台 S3C2440裸机程序开发-----中断系统/UART
目录 前言 一.启动文件 二.代码 main.c uart.c uart.h led.c led.h S3C2440.h 三.编译,烧录,打开串口助手,接收到数据. 前言 本博文介绍mini2440开 ...
最新文章
- 北理工硕士被指抄袭投稿论文,校方通报:留校察看
- 程序员50题(JS版本)(九)
- vsim生成VCD波形文件(verilog)
- 报表中如何控制附件的上传和下载权限
- 优先队列(个人模版)
- C#并行编程中的Parallel.Invoke
- mysql 常用命令
- 卷积神经网络与深度学习
- AAC MP3音频帧采样点大小
- 在《寒门状元之死》上,咪蒙贩卖的是什么?
- opencv——椭圆环截取图像(圆环截取类似)
- Ribbon界面图标可以直接用PNG做透明图标
- Mac系统升级中途断电/关机,升级/开机失败的恢复方法
- 2020写真消费人群需求报告
- Linux自学笔记——OpenSSL命令行工具
- html阴影效果骰子,flex布局案例(骰子)
- postman获取返回值及tests[]用法
- 【UE4】模仿《黑暗之魂》系列游戏制作一个简单的锁定敌人的功能
- win 2008 r2
- SpringBoot 实现 QQ 邮箱注册和登录
热门文章
- 研发人员专用表情包上架了
- 计算机主机如何睡眠,win7怎样设置电脑休眠_w7电脑设置休眠的详细步骤
- CentOS7如何设置屏幕不休眠
- CSS超出两行隐藏,但是仍然有部分第三行文字溢出
- 【操作系统习题】假定某多道程序设计系统供用户使用的主存空间为100 KB ,磁带机2台,打印机1台
- zabbix-邮箱报警与微信报警
- Java Vector API的使用测试
- 真实骑手数据:73万大学毕业生在送外卖
- eclipse的启动失败提示“发生了错误,请参阅日志文件“
- 网易2018实习生招聘笔试题-JAVA开发实习生