S3C2410内置的UART控制器

发布者:星光闪耀最新更新时间:2016-04-20 来源: eefocus关键字:S3C2410  内置  UART控制器 手机看文章 扫描二维码
随时随地手机看文章
一、S3C2410内置的UART控制器

S3C2410内部具有3个独立的UART控制器,每个控制器都可以工作在Interrupt(中断)模式或DMA(直接内存访问)模式,也就是说UART控制器可以在CPU与UART控制器传送数据的时候产生中断或DMA请求。并且每个UART控制器均具有16字节的FIFO(先入先出寄存器),支持的最高波特率可达到115.2Kbps
图5-11是S3C2410内部UART控制器的结构图

图5-11

通过上图我们可以看到,每个UART控制器中大抵分为发送器和接收器两部分,在发送器中如果当前UART处于FIFO模式,则有16B的发送缓冲寄存器,一般在发送数据时CPU会将数据先暂存到这16B中来,如果当前UART处于非FIFO模式,则这16B的缓冲寄存器是没用的,我们只用到了这16B中最低一个字节的缓冲寄存器来存放数据也叫做Transmit Holding Register,而关键的一点是在发送器中发送缓冲器中的数据并不是直接送到输出引脚上的,还必须要先送到发送移位寄存器也就是Transmit Shifter,然后再由Transmit Shifter送出到输出引脚。而接收端这边大概都是一样,发送移位寄存器和接收移位寄存器对数据的发送和接收都是在波特率发生器产生的波特率下来进行控制的。而波特率的产生也需要在时钟源的控制下才行

UART的操作
UART的操作分为以下几个部分分别是数据发送、数据接收、产生中断、产生波特率、Loopback模式、红外模式以及自动流控模式。
数据发送:
发送的数据帧格式是可以编程设置的。它包含了起始位、5~8个数据位、可选的奇偶校验位以及1~2位停止位。这些都是通过UART的控制寄存器 ULCONn 来设置的。
数据接收:
同发送一样,接收的数据帧格式也是可以进行编程设置的。此外,还具备了检测溢出出错、奇偶校验出错、帧出错等出错检测,并且每种错误都可以设置相应的错误标志。
自动流控模式:
S3C2410的UART0和UART1都可以通过各自的nRTS和nCTS信号来实现自动流控。在自动流控(AFC)模式下nRTS取决于接收端的状态,而nCTS控制了发送端的操作。具体地说:只有当nCTS有效时(表明接收方的FIFO已经准备就绪来接收数据了因为接收端的nRTS是和发送端的nCTS连接的nCTS有效也就表示接收端的nRTS有效也就表示接收方的FIFO已经准备好接收数据啦),UART才会将FIFO中的数据发送出去。在UART接收资料之前,只要当接收FIFO有至少2-byte空余的时候,nRTS就会被置为有效。图5-12是UART 自动流控模式的连接方式

图5-12
中断/DMA请求产生
S3C2410的每个UART都有7种状态,分别是:溢出覆盖(Overrun)错误、奇偶校验错误、帧出错、断线错误(暂停态)、接收就绪(接收缓冲区准备好)、发送缓冲空闲、发送移位器空闲。它们在UART状态寄存器 UTRSTATn / UERSTATn 中有相应的标志位。
波特率发生器
每个UART控制器都有各自的波特率发生器来产生发送和接收资料所用的序列时钟,波特率发生器的时钟源可以由CPU内部的系统时钟(PCLK),也可以从CPU的 UCLK (外部UART设备的时钟)管脚由外部取得时钟信号,并且可以通过 UCONn 选择各自的时钟源。
波特率产生的具体计算方法如下:
当选择CPU内部时钟(PCLK)时:
UBRDIVn=(int)(PCLK/(bps*16))-1,bps为所需要的波特率值,PCLK为CPU内部外设总线(APB)的工作时钟。
当需要得到更精确的波特率时,可以选择由 UCLK 引入的外部时钟来生成。
UBRDIVn=(int)(UCLK/(bps*16))-1
LoopBack操作模式:
S3C2410 CPU的UART提供了一种测试模式,也就是这里所说的LoopBack模式。在设计系统的具体应用时,为了判断通讯故障是由于外部的数据链路上的问题,还是CPU内驱动程序或CPU本身的问题,这就需要采用LoopBack模式来进行测试。在LoopBack模式中,资料发送端TXD在UART内部就从逻辑上与接收端RXD连在一起,并可以来验证资料的收发是否正常。
UART控制寄存器
下面将针对UART的各个控制寄存器逐一进行讲解,以期对UART的操作和设置能有更进一步的了解。

ULCONn (UART Line Control Register)见图5-13


