03:2440--UART

目录

一:UART

1:概念

2:工作模式

3:逻辑电平

4:串口结构图

5:时间的计算

二:寄存器

1:简单的UART传输数据

A:GPHCON--配置引脚  

B:GPHUP----使能内部上拉​编辑

C: UCON0---设置频率115200

D: ULCON0----数据格式8n1

E:发送数据

A:UTRSTAT0

B:UTXHO--发送数据输缓冲寄存器

F:接收数据

A:UTRSTAT0​​​​​​​

B:URXH0 ---接收缓冲区寄存器

三:代码

1:UART的简单实现


一:UART

1:概念

        S3C2440A通用异步收发器(UART)提供三个独立的异步串行I/O (SIO)端口,每个端口都可以在基于中断或基于dma的模式下工作。换句话说,UART可以生成中断或DMA请求来在CPU和UART之间传输数据。使用系统时钟,UART可以支持高达921.6Kbps的波特率。如果外部设备为UART提供UEXTCLK,则UART可以以更高的速度运行。每个UART信道包含两个64字节的fifo,分别用于接收和发送。

        S3C2440A UART包括可编程波特率,红外(IR)发送/接收,一个或两个停止位插入,5位,6位,7位或8位数据宽度和奇偶校验。

        每个UART包括波特率发生器、发送器、接收器和控制单元。波特率发生器可以通过PCLK, FCLK/n或UEXTCLK(外部输入时钟)进行时钟。

        发射器和接收器包含64字节的fifo和数据移位器。数据被写入FIFO,然后在传输之前复制到传输移位器。然后通过传输数据引脚(TxDn)将数据移出。同时,接收数据从接收数据引脚(RxDn)转移,然后从移位器复制到FIFO。

        1:波特率 : 双方约定每一位占用的时间

        2:格式 : 数据位, 停止位, 校验位, 流量控制

        校验分为奇校验和偶校验, 以前的电解技术没有那么稳定, 使用采用了;  不过现在使用比较少;

        

        数据位+校验位为 " 1"的个数

eg: 数据位为8位--0001 0001 --采用奇校验 使用校验位为1;   3个1所以是奇校验

       如果采用偶校验,  校验位为0----2个1就是偶校验 

        作用 :  串口不仅可以为我们打印调式信息, 还可以连接需要外设模块,  实现之间的通信 (GPS, 蓝牙,  mpu6050......)

       这个和STM32发送的基本一样详情可以参考我的 : 09:STM32-------USART串口通信+串口数据包

2:工作模式

假设2440现在需要向外面的pc端口发送一个数据,  他的工作模式如下

发送 "A" 0x41 0b0100 0001

2440向pc段发送数据  

        A : 首先逻辑电平是高电平

        B : ARM被拉低(开始位)---告诉pc段我要开始发送数据了;  在这里会停留1bit的时间,  也就是我们双方约定的波特率.

        C:通过拉低逻辑电平电平的方式传输数据.  每一位停留一个波特率的时间.  一般数据为采用8位

        D:在一个数据位发送介绍拉高电平告诉, pc段我们发送完了

pc段读取数据:

        在数据位中间的位置开始读取数据

3:逻辑电平

        TTL电平传输方式-----我们2440采用的就是这种的传输方式;      当电平高在某一个范围的时候他就会被判定位高电平, 同理在电平低于某一个范围的时候被判定为低电平. 

          RS232电平传输----我们pc段采用这种方式的传输

2种不同的电平协议是不能相互传输数据的,  我们的2440添加了电平转化芯片或者USB串口芯片. 

原理图:

        可以看到我们引脚需要我们的配置, 来把他变为发送和接收引脚.  而不是普通的GPIO口

4:串口结构图

简单理解:

2440向pc段发送数据:

          A:FIFO会向内存中取到需要发送的数据

          B:在这个UART单元中FIFO把数据发送到移位器里面去,  移位器通过逐步发送,把数据发送到了pc段.

pc段向2440发送数据:

        A:pc段把数据发送给我移位器, 移位器逐步接收.

        B:移位器再把数据发送给我FIFO, FIFO,  程序从FIFO把数据取出来写入内存. 

可以使用中断或者不断查看标志位的方式来查看数据是否发送完毕.

5:时间的计算

二:寄存器

1:简单的UART传输数据

A:GPHCON--配置引脚  

        注意我们使用的发送和接收的是0号,  在下面选择寄存器是也应该选择0号.

        可以看到了我们需要把GPH2 GPH3配置使他为发送和接收引脚,  而不是普通的GPIO口

GPHCON &= ~((3 << 4) | (3 << 6));
GPHCON |= ((2 << 4) | (2 << 6));

B:GPHUP----使能内部上拉

	GPHUP &= ~((1 << 2) | (1 << 3));  /* 使能内部上拉 */

把GPH2和GPH3的接收引脚上拉

C: UCON0---设置频率115200

UART块中有三个UART控制寄存器,包括UCONO、UCON1和UCON2。

        时钟我们选择默认的PCLK时钟----在上一节中我们调节PCLK的频率为50MHZ

        UBRDIVn = (int)(selected clock / (baudrate x 16) ) –1

        我们使用我们的FCLK作为我们的时钟源--在汇编中是50MHZ

        UBRDIVn=(5000 0000 /(115200*16))-1=26

UBRDIV0 = 26;

        我们只需要最简单的实现---所以只有打开发送和接收模式

UCON0 = 0x00000005;

全部代码----实现了频率为11520, 打开接收和发送模式

UCON0 = 0x00000005;
UBRDIV0 = 26;

D: ULCON0----数据格式8n1

/*数据格式*/ULCON0 = 0x00000003;  //不能写为这个ULCON0 |= (3 << 1)因为还要关注其他位;/*数据位=8,停止位=1,无奇偶校验 8n1*/

E:发送数据

A:UTRSTAT0

        发射机空;    当传输缓冲寄存器没有有效数据要传输且传输移位寄存器为空时,自动设置为1。

0 =不空        1=发射机(传输缓冲区和移位寄存器)空

while ((UTRSTAT0 & (1 << 2)) == 0); //while (!(UTRSTAT0 & (1 << 2)));
B:UTXHO--发送数据输缓冲寄存器

        在UART块中有三个UART传输缓冲寄存器,包括UTXHO、UTXH1和UTXH2。UTXHn有一个8位的数据用于传输数据。

return URXH0;

全部代码

while ((UTRSTAT0 & (1 << 2)) == 0); //while (!(UTRSTAT0 & (1 << 2)));UTXH0 = (unsigned char)c;

F:接收数据

A:UTRSTAT0
	while ((UTRSTAT0 & (1 << 0)) == 0); //while (!(UTRSTAT0 & (1 << 0)));
B:URXH0 ---接收缓冲区寄存器

        在UART块中有三个UART接收缓冲区寄存器,包括URXHO, URXH1和URXH2。URXHn对接收的数据有一个8位的数据。

return URXH0

全部代码

while ((UTRSTAT0 & (1 << 0)) == 0); //while (!(UTRSTAT0 & (1 << 0)));
return URXH0;

全部的代码见---三:代码 1:UART的简单实现

三:代码

1:UART的简单实现

#include "sc2440_so.h"
/*在UART块中有三个UART线路控制寄存器,包括ULCONO、ULCON1和ULCON2。我们使用的是--ULCONO*/
//115200 8n1
void UART_init()
{/*引脚设置*/GPHCON &= ~((3 << 4) | (3 << 6));GPHCON |= ((2 << 4) | (2 << 6));GPHUP &= ~((1 << 2) | (1 << 3));  /* 使能内部上拉 *//*设置波特率---设置波特率位115200*//*UBRDIVn = (int)(selected clock / (baudrate x 16) ) –1我们使用我们的FCLK作为我们的时钟源--在汇编中是50MHZUBRDIVn=(5000 0000 /(115200*16))-1=26*/UCON0 = 0x00000005;UBRDIV0 = 26;/*数据格式*/ULCON0 = 0x00000003;  //不能写为这个ULCON0 |= (3 << 1)因为还要关注其他位;/*数据位=8,停止位=1,无奇偶校验 8n1*/
}
int putchar(int c)
{/*发送数据*/while ((UTRSTAT0 & (1 << 2)) == 0); //while (!(UTRSTAT0 & (1 << 2)));UTXH0 = (unsigned char)c;
}int getchar(void)
{/*接收数据*/while ((UTRSTAT0 & (1 << 0)) == 0); //while (!(UTRSTAT0 & (1 << 0)));return URXH0;
}int puts(const char* s)
{while (*s){putchar(*s);s++;}}
#ifndef __UART_H
#define __UART_Hvoid UART_init();
int putchar(int c);
int getchar(void);
int puts(const char* s);#endif

#ifndef __SC2440_SO_H
#define __SC2440_SO_H#define ULCON0 (*((volatile unsigned int*)0x50000000))
#define UCON0 (*((volatile unsigned int*)0x50000004))
#define UBRDIV0 (*((volatile unsigned int*)0x50000028))
#define GPHCON (*((volatile unsigned int*)0x56000070))
#define GPHUP (*((volatile unsigned int*)0x56000078))
#define UFCON0 (*((volatile unsigned int*)0x50000008))
#define UTRSTAT0 (*((volatile unsigned int*)0x50000010))
#define UTXH0 (*((volatile unsigned char*)0x50000020))
#define URXH0 (*((volatile unsigned char*)0x50000024))#endif

#include "uart.h"
#include "sc2440_so.h"
int main(void)
{unsigned char c;UART_init();puts("Hello, world!\n\r");while (1){c = getchar();if (c == '\r'){putchar('\n');}if (c == '\n'){putchar('\r');}putchar(c);}return 0;
}

分析makefile文件

我们要使用makefile文件交叉编译来生成bin文件

all:arm-linux-gcc -c -o uart.o uart.carm-linux-gcc -c -o main.o main.carm-linux-gcc -c -o start.o start.Sarm-linux-ld -Ttext 0 start.o  uart.o main.o -o uart.elfarm-linux-objcopy -O binary -S uart.elf uart.binarm-linux-objdump -D uart.elf > uart.dis
clean:rm *.bin *.o *.elf *.dis

        A: 先把所以的c语言和汇编语言全部, 编译为.o文件

        B:链接: 这是一个链接命令,用于将三个目标文件(start.o、uart.o、main.o)链接成一个可执行文件(uart.elf)。其中-Ttext 0指定了链接地址的起始地址为0,start.o是程序的入口地址。这个命令会将三个目标文件中的符号解析出来,并将它们放到正确的位置上,生成可执行文件

        C:这个命令的作用是将uart.elf文件转换为uart.bin文件。其中,-O binary表示输出格式为二进制文件,-S表示去掉所有的符号信息。这个命令通常用于将可执行文件转换为裸机程序,以便在嵌入式系统中运行。(把连接生成的elf文件转换为单板使用的bin文件)

        D:对连接生成的elf文件进行反汇编,调试错误时用。生成.dis文件

1:UART每发送完一个数据发送停止位, 还是发送完想要发送的数据在发送停止位?

        根据引用中的定义,UART协议的数据传输包括起始位、数据位和终止位。其中,起始位是低电平,终止位是高电平。在UART发送一段数据时,每个数据字节后面都会跟随一个停止位。停止位的数量取决于UART协议的设置,通常为1个或2个。因此,UART发送一段数据,一共发送的停止位数量为1个或2个,具体取决于UART协议的设置

2:UART发送数据是发送完毕,接收端在读取, 还是一边发送, 接收端一边读取

        根据提供的引用内容,UART是一种通用异步接收器/发送器,其主要目的是发送和接收串行数据。在UART发送数据时,数据包以串行方式从发送UART送至接收UART,接收UART以预配置的波特率对数据线进行采样。因此,在UART发送数据时,接收端需要一边接收一边读取数据,否则数据将会丢失

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170175.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0到0.01入门 Webpack| 004.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

ref详解(C#)

本质上来说 ref 的就是把 C/C 指针的那一套又拿回来了&#xff0c;而且还封装成一套自己的玩法。 我想设计者的初心把 ref 的功能限制得死死的&#xff0c;可能也考虑到 C# 是一门面向业务开发的语言&#xff0c;讲究的是做项目快狠准&#xff0c;性能反而不是第一要素&#x…

当你准备开始学习 Java 时,确保已完成以下准备工作,安装Java开发环境并验证通过。

当你准备开始学习 Java 时&#xff0c;确保已完成以下准备工作&#xff1a; a. 安装Java开发环境 下载Java Development Kit (JDK)&#xff1a; 访问Oracle官方网站&#xff0c;选择适用于你操作系统的JDK版本&#xff0c;点击下载。 安装JDK&#xff1a; 下载完成后&#xf…

3.1 CPU内部结构与时钟与指令

CPU内部结构 总线一些自定义部件总线图内存指令执行流程:取指令,译码,执行pc做的事内存地址寄存器内存缓存寄存器指令寄存器,译码第一步指令寄存器传递地址到内存地址寄存器指令MOV_A的过程(译码第二步)第一条指令执行完毕第三条指令的执行第四条指令第四条指令不同的执行流程…

基于python+TensorFlow+Django算法模型的车辆车型识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介简介技术栈主要模块1. 数据预处理2. 模型构建3. 模型训练4. 模型集成5. 用户界面 系统工作流程未来改进计划 二、功能三、系统四. 总结 一项目简介 # 车辆车…

深信服实验学习笔记——nmap常用命令

文章目录 1. 主机存活探测2. 常见端口扫描、服务版本探测、服务器版本识别3. 全端口&#xff08;TCP/UDP&#xff09;扫描4. 最详细的端口扫描5. 三种TCP扫描方式 1. 主机存活探测 nmap -sP <靶机IP>-sP代表 2. 常见端口扫描、服务版本探测、服务器版本识别 推荐加上-v参…

DNS/ICMP协议、NAT技术

目录 DNS协议DNS背景域名简介 ICMP协议ICMP功能ping命令traceroute命令 NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器 网络协议总结应用层传输层网络层数据链路层 DNS协议 DNS&#xff08;Domain Name System&#xff0c;域名系统&#xff09;协议&…

基于51单片机的公交自动报站系统

**单片机设计介绍&#xff0c; 基于51单片机的公交自动报站系统 文章目录 一 概要公交自动报站系统概述工作原理应用与优势 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 很高兴为您介绍基于51单片机的公交自动报站系统&#xff1a; 公交自动报…

吉他初学者学习网站搭建系列(1)——目录

文章目录 背景文章目录功能网站地址网站展示展望 背景 这个系列是对我最近周末搭建的吉他工具类平台YUERGS的总结。我个人业余爱好是自学吉他&#xff0c;我会在这个平台中动手集成我认为很有帮助的一些工具&#xff0c;来提升我的吉他水平和音乐素养&#xff0c;希望也可以帮…

【Linux】指令详解(三)

目录 1. 前言2. 常见指令2.1 重定向2.1.1 >2.1.2 >>2.1.3 < 2.2 与文件有关指令2.2.1 more2.2.2 less &#xff08;推荐使用&#xff09;2.2.3 head2.2.4 tail2.2.5 wc2.2.6 | 2.3 find2.4 grep 3. 时间相关的指令3.1 data3.2 时间戳3.3 cal 4. zip/unzip 1. 前言 …

rsyslog学习

rsyslog是什么 RSYSLOG&#xff08;Remote System Logging&#xff09;是一个开源的日志处理工具&#xff0c;用于在 Linux 和 Unix 系统上收集、处理和转发日志。它是一个健壮且高性能的日志处理程序&#xff0c;可以替换 Syslogd 作为标准的系统日志程序。RSYSLOG 提供了许多…

力扣学习笔记——239. 滑动窗口最大值

力扣学习笔记——239. 滑动窗口最大值 题目描述 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输…

第96步 深度学习图像目标检测:FCOS建模

基于WIN10的64位系统演示 一、写在前面 本期开始&#xff0c;我们继续学习深度学习图像目标检测系列&#xff0c;FCOS&#xff08;Fully Convolutional One-Stage Object Detection&#xff09;模型。 二、FCOS简介 FCOS&#xff08;Fully Convolutional One-Stage Object D…

Javaweb之Vue组件库Element的详细解析

4 Vue组件库Element 4.1 Element介绍 不知道同学们还否记得我们之前讲解的前端开发模式MVVM&#xff0c;我们之前学习的vue是侧重于VM开发的&#xff0c;主要用于数据绑定到视图的&#xff0c;那么接下来我们学习的ElementUI就是一款侧重于V开发的前端框架&#xff0c;主要用…

两年功能五年自动化测试面试经验分享

最近有机会做一些面试工作&#xff0c;主要负责面试软件测试人员招聘的技术面试。 之前一直是应聘者的角色&#xff0c;经历了不少次的面试之后&#xff0c;多少也积累一点面试的经验&#xff0c;现在发生了角色转变。初次的面试就碰到个工作年限比我长的&#xff0c;也没有时…

【数据结构实验】排序(一)冒泡排序改进算法 Bubble及其性能分析

文章目录 1. 引言2. 冒泡排序算法原理2.1 传统冒泡排序2.2 改进的冒泡排序 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果5. 实验结论 1. 引言 排序算法是计算机科学中一个重要而基础的研究领域&…

AndroidStudio2022.3.1 Patch3使用国内下载源加速

记录一下这个版本的as在使用国内下载源加速碰到的诸多问题。 一、gradle-8.0-bin.zip下载慢 编辑项目文件夹/gradle/wrapper/gradle-wrapper.properties&#xff0c;文件内容改为如下&#xff1a; #Fri Nov 24 18:50:06 CST 2023 distributionBaseGRADLE_USER_HOME distribu…

井盖位移传感器怎么监测井盖安全

井盖在城市基础设施建设中扮演着不可或缺的角色&#xff0c;虽然看似并不起眼但确实是城市规划中一个重要的组成部分。在城市规划建设之初都需要首先考虑排水系统的设计&#xff0c;而井盖作为排水系统的一个重要组成部分&#xff0c;一旦出现问题便会造成交通中断或者环境受影…

1panel可视化Docker面板安装与使用

官网地址1Panel - 现代化、开源的 Linux 服务器运维管理面板 文章目录 目录 文章目录 前言 一、环境准备 二、使用步骤 1.安装命令 2.一些命令 3.使用 总结 前言 一、环境准备 虚拟机centos 已经安装好docker和 Docker Compose 或者都没安装 1panel会帮你自动安装 二、使用…

【腾讯云云上实验室】向量数据库相亲社交应用实践

快速入口 &#x1f449;向量数据库_大模型知识库_向量数据存储_向量数据检索- 腾讯云 (tencent.com) 文章目录 前言1. 向量数据库概念及原理1.1 向量数据库概念1.2 向量数据库核心原理1.3 向量数据库优缺点1.4 向量数据库与传统数据库的区别 2. 腾讯云向量数据库的基本特性及优…