S3C2410的UART控制(RS232)

2024-02-05 20:58
文章标签 控制 uart s3c2410 rs232

本文主要是介绍S3C2410的UART控制(RS232),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

S3C2410的UART控制(RS232)

一、UART简介

 

       UARTUniversal Asynchronous Receiver/Transmitter)即通用异步收发传输器,工作于数据链路层。包含了RS232RS422RS485串口通信和红外(IrDA) 等等。UART协议作为一种低速通信协议,广泛应用于通信领域等各种场合。UART基本可分为并口通信及串口通信两种。

 

         异步串口通信协议作为UART的一种,工作原理是将传输数据的每个字符一位接一位地传输。

 

其中各位的意义如下:
起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。
资料位:紧接着起始位之后。资料位的个数可以是45678等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。
奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。
停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。
波特率:是衡量资料传送速率的指针。表示每秒钟传送的二进制位数。例如资料传送速率为120字符/秒,而每一个字符为10位,则其传送的波特率为10×1201200字符/秒=1200波特

 

2:RS-232简介

 

    RS-232串口通信是UART采用频繁的一种,一般的PC机上都带有两个基于RS-232的串口。

RS-232(ANSI/EIA-232标准)是IBM-PC及其兼容机上的串行连接标准。RS-232只限于PC串口和设备间点对点的通信。它有两种模式DB-9(9针接口) 和DB-25(25针接口),支持全双工通信。

      RS-232完成通信一般使用3根线:1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。其模型图(DB-9)如下:

                           

RS-232针脚的功能:

数据:                                           地线:
TXD(pin 3):串口数据输出(Transmitter)        GND(pin 5):地线
RXD(pin 2):串口数据输入(Receiver)


握手:
RTS(pin 7):发送数据请求
CTS(pin 8):清除发送
DSR(pin 6):数据发送就绪
DCD(pin 1):数据载波检测
DTR(pin 4):数据终端就绪


其他
RI(pin 9):铃声指示

 

3:握手协议
RS-232通行方式允许简单连接三线:Tx、Rx和地线。但是对于数据传输,双方必须对数据定时采用使用相同的波特率。尽管这种方法对于大多数应用已经足够,但是对于接收方过载的情况这种使用受到限制。这时需要串口的握手功能。RS-232有三种最常用握手形式:软件握手、硬件握手和Xmodem

对于软件握手和硬件握手就不做讨论,主要了解bootloader中用到的Xmodem传输协议

Xmodem

XMODEM协议是一种使用拨号调制解调器的个人计算机通信中广泛使用的异步文件运输协议。这种协议以128字节块的形式传输数据,并且每个块都使用一个校验和过程来进行错误检测。如果接收方关于一个块的校验和与它在发送方的校验和相同时,接收方就向发送方发送一个认可字节。然而,这种对每个块都进行认可的策略将导致低性能,特别是具有很长传播延迟的卫星连接的情况时,问题更加严重。

4:S3C2410中UART的数据资料

S3C2410中提供三个独立的异步收发串口,能运转在中断或DMA模式下。系统支持最高波特率 230.4K bps,每个UART 信道都包含两个16位的FIFOs(first in first out)用于收发。每个串口都包含可编程的波特率,红外收发,1~2个停止位,5~8个数据位,和奇偶校正位,UART由波特率发生器,收发单位和控制单元构成。

自动控制流模式(AFC)

S3C2410UART0和UART1都可以通过各自的nRTS和nCTS信号来实现自动流控。

禁止自动流控制可以通过写UMCONn register and control the signal of nRTS by software
在自动流控(AFC)模式下nRTS取决于接收端的状态,而nCTS控制了发送端的操作。具体地说:只有当nCTS有效时(表明接收方的FIFO已经准备就绪来接收资料了),UART才会将FIFO中的资料发送出去。在UART接收资料之前,只要当接收FIFO有至少2-byte空余的时候,nRTS就会被置为有效。

NOTE: UART 2 does not support AFC function, because the S3C2410X has no nRTS2 and nCTS2

中断/DMA请求产生
S3C2410
的每个UART都有7种状态,分别是:溢出覆盖(Overrun)错误、奇偶校验错误、帧出错、断线错误、接收就绪、发送缓冲空闲、发送移位器空闲。它们在UART状态寄存器 UTRSTATn / UERSTATn 中有相应的标志位。

