深入理解ARM体系架构(S3C6410)---UART实例

发布者:innovation2最新更新时间:2016-06-23 来源: eefocus关键字:ARM体系架构  S3C6410  UART 手机看文章 扫描二维码
随时随地手机看文章
1、  概括OVERVIEW

S3C6410提供了4个独立的异步串行口,每个独立的串行口可以工作在中断模式或DMA模式下。也就是说UART能够产生一个中断或DMA请求。UART可以提供最高3Mbps。每个UART包含2个64位的FIFO,分别用于接收,发送缓冲。

S3C6410 UART 包括可编程的波特率,红外发射接收,1或2个停止校验位,5,6,7,8数据位,和奇偶检验。每个UART包含一个波特率发生器,接收发送和控制单元。

波特率可以由PCLK,EXT_UCLK0或EX_UCLK1锁定。发送接收器分别包含了一个64位FIFO和一个数据移位器。通过向FIFO写入数据,再把FIFO中的数据拷贝到数据移位器中,从而通过TxDn引脚被发送出去。接收数据与之相反:RxDn->datashifter->FIFO.

 

2、  特性FEATURES

RxD0, TxD0, RxD1, TxD1, RxD2, TxD2, RxD3and TxD3支持DMA格式和中断格式。

UART 0,1,2,3支持红外通信和64位FIFO

UART 0,1支持nRTS0, nCTS0, nRTS1, and nCTS1

支持高速操作。

支持握手操作。

 

 

下面将描述数据的发送和接收,中断的产生,波特率的产生,回环模式,红外模式,和自动流控制模式。

3 、 数据发送DATA TRANSMISSION

发送的数据帧是可以编程的,其中包括一个开始位,5~8位数据位,奇偶校验位和1或2个停止位。这些都可以通过线性控制器ULCONn控制。发送器可以产生终止条件,这终止条件能强制在一个帧数据发送时间内使串口输出0状态。

The data framefor transmission is programmable. It consists of a start bit, 5 to 8 data bits,an optional parity bit and 1 to 2 stop bits, which can be specified by the linecontrol register (ULCONn). The transmitter can also produce the breakcondition, which forces the serial output to logic 0 state for one frametransmission time. This block transmits break signals after the presenttransmission word is transmitted completely. After the break signal transmission,it continuously transmits data into the Tx FIFO (Tx holding register in thecase of Non-FIFO mode).

 

 

4、 数据接收DATA RECEPTION

接收的数据帧是可以编程的,其中包括一个开始位,5~8位数据位,奇偶校验位和1或2个停止位。这些都可以通过线性控制器ULCONn控制。接收器能检测到溢出错误,奇偶校验错误,帧错误,和终止条件。每一个错误都可以设置一个错误标志。

overrun error指的是在一个以前的数据还没有被读走之前新的数据就把此数据覆盖了。

parity error指的是接收器检测到一个非预料的奇偶条件。

frame error指的是收到的数据没有停止位。

break condition指的是RxDn在超过一个数据帧的时间始终保持0状态。

当接收器在三个字的时间内(其间隔根据字长位的设置)没有收到任何数据且RxFIFO为空,产生超时条件。

 

 

5、 自动流控制AUTO FLOW CONTROL(AFC)

S3C6410中的UART0 和UART1 支持有nRTS和nCTS信号自动控制流。这样,它能连接至外部的UART。如果用户想连接UART到Modem。

则必须通过设置UMCONn禁止自动流并且通过软件来控制nRTS。只有在nCTS信号有效的情况下,UART才会向FIFO中写入数据。在自动流控制中nCTS表示另一个UART已经准备好接收数据了。在接收数据之前,如果FIFO有2个以上空余字节空间则把nRTS设为有效。空余字节空间小于1时,则要把nRTS设为无效。

 

串口部分寄存器较多,其实根据需要仔细配置即可。

已经编写好的串口程序如下:

 

  1. void Uart_Init(void)  
  2.  
  3.     // UART I/O port initialize (RXD0 GPA0, TXD0: GPA1)  
  4.     rGPACON (rGPACON ~(0xff<<0)) (0x22<<0);    // GPA0->RXD0, GPA1->TXD0  
  5.     rGPAPUD (rGPAPUD ~(0xf<<0)) (0x1<<0);        // RXD0: Pull-down, TXD0: pull up/down disable  
  6.   
  7.     // Initialize UART Ch0  
  8.     rULCON0 (0<<6)|(0<<3)|(0<<2)|(3<<0);                    // Normal Mode, No Parity, Stop Bit, Bit Data  
  9.     rUCON0 (0<<10)|(1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1<<0);    // PCLK divide, Polling Mode  
  10.     rUFCON0 (0<<6)|(0<<4)|(0<<2)|(0<<1)|(0<<0);            // Disable FIFO  
  11.     rUMCON0 (0<<5)|(0<<4)|(0<<0);                        // Disable Auto Flow Control  
  12.   
  13.     rUBRDIV0 35;                                    // Baud rate  
  14.     rUDIVSLOT0 0x80;//aSlotTable[DivSlot];  
  15.  
  16.   
  17.   
  18. void Uart_SendByte(int data)  
  19.  
  20.     while(!(rUTRSTAT0 0x2));   //Wait until THR is empty.  
  21.     //_Delay();  
  22.     WrUTXH0(data);  
  23.  
  24.   
  25. void Uart_SendString(char *pt)  
  26.  
  27.     while(*pt)  
  28.         Uart_SendByte(*pt++);  
  29.  
  30.   
  31. //=====================================================================  
  32. char Uart_GetCh(void)  
  33.  
  34.            
  35.      while(!(rUTRSTAT0 0x1)); //Receive data ready  
  36.         return RdURXH0();  
  37.      
  38.  
  39.   
  40. char Uart_GetKey(void)  
  41.  
  42.         if(rUTRSTAT0 0x1)    //Receive data ready  
  43.             return RdURXH0();  
  44.         return 0;      
  45. }  

关键字:ARM体系架构  S3C6410  UART 引用地址:深入理解ARM体系架构(S3C6410)---UART实例

上一篇:深入理解ARM体系架构(S3C6410)---lcd 显示图片
下一篇:深入理解ARM体系架构(S3C6410)---PWM实例

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

STM32CubeIDE之printf重定向及串口(uart)输出浮点型数据的修改
STM32CubeIDE Version: 1.0.2 Build: 3566_20190716-0927 (UTC) OS: Windows 10, v.10.0, x86_64 / win32 Java version: 1.8.0_202 板卡:NUCLEO-F411RE printf重定向 首先你得配置好串口的各项变量 因为板卡上带有ST-LINK,用的是USART2 我们甚至不用USB转TTL,一根microUSB就能解决 配置变量 然后用IDE生成代码 方式一 贴入以下代码 #include stdio.h /* USER CODE END Includes */ /* Private type
[单片机]
STM32CubeIDE之printf重定向及串口(<font color='red'>uart</font>)输出浮点型数据的修改
ARM11---中断---向量中断控制器(VIC)---结合s3c6410
(一)、首先说一下PL192向量中断控制器 一个中断控制器是用来处理多个中断源的外围设备,通常包含以下几个特性: 1.为每个中断源分配一个中断请求输入端口。为每个中断请求分配一个中断请求输出端口,以能连接到处理器的VIC端口。 其实手册上说的这么多,我感觉其实就是这样的:要保证每个中断都能: ************************************************ 中断源-------- PL192 VIC--------- 处理器VIC端口 *********************************************
[单片机]
ARM11---中断---向量中断控制器(VIC)---结合<font color='red'>s3c6410</font>
[MSP430] 3.UART
这一节我们将会看到如何在 MSP430 Launchpad 上使 用 UART 进行通信。我们的程序将会实现通过 UART 从 PC 读入一个字节的数据,然后发送相应的反馈字节给 PC。通信 模式为 115200 波特率,全双工,8 位数据,无奇偶校验,1 位停止位。 MSP430 G2553(Launchpad 使用的芯片)是 MSP430 家 族中比较给力的芯片,它集成了硬件 UART 模块。 UART 通信在处理/调试传感器的时候尤为有用,举一个简单的 例子,我们可以用温度传感器采集数据,经过 AD 转换之后通过 UART 发送给 PC,传送的方式可以是有线,也可以使用无线例如蓝牙。 让我们直接进入正题吧。
[单片机]
[MSP430] 3.<font color='red'>UART</font>
STM8--UART2
UART以一个起始位开始通信,起始方法是由TX引脚输出低电平。跟着起始位之后是要发送的8位或者9位数据,如果有奇偶校验则数据后面是奇偶校验的数据信息,最后是停止位,停止位可以设置为1,2,1.5个。 发送配置及单字节通信过程: 寄存器介绍: 控制寄存器 1(UART_CR1): 控制寄存器 2(UART_CR2): 控制寄存器 3(UART_CR3): 波特比率寄存器 1(UART_BRR1): 波特比率寄存器 2 (UART_B): 状态寄存器(UART_SR): 数据寄存器(UART_DR): 使用流程: 1:设置数据长度,奇偶效验,停止位
[单片机]
STM8--<font color='red'>UART</font>2
IAR调试S3C6410的笔记(四)
裸机环境已经搭建完毕,对于裸机调试来说少了中断怎么可以。S3C6410有硬件的中断控制器,不像2440那样需要自己计算中断函数的偏移地址,非常方便,具体的操作方法可以查看S3C6410的硬件手册。使能中断可以通过汇编语言来完成,IAR的代码如下: MODULE ?system_asm ;; Forward declaration of sections. SECTION IRQ_STACK:DATA:NOROOT(2) SECTION CSTACK:DATA:NOROOT(3) PUBLIC SYSTEM_EnableVIC PUBLIC SYSTEM_Disabl
[单片机]
NXP lpc11xx M0 UART程序详细注释
最实用UART 程序 有相关注释, 主要用于调试!! 看啦些许日子的 , 没见有人发,今天就给大家发个调试用的 UART 的程序 , 至于接收函数 , 论坛里的朋友可以自己做更改 改为 接收字节 可以控制的那种也行, 因为实用的关系, 看看还有什么东西可以调下的, 共同交流 感觉交流的不是很多的那种, 是什么原因有待。。。。。 程序简单, 共同交流 !! 大部分的都是源程序使用的, NXP弄的例程 都是标准的那种!! #include "LPC11xx.h" //芯片头文件 #include "uart.h" //串口头文件 #
[单片机]
mini2440裸机试炼之——Uart与pc端实现文件、字符传输
1、波特率(Baud rate)即调制速率,1波特即指每秒传输1个符号。 2、非FIFO模式,即传输数据不利用FIFO缓存,一个字节一个字节地传输。 3、接收到的数据是放到接收缓存器URXHn中,要发送数据时,是把数据放入发送缓存器UTXHn中。由于UART是通过字节方式传输数据的,因此要区分是大端模式还是小端模式,也就是说这两个寄存器在这两种模式下,所在的地址是不同。为了了解当前数据传输的各种状态,还需要一些状态寄存器。传输状态寄存器UTRSTATn非常有用,它的第0位可以用来判断接受缓存器内是否有可接收的数据,第1位和第2位可以用来判断发送缓存器中是否为空,为空时可以发送数据。由于在这里我们不进行传输数据时错误的判断,
[单片机]
mini2440裸机试炼之——<font color='red'>Uart</font>与pc端实现文件、字符传输
基于S3C6410的ARM11学习(六) 核心初始化之关闭所有中断
上一次,我们完成了核心初始化之关闭看门狗了。下面就要关闭所有中断了。因为这个时候还在初始化整个硬件环境,应用程序还没有开始跑,所以是不希望有中断产生来打断CPU工作的。 中断是嵌入式系统中很重要的东西了。因为有了这个东西,可以使CPU解放出来,做更多的事。 学单片机的时候,对于按键,我们可以采用轮询检测,隔一段时间就去检测看看按键有没有按下,有按下的话就进行处理。没有的话就跳过。而使用外部中断后,就不必检测了,外部中断会自动检测,就不用CPU检测了。当外部中断有效后,外部中断模块就会产生一个中断源给CPU,CPU检测到这个中断源,再去执行对应的中断处理函数。比轮询法效率要高很多了。 至于S3C6410的中断的具体的一些
[单片机]
基于<font color='red'>S3C6410</font>的ARM11学习(六) 核心初始化之关闭所有中断
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved