UART配置流程

news2024/9/27 20:29:42

        S3C2440A 的通用异步收发器(UART)配有3 个独立异步串行I/O(SIO)端口,每个都可以是基于中断或基于DMA 模式的操作。换句话说,UART 可以通过产生中断或DMA 请求来进行CPU 和UART 之间的数据传输。UART 通过使用系统时钟可以支持最高115.2Kbps 的比特率。如果是外部器件提供UEXTCLK 的UART,则UART可以运行在更高的速度。每个UART 通道包含两个的64 字节的FIFO 给发送和接收。

        作为最基本的外设,S3C2440A 的通用异步收发器(UART )配有3 个独立异步串行I/O 端口。不同于51,2440的每个UART均不占用定时器来产生波特率。并且每个UART都拥有一个独立用于收发的缓冲区FIFO。本节我们就使用mini2440携带的uart0,实现一个与pc双向通信的串口程序。实现波特率为9600,n,8,1。为了方便,本次实验不使用FIFO。

FIFO模式中,缓冲寄存器的64字节都用于FIFO寄存器。

非FIFO模式中,只有1个字节用于保持寄存器。

        上图所示的外设总线是指地址控制总线,也就是我们访问寄存器时使用的地址转换为实际信号的总线。通过该总线可以访问到控制单元,其实就是之后我们要用的一堆寄存器。它们可以用来控制波特率发生器,读取收到的数据,写入我们要发送的数据。数据进入发送保持寄存器之后,会自动进入发送位移器,然后数据就按照串口通信的时序从硬件引脚上逐次发送出去了。

上图UART线路控制寄存器ULCONn决定通信所需的奇偶校验位、数据位、停止位等信息。红外模式是2440专门为红外设备设计的,这里我们使用普通模式。

UART控制寄存器是一个非常重要的寄存器,内容比较多,而且中文手册不全。我们参考英文手册并从后向前分析这个寄存器的作用。

UART控制寄存器的低四位用于指定串口收发时的工作方式,分别是不使能接收,中断或查询方式和DMA方式。这里我们不用DMA方式,并且还要允许接收,自然是设置为01了。[3:2]两个比特于此类似,不过是用于设置发送的。之后我们将模仿在51中的做法,用查询方式发送,用中断方式接收。

UART控制寄存器UCONn的4~9位就比较简单了,分别设置为正常传输、正常操作、不产生接收错误状态中断和脉冲方式。使用脉冲而不是电平很显然是因为不能在正在收数据的时候产生中断,而是应该在数据接收完整之后再产生中断。

UART控制寄存器UCONn的10~15比特看着很复杂的样子,起始这一块主要是用于设置波特率的。[11:10]用于选择uart的时钟源的。分别是PCLK,UEXTCLK和FCLK。这里的UEXTCLK指的是外部时钟,PCLK和FCLK在时钟配置主题中我们设置成了400M和50M。一旦时钟被选择,那么波特率就可以通过公式(int)( 被选时钟/ (波特率* 16)) – 1来计算,并将这个公式计算的结果存入UBRDIVn寄存器。比如我们选择使用PCLK,即50M,波特率为9600,那么公式计算的结果就是324.52,取整得325,把这个数存到UBRDIVn波特率就设置好了,简直不要太方便。如果我们把uart的时钟设置为FCLK,那么uart的实际工作频率就由该寄存器的[15:12]决定,有兴趣的读者可以自行尝试。

uart状态寄存器是用来查询uart的状态的,第2比特可用于判断数据是否发送完毕,类似于51的RI,同理,第1比特和第2比特的区别在于一个是位移寄存器为空,另外一个是位移寄存器不一定为空。


发送数据缓冲寄存器:类似51的SUBF寄存器,要发送的数据写入这个寄存器,2440会自动把数据放入位移寄存器发送。

    接收缓冲寄存器:接收到的数据从这个寄存器读出来。


波特率分频寄存器用于保存我们计算好的那个初值。上面说过,这个初值在9600下是325。
此外,由于需要使用引脚产生实际信号,UART对应的GPIO也要设置好;在数据接收时需要使用中断,所以相关的中断也要配置好。UART在中断设置方面需要注意的是UART中断有子终端掩码和子终端挂起寄存器。因此在设置和处理中断时要加以处理。