图5-13
Word Length :决定每帧的数据位数
Number of Stop Bit :停止位数
Parity Mode :奇偶校验位类型
Infra-Red Mode :UART/红外模式选择(当以UART模式工作时,需设为“0”)
UCONn (UART Control Register)见图5-14
Receive Mode :选择接收模式。如果是采用DMA模式的话,还需要指定说使用的DMA信道。
Transmit Mode :同上。
Send Break Signal :选择是否在传送一帧数据中途发送Break信号。
Loopback Mode :选择是否将UART置于Loopback测试模式。
Rx Error Status Interrupt Enable :选择是否使能当发生接收异常时,是否产生接收错误中断。
Rx Time Out Enable :是否使能接收超时中断。
Rx Interrupt Type :选择接收中断类型。
选择0:Pulse(脉冲式/边沿式中断。非FIFO模式时,一旦接收缓冲区中有资料,即产生一个中断;为FIFO模式时,一旦当FIFO中的资料达到一定的触发水平后,即产生一个中断)


选择1:Level(电平模式中断。非FIFO模式时,只要接收缓冲区中有资料,即产生中断;为FIFO模式时,只要FIFO中的资料达到触发水平后,即产生中断)
Tx Interrupt Type :类同于Rx Interrupt Type
Clock Selection :选择UART波特率发生器的时钟源。

图5-14
UFCONn (UART FIFO Conrtol Register)用于对收发缓冲的管理,包括缓冲的触发字节数的设置,FIFO的使能见图5-15
FIFO Enable :FIFO使能选择。
Rx FIFO Reset :选择当复位接收FIFO时是否自动清除FIFO中的内容。
Tx FIFO Reset :选择当复位发送FIFO时是否自动清除FIFO中的内容。
Rx FIFO Trigger Level :选择接收FIFO的触发水平。
Tx FIFO Trigger Level :选择发送FIFO的触发水平。

图5-15
UMCONn (UART Modem Control Register)见图5-16
Request to Send :如果在AFC模式下,该位将由UART控制器自动设置;否则的话就必须由用户的软件来控制。
Auto Flow Control :选择是否使能自动流控(AFC)。

图5-16
UTRSTATn (UART TX/RX Status Register)见图5-17
Receive buffer data ready :当接收缓冲寄存器从UART接收端口接收到有效资料时将自动置“1”。反之为“0”则表示缓冲器中没有资料。
Transmit buffer empty :当发送缓冲寄存器中为空,自动置“1”;反之表明缓冲器中正有资料等待发送。
Transmitter empty :当发送缓冲器中已经没有有效资料时,自动置“1”;反之表明尚有资料未发送。

图5-17
UERSTATn (UART Error Status Register)见图5-18
Overrun Error :为“1”,表明发生Overrun错误。
Frame Error :为“1”。表明发生Frame(帧)错误。

图5-18
UFSTATn :(UART FIFO Status Register)见图5-19
Rx FIFO Count :接收FIFO中当前存放的字节数。
 Tx FIFO Count :发送FIFO中当前存放的字节数。
 Rx FIFO Full :为“1“表明接收FIFO已满。
 Tx FIFO Full :为“1“表明发送FIFO已满。

图5-19
UMSTATn :(UART FIFO Status Register)见图5-20
Clear to Send :为“0”表示CTS无效;为“1”表示CTS有效。
Delta CTS :指示自从上次CPU访问该位后,nCTS的状态有无发生改变。
为“0”则说明不曾改变;反之表明nCTS信号已经变化了。

图5-20
UTXHn 和 URXHn 分别是UART发送和接收资料寄存器
这两个寄存器存放着发送和接收的资料,当然只有一个字节8位资料。需要注意的是在发生溢出错误的时候,接收的资料必须要被读出来,否则会引发下次溢出错误

UBRDIVn :(UART Baud Rate Divisor Register)见图5-21


图5-21


接着我们通过结合代码来看看具体在程序中怎样来操作UART的流程:

先来看看在C代码中对用到的UART多个寄存器的定义:

#define UART_CTL_BASE 0x50000000 //UART0的寄存器的起始地址也就是ULCON0的地址
#define UART0_CTL_BASE UART_CTL_BASE
#define bUART(x, Nb) __REGl(UART_CTL_BASE + (x)*0x4000 + (Nb)) //因为考虑到UART1与UART0相应的寄存器地址相差0x4000所以这里也考虑到了对UART1和UART2的使用,而上面__REGl的定义:

#define __REG(x) (*(volatile unsigned long *)(x))
#define __REGl(x) __REG(x)
#define bUARTb(x, Nb) __REGb(UART_CTL_BASE + (x)*0x4000 + (Nb)) //#define __REGb(x) (*(volatile unsigned char *)(x))

#define oULCON 0x00
#define oUCON 0x04
#define oUFCON 0x08
#define oUMCON 0x0c
#define oUTRSTAT 0x10
#define oUERSTAT 0x14
#define oUFSTAT 0x18
#define oUMSTAT 0x1c
#define oUTXHL 0x20
#define oUTXHB 0x23
#define oURXHL 0x24
#define oURXHB 0x27
#define oUBRDIV 0x28

#define ULCON0 bUART(0, oULCON)
#define UCON0 bUART(0, oUCON)
#define UFCON0 bUART(0, oUFCON)
#define UMCON0 bUART(0, oUMCON)
#define UTRSTAT0 bUART(0, oUTRSTAT)
#define UERSTAT0 bUART(0, oUERSTAT)
#define UFSTAT0 bUART(0, oUFSTAT)
#define UMSTAT0 bUART(0, oUMSTAT)
#define UTXH0 bUART(0, oUTXHL)
#define URXH0 bUART(0, oURXHL)
#define UBRDIV0 bUART(0, oUBRDIV)

#define UTRSTAT_TX_EMPTY (1 << 2)
#define UTRSTAT_RX_READY (1 << 0)
#define UART_ERR_MASK 0x0f

再来看看真正对UART的操作:

void init_uart(void)
{
ULCON0 = vULCON0; //#define vULCON0 0x03 表示每帧有8个数据位,1个停止位,不进行奇偶校验,正常模式
UCON0 = vUCON0; //#define vUCON0 0x245 表示接收模式和发送模式都是中断或轮询模式,当发生接收异常时,产生接收错误中断,发送中断类型为Level,接收中断类型为Pulse,波特率时钟源为PCLK
UFCON0 = vUFCON0;
UMCON0 = vUMCON0;
UBRDIV0 = 12;
}

void putc(char c)
{
char i;

while (!(UTRSTAT0 & UTRSTAT_TX_EMPTY)) { //不断的查询,直到发送缓冲寄存器和和移位寄存器都不为空,就可以发送数据
;
}

for (i=0; i<10; i++) {
;
}

UTXH0 = c; //直接将要发送的字符赋值给发送寄存器发送出去
}

unsigned char getc(void)
{
while (!(UTRSTAT0 & UTRSTAT_RX_READY)) {
;
}

return URXH0; //直接从接收寄存器中返回接收到的1个字节的数据
}


关键字:S3C2410  内置  UART控制器 引用地址:S3C2410内置的UART控制器

上一篇:ARM ADS汇编和Gnu汇编的转换
下一篇:ARM系统中函数调用时参数传递规则

推荐阅读最新更新时间:2024-03-16 14:51

苹果正在研发Apple Studio Display 7K显示器,内置A13芯片
据9to5 Mac报道,苹果现在没有任何迹象表明,正在开发新版 Pro Display XDR。然而,有传言称,苹果有新的外部显示器正在开发中。知情人士爆料,苹果公司一直在开发新的“Apple Studio Display”,其分辨率比 Pro Display XDR 更高。   苹果在 2019 年 12 月发布了 Pro Display XDR 显示器,售价 4999 美元,可选配 999 美元的支架。这款 32 英寸显示器具有 6K 分辨率,峰值亮度为 1600 尼特,适用于 HDR 内容,10bit、10.73 亿种颜色,对比度为 1000000:1。   虽然目前还不清楚新的 Apple Studio Disp
[手机便携]
苹果正在研发Apple Studio Display 7K显示器,<font color='red'>内置</font>A13芯片
指尖上的内置式电容触摸界面MCU
 随着苹果,三星等最热最炫最潮的智能手机平板电脑进入大家日常生活,低功耗电容触摸解决方案也渐渐被大家所了解。消费电子和工业电子产品上采用电阻触摸技术和电容触摸技术很多,但是最近几年电容式触摸技术应用发展最快。工业电子应用领域有越来越多的人机交互解决方案,也是采用电容触摸解决方案。特别是灰尘、水雾及电磁强光信号干扰等恶劣工作条件下,选择安全可靠,集成度高,容易扩展,超低成本的内置式电容触摸界面MCU很重要。   纵观市场上应用在智能手机和平板电脑上的电容触摸解决方案比较多,应用在家用电器和工业电子的电容触摸解决方案比较少。Atmel的maXTouch技术解决方案适用于触摸智能手机。Cypress 公司的具有多点触摸功能的单层触摸屏
[模拟电子]
指尖上的<font color='red'>内置</font>式电容触摸界面MCU
Moto G20规格过FCC网站曝光 内置5000mAh电池
现在,Moto G10 Power和Moto G30已经在印度推出,现在是时候将焦点转移到一款位于两者之间的设备上了。它被称为Moto G20,我们已经在FCC网站上发现了它。上市信息显示,Moto G20将支持双频Wi-Fi、蓝牙和FM收音机。   这款智能手机有两个变体,型号分别为XT2128-1和XT2128-2。我们还了解到,Moto G20将搭载5000mAh电池,支持10W的充电功率。   MySmartPrice偶然在Geekbench上看到了Moto G20的规格。它似乎采用八核UNISOC芯片组。它的单核和多核成绩分别为378分和1322分。这款芯片组很有可能是2019年推出的入门级UNISOC SC986
[手机便携]
Moto G20规格过FCC网站曝光 <font color='red'>内置</font>5000mAh电池
Silicon Laboratories推出内置数字接口的高整合度单芯片EDGE收发器
Aero   II ed 利用已经考验的射频技术提供体积最小和效能最高的 DigRF 无线电 专业电子元器件代理商益登科技 ( TSE:3048 )所代理的高效能模拟与混合信号 IC 领导厂商 Silicon Laboratories 日前推出 集成数字接口 的 Aero II ed 单芯片 EDGE 收发器。 Aero IIed 不仅符合 2.5G DigRF 规格 1.12 版要求,还预先在许多先进的 DigRF 基带设计上完成验证。 Aero IIed 是 Silicon Laboratories 拥有专利和通过考验的 Aero 产品线最新器件
[新品]
无需充电的WISP微型芯片:内置加速度计和温度传感器
华盛顿大学传感实验室的研究员创造了一个无线识别和传感平台WISP。据悉,WISP将一个 传感器 和计算芯片结合,这使它不需电池或链接电源线便能运作。它主要是吸收一个RFID读写器发出的无线电波,也就是零售店常见的防盗技术,并将无线电波转化为电流的。 不到硬币大小的WISP无线识别和传感平台 据悉,WISP和Fitbit里的处理器,有类似的时钟速度和功能,包括嵌入式加速度计和温度传感器。 华盛顿大学传感实验室的研究员AaronParks说,WISP可以追踪传感数据与外界交流,做一些基础信息的处理工作。它通过反向散射无线信号实现了这项伟业,Parks说,这等同于用灯光打莫尔斯码来交流。 出人意料的是,据Parks说这项技术还挺快。它
[安防电子]
中断-timer0
使用timer0中断,将LED灯闪烁 Init.c /* * init.c: 进行一些初始化 */ #include s3c24xx.h void disable_watch_dog(void); void clock_init(void); void memsetup(void); void copy_steppingstone_to_sdram(void); void init_led(void); void timer0_init(void); void init_irq(void); void delay(int n) { int i; for(i=0;i n;i++); } /* * 关闭WA
[单片机]
关于MSP430 IO作为输入时内置拉电阻的问题
单片机:MSP430g2553评估板 软件:IAR 问题:用msp430单片机扫描按键时是否要加上下拉电阻。 描述:最近笔者在学TI公司的msp430单片机时要测试板载的按键,但是发现IO外面没有加上拉电阻,当我代码控制P1.3为输入时,IO表现为高阻状态,将手在IO上就能改变IO的电位,我很自然的想到应该在IO上外加上拉电阻,但是反过来想,为什么TI公司设计这板子的时候没有加上上拉电阻那?难道要让我们自己加?不科学!于是我到网上搜相关问题,很多人都是另外加电阻的,难道我想多了?突然我看到一篇博客,下面是该博客的内容: 今天帮助一个人测试msp430f2002,他又提出了这样的要求,输入,msp430内部上拉,我又习惯性的说,不行
[单片机]
Navigon推内置u-blox GPS个人导航设备
瑞士Thalwil–2007年12月17日 -Navigon最近推出一种吸引人的高性能个人导航设备,该设备与保时捷设计中心联合开发,内置u-blox的ANTARIS4 SuperSense GPS技术。 Navigon新推出的P9611导航设备,该设备尺寸为125mm x 82 mm x 19mm,重量仅250克,拥有诸多特色硬件和软件,包括预装的SD存储卡、USB线、车载支架、充电线及高音质音频播放器。设备带有蓝牙技术,通过支持蓝牙的移动电话上可以实现免提通话。 其它软件包括37个欧洲国家的数字地图和集成的TMC(交通信息频道)可以通知使用者交通拥堵信息,并自动计算备选路线;预装有国际信息,这些信息穿越国界后自动更新,可以显示
[新品]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved