Linux 学习记录54(ARM篇)

news2024/7/4 5:25:30

Linux 学习记录54(ARM篇)

在这里插入图片描述

本文目录

  • Linux 学习记录54(ARM篇)
  • 一、框图分析
    • 1. 芯片手册内部框图
    • 2. 操作GPIO过程
  • 二、通过汇编完成GPIO操作
    • 1. 常用的汇编指令
    • 2. GPIO初始化流程
    • 3. 查找相关寄存器
      • (1. RCC寄存器
      • (2. GPIO寄存器
        • >1. 模式配置寄存器
        • >2. 输出模式配置寄存器
        • >3. 速度配置寄存器
        • >4. 上下拉配置寄存器
        • >5. GPIO输出寄存器
    • 4. 寄存器配置示例
      • (1. RCC寄存器配置
      • (2. GPIO寄存器配置
  • 思维导图
  • 练习代码

一、框图分析

以STM32MP157为例

1. 芯片手册内部框图

在这里插入图片描述

可以看到在STM32MP157A中有三个内核
	2个Cortex-A7 以及 一个Cortex-M4

2. 操作GPIO过程

在这里插入图片描述

二、通过汇编完成GPIO操作

1. 常用的汇编指令

1、数据操作指令
      1>数据搬移指令 mov
      2>移位操作指令 lsr lsl asr ror
      3>位运算指令 and orr eor bic
      4>算数运算指令 add adc sub sbc mul
      5>比较指令 cmp
2、跳转指令 b / bl
3、特殊功能寄存器操作指令 msr mrs       
4、内存操作指令
    1> 单寄存器操作指令 ldr / str
    2> 多寄存器操作指令 ldm / stm
    3> 栈指针操作指令 stmfd / ldmfd

2. GPIO初始化流程

在这里插入图片描述

3. 查找相关寄存器

相关数据手册在文章顶部下载

(1. RCC寄存器

2.5.2
在这里插入图片描述

(2. GPIO寄存器

>1. 模式配置寄存器

在这里插入图片描述

>2. 输出模式配置寄存器

在这里插入图片描述

>3. 速度配置寄存器

在这里插入图片描述

>4. 上下拉配置寄存器

在这里插入图片描述

>5. GPIO输出寄存器

在这里插入图片描述

4. 寄存器配置示例

(1. RCC寄存器配置

@RCC_Init:	@RCC时钟初始化 GPIOE
ldr r0,=0x50000A28 @GPIO的RCC地址为0x50000000,E组GPIO需要加上0x0A28的偏移量,上面图片的RCC寄存器可查
ldr r1,[r0] @将0x50000A28寄存器的地址中的数据读出
orr r1,r1,#(0X1<<4) @将E组的GPIO使能位置1
str r1,[r0]	@重新写入寄存器中

(2. GPIO寄存器配置

@LED_Init:	@LED的GPIO初始化
	@初始化GPIOE 8-10
	ldr r0,=0x50006000	@GPIOE模式 基地址
	ldr r1,[r0]			@当前寄存器数据
	and r1,r1,#(~(0x3<<16))	@将要修改的位先清零
	orr r1,r1,#(0x1<<16)	@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@输出配置
	ldr r0,=0x50006004	@GPIOE输出 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x1<<8)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@速度配置
	ldr r0,=0x50006008	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x3<<16)		@将要修改的位先清零
	orr r1,r1,#(0x1<<16)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@上下拉配置
	ldr r0,=0x5000600c	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x3<<16)		@将要修改的位先清零
	orr r1,r1,#(0x1<<16)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@将该引脚设置为高电平
	ldr r0,=0x50006014	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	orr r1,r1,#(0x1<<8)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器

思维导图

在这里插入图片描述

练习代码


.text 
.global _start

_start: 

	bl Init
	mov r5,#0

loop:

	bl LED_ON
	bl delay_1s
	bl LED_OFF
	bl delay_1s

	cmp r5,#10
	add r5,r5,#1

	bls loop

Init:
@RCC_Init:	@RCC时钟初始化
	ldr r0,=0x50000A28
	ldr r1,[r0]
	orr r1,r1,#(0X3<<4)
	str r1,[r0]

@LED_Init:	@LED的GPIO初始化
	@初始化GPIOE 8-10
	ldr r0,=0x50006000	@GPIOE模式 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x33<<16)
	orr r1,r1,#(0x11<<16)	@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@输出配置
	ldr r0,=0x50006004	@GPIOE输出 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x5<<8)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@速度配置
	ldr r0,=0x50006008	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x33<<16)		@重新赋值参数到r1寄存器
	orr r1,r1,#(0x11<<16)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@上下拉配置
	ldr r0,=0x5000600c	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x33<<16)		@重新赋值参数到r1寄存器
	orr r1,r1,#(0x11<<16)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器


	@初始化GPIOF 10
	ldr r0,=0x50007000	@GPIOE模式 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x3<<20)
	orr r1,r1,#(0x1<<20)	@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@输出配置
	ldr r0,=0x50007004	@GPIOE输出 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x1<<10)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@速度配置
	ldr r0,=0x50007008	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x3<<20)		@重新赋值参数到r1寄存器
	orr r1,r1,#(0x1<<20)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器
	@上下拉配置
	ldr r0,=0x5000700c	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x3<<20)		@重新赋值参数到r1寄存器
	orr r1,r1,#(0x1<<20)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器

	mov pc,lr

LED_ON:

	ldr r0,=0x50006014	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	orr r1,r1,#(0x5<<8)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器

	ldr r0,=0x50007014	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	orr r1,r1,#(0x1<<10)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器

	mov pc,lr

LED_OFF:

	ldr r0,=0x50006014	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x5<<8)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器

	ldr r0,=0x50007014	@GPIOE速度 基地址
	ldr r1,[r0]			@当前寄存器数据
	bic r1,r1,#(0x1<<10)		@重新赋值参数到r1寄存器
	str r1,[r0]			@设置GPIO 参数到模式寄存器

	mov pc,lr
	


@ 大概1s的延时函数
delay_1s:	@延时函数
	mov r3, #0x10000000
	mm:
	cmp r3, #0
	subne r3, r3, #1
	bne mm
	mov pc, lr

.end

在这里插入图片描述

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

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

相关文章

【云原生】Prometheus之部署 Alertmanager 发送告警

前言 1. Alertmanager 发送告警的介绍 Prometheus 对指标的收集、存储与告警能力分属于 Prometheus Server 和 AlertManager 两个独立的组件&#xff0c;前者仅负责定义告警规则生成告警通知&#xff0c; 具体的告警操作则由后者完成。 Alertmanager 负责处理由 Prometheus…

wxchart 小程序 线条图不显示y轴的网格线 (分割线)

如下图&#xff1a;项目需求不显示包括x轴的6条灰色分割线。 分析&#xff1a; 看了一下源码已经写死了是5条分割线&#xff0c;加一条x轴刻度线。没给公开配置方法。 解决方案&#xff1a; 既然没有配置项目&#xff0c;可以转变思路&#xff0c;把这些线条配置成白色&…

一文掌握如何前后端分离?

随着科技的进步和发展&#xff0c;低代码开发产品拥有广阔的市场前景。前后端分离似乎早已经是发展趋势了&#xff0c;因为做好前后端分离对于前后端的工程师而言是非常有利的&#xff0c;这样也有利于提升办公协作效率。那么&#xff0c;如何前后端分离&#xff1f;分别都有哪…

CentOS 安装Mysql8

1.检查是否已经安装mysql&#xff0c;停止mysql服务&#xff0c;删除mysql ps -ef | grep -i mysql systemctl stop mysqld rpm -e mysql 2.配置仓库 更新秘钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 安装mysql8的yum源 rpm -Uvh https://dev.mysql.…

基于linux下的高并发服务器开发(第二章)- 2.17 内存映射(1)

11 / 内存映射相关系统调用 #include <sys/mman.h> void* mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset); - 功能&#xff1a;将一个文件或者设备的数据映射到内存中 - 参数&#xff1a; - void* addr:NULL,由内核指定 - length:要映射的…

【OpenCV】常见问题及解决办法

文章目录 0 前言1 中文乱码问题2 非法路径问题 0 前言 本篇博客主要是总结OpenCV使用过程中遇到的一些问题&#xff0c;以及对应的解决办法&#xff0c;这里重点是关注OpenCV&#xff0c;既有基于C的&#xff0c;也有基于Python的&#xff0c;比较全面&#xff0c;而且也会随着…

【Python】数据分析+数据挖掘——变量列的相关操作

前言 在Python和Pandas中&#xff0c;变量列操作指的是对DataFrame中的列进行操作&#xff0c;包括但不限于选择列、重命名列、添加新列、删除列、修改列数据等操作。这些操作可以帮助我们处理数据、分析数据和进行特征工程等。 变量列的相关操作 概述 下面将会列出一些基本…

对github项目提PR 请求的保姆级教程——以修改casdoor项目的swagger文档为例,干货满满