至此,时钟的配置已经完成。

void init_uart0(void)
{
	unsigned int t;
	
	GPHCON &= ~(0x0F << 4);
	GPHCON |= (2 << 4) | (2 << 6);

	t = ULCON0;
	t &= ~((1 << 6) | (7 << 3) | (1 << 2)) ;
	t |= (3 << 0);
	ULCON0 = t;

	t = UCON0;
	t &= ~((3 << 10) | (3 << 8) | (0x0F << 4));
	t &= ~(0x0F << 0);
	t |= (1 << 2) | (1 << 0);
	UCON0 = t;

	UBRDIV0 = 325;
	INTSUBMSK &= ~(1 << 0);
	enable_irq(28);
	register_irq(28, uart0_handler);
	
	pos = 0;
}

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

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

相关文章

网络安全 DVWA通关指南 DVWA Weak Session IDs(弱会话)

DVWA Weak Session IDs&#xff08;弱会话&#xff09; 文章目录 DVWA Weak Session IDs&#xff08;弱会话&#xff09;Low LevelMedium LevelHigh LevelImpossible Level 参考文献 WEB 安全靶场通关指南 相关阅读 Brute Force (爆破) Command Injection&#xff08;命令注入…

Kafka学习笔记(一)Kafka基准测试、幂等性和事务、Java编程操作Kafka

文章目录 前言4 Kafka基准测试4.1 基于1个分区1个副本的基准测试4.2 基于3个分区1个副本的基准测试4.3 基于1个分区3个副本的基准测试5 Java编程操作Kafka5.1 引入依赖5.2 向Kafka发送消息5.3 从Kafka消费消息5.4 异步使用带有回调函数的生产消息6 幂等性6.1 幂等性介绍6.2 Kaf…

【linux】linux中如何通过Logstash处理、结合logrotate分割日志

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

盘点:App 移动自动化测试工具

App移动端测试工具非常多&#xff0c;首先 区分 Android 和 iOS&#xff0c;以及 harmonyos 平台&#xff0c;每个平台下都有自己的自动化测试工具。自动化工具又区分 调试工具、monkey 工具、UI自动化工具。 本文就来盘点以下&#xff0c;当下主流的app自动化测试工具。 Andr…

文档信息提取系统源码分享

文档信息提取检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

客户服务升级指南:如何以细节赢得客户忠诚

在当今这个竞争激烈的市场环境中&#xff0c;客户忠诚度已成为企业生存与发展的关键所在。而要想赢得并维持客户的忠诚&#xff0c;仅凭优质的产品或服务已远远不够&#xff0c;更需要企业在客户服务上下足功夫&#xff0c;从每一个细节入手&#xff0c;打造超越客户期待的服务…

C++简单缓冲区类设计

目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中&#xff0c;设计静态和动态缓冲区类时&#xff0c;需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…

【机器学习案列】基于随机森林和xgboost的二手车价格回归预测

一、项目分析 1.1 项目任务 kaggle二手车价格回归预测项目&#xff0c;目的根据各种属性预测二手车的价格。 1.2 评估准则 评估的标准是均方根误差&#xff1a; 1.3 数据介绍 数据连接https://www.kaggle.com/competitions/playground-series-s4e9/data?selecttrain.csv 其…

基于 Java Swing 实现的超级玛丽游戏

一、项目概述 > 这是一个基于 Java Swing 的游戏项目&#xff0c;旨在实现一个支持自定义地图的超级玛丽游戏。 > 游戏画面精美&#xff0c;包含多种功能和亮点&#xff0c;如地图编辑器、不同状态的马里奥、多种怪物和道具等。 二、项目演示 > 地图编辑器 > …

Mac写入U盘文件如何跨平台使用 Mac电脑怎么把U盘文件传送到电脑 mac怎么用u盘拷贝文件

