S5PV210 串口设置与实验(轮询方式)

S5PV210 UART 相关说明

通用异步收发器简称 UART, 即 UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来传输串行数据。发送数据时, CPU 将并行数据写入 UART,UART 按照一定的格式在一根电线上串行发出;接收数据时, UART 检测另一根电线的信号,将串行收集在缓冲区中, CPU 即可读取 UART 获得这些数据。

在 S5PV210 中, UART 提供了 4 对独立的异步串口 I/O 端口,有 4 个独立的通道,每个通道可以工作于 DMA 模式或者中断模式。其中,通道 0 有 256byte 的的发送 FIFO 和 256byte 的接收 FIFO,通道 1 有 64byte 的的发送 FIFO 64byte 的接收 FIFO,而通道 2 和 3 只有 16byte 的的发送 FIFO 和 16byte 的接收 FIFO。

S5PV210 的 UART 结构图如下:

串口初始化程序

void uart_init()
{
    /* 1 配置引脚用于 RX0/TX0 功能 */
    GPA0CON = 0x22;

    /* 2 设置数据格式等 */
    UFCON0 = 0x1;   // 使能 FIFO
    UMCON0 = 0x0;   // 无流控
    ULCON0 = 0x3;   // 数据位:8, 无校验, 停止位: 1
    UCON0 = 0x5;    // 时钟: PCLK,禁止中断,使能 UART 发送、接收

    /* 3 设置波特率 */
    UBRDIV0 = UART_UBRDIV_VAL;     // 34
    UDIVSLOT0 = UART_UDIVSLOT_VAL; // 13
}

程序分析:

第一步 配置引脚用于 RX0/TX0 功能

GPA0CON 寄存器如下图所示:

配置 GPA0CON = 0x22。

第二步 设置数据格式

ULCON0 寄存器如下图所示:

Word Length = 11,8bit 的数据;
Number of Stop Bit = 0,1bit 的停止位;
Parity Mode = 000,无校验;
Infrared Mode =0,使用普通模式;
所以 ULCON0 = 0x3。

第三步 配置 UART

UCON0 寄存器如下图所示:


Receive Mode = 01 ,使用中断模式或者轮询模式;
Transmit Mode = 01,使用中断模式或者轮询模式;
Send Break Signal = 0,普通传输;
Loop-back Mode = 0,不使用回环方式;
我们采用轮询的方式接受和发送数据,不使用中断,所以 bit[6-9]均为 0;
Clock Selection = 0,使用 PCLK 作为 UART 的工作时钟;
我们不使用 DMA,所以 bit[16]和 bit[20]均为 0;
所以 UCON0 = 0x5。

第四步 UFCON0 和 UMCON0

这两个寄存器比较简单, UFCON0 用来使能 FIFO, UMCON0 用来设置无流控。

第五步 设置波特率

主要是配置如下两个寄存器:

波特率设置相关公式:

UBRDIVn + (UDIVSLOTn)/16 = (PCLK / (bps x 16)) ?1

UART 工作于 PSYS 下,所以 PCLK 即 PCLK_PSYS = 66MHz,我们的波特率 bps 设置为 115200,所以

(66MHz/(115200 x 16)) – 1 = 34.80 = UBRDIVn + (UDIVSLOTn)/16

所以,设置 UBRDIV0 = 34,UDIVSLOT0 = 13。

轮询方式接收和发送一个字符

/* 接收一个字符 */
char getc(void)
{
    while ((UFSTAT0 & 0xff) == 0); // 如果 RX FIFO 空,等待
    return URXH0; // 取数据
}
/* 发送一个字符 */
void putc(char c)
{
    while (UFSTAT0 & (1<<24)); // 如果 TX FIFO 满,等待
    UTXH0 = c; // 写数据
}

通过读 UFSTAT0 发送/接收状态寄存器,当 Rx FIFO Count 不为 0 时说明接收到数据,读 URXH0 寄存器可以得到 8bit 的数据; 当 Tx FIFO Full = 0 时说明可以发送数据,写 8bit 的数据到 UTXH0。