Github入门教程可以在腾讯犀牛鸟开源人才培养计划里面学习。 PR简介 PR(Pull Request) 即拉取请求,是 GitHub 上进行协同开发的一种非常常用的方式。 它的基本流程是&#xff1a; 开发者fork一个开源项目的代码库,将其克隆到本地。在本地对代码进行修改、添加新功能等。将本…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平教程

详情点击链接&#xff1a;基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平 一&#xff0c;空间数据获取与制图 1.1 软件安装与应用 1.2 空间数据 1.3海量空间数据下载 1.4 ArcGIS软件快…

MySQL数据库(七)

目录 一、联合查询 1.1内连接 1.2外连接 1.3自连接 1.4子查询 1.5合并查询 一、联合查询 实际开发中往往数据来自不同的表&#xff0c;所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积&#xff1a; 下面进行多表查询的练习&#xff0c;对应的在表的设计与数据插入中…

练习时长两年半的网络安全防御“first”

1.网络安全常识及术语 下边基于这次攻击演示我们介绍一下网络安全的一些常识和术语。 资产 任何对组织业务具有价值的信息资产&#xff0c;包括计算机硬件、通信设施、 IT 环境、数据库、软件、文档资料、信息服务和人员等。 网络安全 网络安全是指网络系统的硬件、软件及…

Stable Diffusion - 扩展 Roop 换脸 (Face Swapping) 插件的配置与使用

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131856141 官网&#xff1a;GitHub - roop&#xff0c;参考论文&#xff1a;RobustSwap: A Simple yet Robust Face Swapping Model against Attr…

kubesphere部署谷粒商城, nginx无法路由到网关服务

使用kubesphere部署谷粒商城&#xff0c;微服务和nginx均已部署成功&#xff0c;其中ingress-controller已安装。但是nginx无法路由到网关服务。使用域名gulimall.com访问谷粒商城&#xff0c;默认访问的是nginx首页&#xff0c;路由失败。 校对nginx的配置信息&#xff0c;上游…

MySQL数据库第十课-------join连接的再续------强强连锁

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com __________________________________________________________ 目录 join连接 内连接 左连接 右连接 外连接 其他连接 ______________________________________________________________ 作…

Unity 实用插件篇 | Tutorial Master 2 游戏引导教程 快速上手

前言【Unity 实用插件篇】 | Tutorial Master 2 游戏引导教程 快速上手一、Tutorial Master 2 介绍1.1 基本概念1.2 相关链接1.3 效果展示二、搭建简易测试环境三、制作简易引导教程3.1 挂载一个Tutorial Master Manager脚本3.2 设置引导预制体3.3 创建一个引导教程3.4 添加引导…

SpringBoot系列--【如何集成prometheus?】

如何集成prometheus&#xff1f; 1.添加pom依赖 注意&#xff1a;prometheus的版本依赖springboot版本&#xff0c;示例使用的springboot版本的2.3.X. 2.配置文件添加配置 3.主启动类添加如下配置 4.验证端点 SpringBoot项目到这里就配置完成了&#xff0c;启动项目&#xff0c…

将请求参数数据推送至RabbitMQ队列中并且捕捉消息没有到达交换机的异常

1&#xff1a;自定义mq信息类&#xff08;我的交换这些信息都从nacos上直接取的&#xff0c;怎么从nacos取配置信息看上篇文章&#xff09;&#xff1a; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor;impo…

Windows10 + Mingw + Paho Mqtt C/C++编译使用

文章目录 1、前言2、按照Mingw环境3、编译paho c3.1、ssl验证大坑3.2、解决方法3.3、mingw32-make过程出现报错3.4、继续出错3.5、编译成功 4、编译paho c5、Qt使用paho mqtt库5.1、编码 1、前言 起初使用的是Cmake Visual Studio 2019进行编译&#xff0c;使用的时候出现ssl错…

《Java核心技术大会2023》——AIC松鼠活动第一期

共同深入探讨 Java 生态&#xff01;直播预约&#xff1a;视频号“IT阅读排行榜” 大会简介 人工智能在22年、23年的再次爆发让Python成为编程语言里最大的赢家&#xff1b;云原生的持续普及令Go、Rust等新生的语言有了进一步叫板传统技术体系的资本与底气。我们必须承认在近…

【搜索引擎Solr】配置 Solr 以获得最佳性能

Apache Solr 是广泛使用的搜索引擎。有几个著名的平台使用 Solr&#xff1b;Netflix 和 Instagram 是其中的一些名称。我们在 tajawal 的应用程序中一直使用 Solr 和 ElasticSearch。在这篇文章中&#xff0c;我将为您提供一些关于如何编写优化的 Schema 文件的技巧。我们不会讨…