不知道你在使用Mac电脑拷贝文件的时候有没有遇到过无法写入U盘的问题&#xff0c;这通常是由于Mac和Windows之间的兼容问题引起的。下面我将为大家详细介绍Mac写入U盘文件如何跨平台使用以及Mac如何将U盘文件复制到电脑。 一、Mac写入U盘文件如何跨平台使用 在Mac电脑上将文件…

MySQL第11讲--多表查询的介绍

文章目录 前言多表关系多表查询概述多表查询的分类连接查询内链接外链接自连接 联合查询子查询标量子查询列子查询行子查询表子查询 前言 在MySQL第10讲–约束的介绍中讲了数据库的几种约束条件&#xff1a;非空约束、唯一约束、主键约束、外键约束、检查约束、默认约束。下图对…

数字人实战第六天——DH_live 训练自己的数字人

一、简介 数字人是一种基于人工智能和数字化技术构建的虚拟人物或代理&#xff0c;能够进行人类式的交互和沟通。这些技术主要包括&#xff1a; 人工智能&#xff08;AI&#xff09;&#xff1a;AI 是数字人的核心&#xff0c;包括自然语言处理&#xff08;NLP&#xff09;、机…

[深度学习]循环神经网络

1 自然语言处理概述 语料:一个样本,句子/文章语料库:由语料组成词表:分词之后的词语去重保存成为词表2 词嵌入层 import jieba import torch.nn as nn import torch # 文本数据 text=北京东奥的进度条已经过半,不少外国运动员在完成自己的比赛后踏上归途。 # 分词 words=j…

11.梯度下降法的思想——举足轻重的模型优化算法

引言 优化算法在机器学习和人工智能中扮演者至关重要的角色。机器学习模型的训练过程本质上是一个优化问题&#xff0c;即通过调整模型参数来最小化损失函数。梯度下降法(Gradient Descent)在优化算法中占据着重要的地位&#xff0c;因其简单、有效且易于实现。 通过阅读本篇…

阿里云服务器挖矿木马清除

这里写自定义目录标题 阿里云服务器挖矿木马清除清除步骤&#xff1a; 阿里云服务器挖矿木马清除 直接看图&#xff1a; 清除步骤&#xff1a; 是的&#xff0c;根据您提供的 systemctl 输出&#xff0c;c3pool_miner.service 看起来非常可疑&#xff0c;因为它的描述是 “…

langchain v0.3更新了什么?

版本改动 这是具体改动的链接 官方blog首先说明了&#xff1a; 所有软件包已在内部从 Pydantic 1 升级到 Pydantic 2。 所有软件包都完全支持在用户代码中使用 Pydantic 2&#xff0c;而无需使用 langchain_core.pydantic_v1 或 pydantic.v1 等桥接程序。 由于 Pydantic 1 已…

Django 配置邮箱服务,实现发送信息到指定邮箱

一、这里以qq邮箱为例&#xff0c;打开qq邮箱的SMTP服务 二、django项目目录设置setting.py 文件 setting.py 添加如下内容&#xff1a; # 发送邮件相关配置 EMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend EMAIL_USE_TLS True EMAIL_HOST smtp.qq.com EMAIL…

18724 二叉树的遍历运算

### 思路 1. **递归构建树**&#xff1a; - 先序遍历的第一个节点是根节点。 - 在中序遍历中找到根节点的位置&#xff0c;左边部分是左子树&#xff0c;右边部分是右子树。 - 递归构建左子树和右子树。 2. **递归生成后序遍历**&#xff1a; - 递归生成左子树的…

《Python编程:从入门到实践》数据可视化

一、项目 数据可视化学习 二、库依赖 matplotlib&#xff0c;pygal&#xff0c; 三、生成数据 1.绘制简单的折线图 import matplotlib.pyplot as pltsquares [1, 4, 9, 16, 25] plt.plot(squares) plt.show() 模块pyplot包含很多用于生成图表的函数。 &#xff08;1&am…

Excel求和为什么是0?结果不对的来跟着步骤排查

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f522; Excel求和功能是日常工作中常用的工具&#xff0c;但有时我们可能会遇到求和结果意外地显示为0&#xff0c;这可能会让我们感到困惑。今天&#xff0c;我们就来具体分析一下可能导致Excel求和结果为0的原因&a…