UFSTAT0 寄存器如下图所示:

所做修改

在《友善之臂210手册》中,讲解的是通过 UTRSTAT0 这个 buffer state reg 来查看当前的状态,因为我们采用的 FIFO模式,并且 UTRSTAT0 与程序所用 Reg 也不符,所以手册中显然是错误的,我们写的分析是修改过的。(可能我参考的手册并不是友善之臂的最新版,没有检察出有此处小错误)

本篇文章参考:《友善之臂210手册》

原文地址:https://www.cnblogs.com/GyForever1004/p/8448288.html

时间: 2024-11-13 04:32:30

S5PV210 串口设置与实验(轮询方式)的相关文章

Cacti的设置以及Spine轮询器

Cacti的设置 接着上一篇的cacti系列讲解,在配置选项中有两个子项目,Settings和Plugin Management.我们点击Settings后,出现以下界面. 我们看到上图中,箭头指向的地方,我们可以针对这些项目进行设置. 首先我们看一下"General",通用配置,配置的内容主要有以下几项 日志 SNMP相关的设置 其他配置 其实这里基本上不需要进行修改,保持默认的配置即可.如果需要修改,也就是"Required Tool Versions"和&qu

ASP.NET使用Jquery LigerUI 轮询方式配合Ajax实现消息推送

轮询是在客户端建立一个时钟,每隔一段时间对服务器发送一次请求,获取服务器数据,是实现消息推送最简单最易实现的一种方式,最大的缺点浏览器需要不断的向服务器发出请求,这样会占用很多的带宽,造成资源浪费 下面是JS代码: 1 $(document).ready(function () { 2 setInterval(invoke, 20000); 3 }); 4 function invoke() { 5 var xhr = $.ajax({ 6 type: "POST", 7 dataTy

S5PV210 串口实验(中断方式)

结合之前的串口实验(轮询方式)与中断体系分析,我们来做下中断方式的串口接收实验. start.S .global _start .global IRQ_handle _start: /* 关 Watch Dog */ ldr r0, =0xE2700000 mov r1, #0 str r1, [r0] /* 设置系统模式栈指针 */ ldr sp, =0x40000000 /* 开 IRQ 总中断开关 */ mov r0, #0x53 msr CPSR_cxsf, r0 /* 时钟初始化 */

STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信.但在实际项目中作为I2C从机的应用相对要少的多,本文主要讲述关于[STM32F10x_硬件I2C主从通信]中STM32作为从机的例子. 在学习本问内容之前,如果对I2C协议还不太了解的朋友请先去了解一下I2C协议,或看我之前关于I2C通信的文章(我微信公众号和博客都有). 关于STM32硬件I2C作

HTTP协议中的短轮询、长轮询、长连接和短连接

HTTP协议中的短轮询.长轮询.长连接和短连接 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短. 了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解.如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下. 以前的误解 很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协

负载均衡手段之DNS轮询

大多数域名注册商都支持对统一主机添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡.下图的例子是:有3台联通服务器.3台电信服务器,要实现"联通用户流量分摊到3台联通服务器.其他用户流量分摊到电信服务器"这个效果的设置. DNS由于成本较低,所以一般在小型的网站用的比较多.但是大型的网站一般也会将用它和其他负载均衡的方式结合起来一起使用,DNS轮询方式提供的IP地址,在大型网站中往往是一个集群的地址,可能是均衡交

误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短. 了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解.如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下. 以前的误解 很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默

HTTP的长短连接、长短轮询的区别(转载)

引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短. 了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解.如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下. 以前的误解 很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默

负载均衡之DNS轮询

大多数域名注册商都支持对统一主机添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡.下图的例子是:有3台联通服务器.3台电信服务器,要实现“联通用户流量分摊到3台联通服务器.其他用户流量分摊到电信服务器”这个效果的设置. DNS由于成本较低,所以一般在小型的网站用的比较多.但是大型的网站一般也会将用它和其他负载均衡的方式结合起来一起使用,DNS轮询方式提供的IP地址,在大型网站中往往是一个集群的地址,可能是均衡交换机也可能