发送模式选择        [3:2]    00 = Disable

                                     01 = Interrupt request or polling mode

                                     10 = DMA0 request (Only for UART0),

                                     DMA3 request (Only for UART2)

                                      11 = DMA1 request (Only for UART1)

 

接收模式选择         [1:0]  00 = Disable

                                        01 = Interrupt request or polling mode

                                       10 = DMA0 request (Only for UART0),

                                       DMA3 request (Only for UART2)

                                       11 = DMA1 request (Only for UART1)

 

3:UART FIFO CONTROL REGISTER

选择发送FIFO的触发水平[7:6]  00 = Empty 01 = 4-byte
                                             10 = 8-byte 11 = 12-byte

选择接收FIFO的触发水平 [5:4]  00 = 4-byte 01 = 8-byte
                                             10 = 12-byte 11 = 16-byte

Reserved          [3]

选择当复位发送FIFO时是否自动清除FIFO中的内容

                       [2] 0 = Normal 1= Tx FIFO reset

选择当复位接收FIFO时是否自动清除FIFO中的内容

                       [1]  0 = Normal 1= Rx FIFO reset

FIFO使能选择  [0]  0 = Disable 1 = Enable 0


 

4:UART MODEM CONTROL REGISTER(UART2不支持AFC)

 

Reserved                    [7:5]          保留位但必须为 000

自动控制流使能选择: [4]        0 = Disable 1 = Enable 0

Reserved                    [3:1]           保留位必须位000              

接收请求位选择          [0]          如果AFC使能该位被忽视,那种情况下S3C2410X UART接收由nRTS自动控制,但是如果AFC禁止,  nRTS 必须由该位设置

                                                0 = 'H' level (Inactivate nRTS) 1 = 'L' level (Activate nRTS)

 

5:UART TX/RX STATUS REGISTER

Transmitter empty      [2] 当发送缓冲器中已经没有有效资料时,自动置“1”;反之表明尚有资料未发送

 

Transmit buffer empty [1] 当发送缓冲寄存器中为空,自动置“1”;反之表明缓冲器中正有资料等待发送

 

Receive buffer data ready [0]  当接收缓冲寄存器从UART接收端口接收到有效资料时将自动置“1”。反之为“0”则表示缓冲器中没有资料

 

 

6:UART ERROR STATUS REGISTER(初始时其自动为【3:0】=0000)

Reserved  [3]  保留位

帧错误     [2]  自动置1当发生帧错误

                   

Reserved [1] 保留位

溢出中断 [0] 如果发生溢出错误自动置1

 

 

7:UART FIFO STATUS REGISTER

 

Reserved            [15:10] 保留位

Tx FIFO Full       [9] 为“1“表明接收FIFO已满

Rx FIFO Full       [8] 为“1“表明接收FIFO已满

Tx FIFO Count    [7:4] 发送FIFO中当前存放的字节数
Rx FIFO Count   [3:0] 接收FIFO中当前存放的字节数

 

8:UART MODEM STATUS REGISTER

 

Reserved         [3]     保留

Delta CTS        [2]    指示自从上次CPU访问该位后,nCTS的状态有无发生改变。
为“0”则说明不曾改变;反之表明nCTS信号已经变化了

Clear to Send   [0]    为“0”表示CTS无效;为“1”表示CTS有效

 

 

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

10:UBRDIVn :(UART Baud Rate Divisor Register)

 
关于UART波特率的计算方法,在前面的内容中已经有详细的阐述,此处不做多余说明。

小结读写状态寄存器UTRSTAT 以及错误状态寄存UERSTAT,可以反映芯片目前的读写状态以及错误类型。FIFO 状态寄存器UFSTAT 和MODEM 状态寄存器UMSTAT,通过前者可以读出目前FIFO 是否满以及其中的字节数;通过后者可以读出目前MODEM 的CTS状态

 

 原文地址 http://blog.chinaunix.net/u1/58203/showart_492196.html

这篇关于S3C2410的UART控制(RS232)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682145

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Spring IOC控制反转的实现解析

《SpringIOC控制反转的实现解析》:本文主要介绍SpringIOC控制反转的实现,IOC是Spring的核心思想之一,它通过将对象的创建、依赖注入和生命周期管理交给容器来实现解耦,使开发者... 目录1. IOC的基本概念1.1 什么是IOC1.2 IOC与DI的关系2. IOC的设计目标3. IOC