【linux学习---1】点亮一个LED是多么的困难!!!

news2024/9/22 9:40:09

文章目录

  • 1、原理图找对应引脚
  • 2、IO复用
  • 3、IO配置
  • 4、GPIO配置
  • 5、GPIO时钟使能
  • 6、总结
  • 7、编程
  • 8、编译
  • 9、链接
  • 10、格式转换
  • 11、反汇编(查看用)
  • 12、使用Makefile操作
  • 13、代码烧写
  • 14、代码验证

1、原理图找对应引脚

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上图 可以看出, 蜂鸣器 接到了 BEEP 上, BEEP 就是 GPIO5_IO05

2、IO复用

查找IMX6UL参考手册
在这里插入图片描述
和 STM32一样,如果某个 IO 要作为某个外设引脚使用的话, 是需要配置复用寄存器的。
在这里插入图片描述
做工业级应用,一般会选择G2版本,如果使用了G3版本,则其以下GPIO只能做tamper GPIO,不能做普通的GPIO:
CTL_PAD_SNVS_TAMPER0~CTL_PAD_SNVS_TAMPER9 10个GPIO。
可以通过烧写掉以下fuse来将其设置为一般的GPIO:
G3版本CPU用于POS机设计,而不是作为G2用于工业,其以下保险丝是00,需要您将其烧录到11才能使tamper0-9到正常gpio,请检查您的参考手册
TAMPER gpio 是Pos机上用的,检测攻击,数据会自毁。

TAMPER_PIN_DISABLE[1:0]的定义如下:

00 - 使能,TAMPER0-9 用作 TAMPER 检测引脚。

01 - 禁用 TAMPER2-4 和 TAMPER7-9 用作 GPIO。

10 - 禁用 TAMPER0-1 和 TAMPER5-6 用作 GPIO。

11 - 禁用 TAMPER0-9 用作 GPIO。

3、IO配置

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、GPIO配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
此寄存器是 32 位的,一个 GPIO 组最大只有 32 个 IO,因此 DR 寄存器中的每个位都对应
一个 GPIO。当 GPIO 被配置为输出功能以后,向指定的位写入数据那么相应的 IO 就会输出相
应的高低电平,比如要设置 GPIO1_IO00 输出高电平,那么就应该设置 GPIO1.DR=1。
在这里插入图片描述
GDIR 寄存器也是 32 位的,此寄存器用来设置某个 IO 的工作方向,是输入还是输出。同
样的,每个 IO 对应一个位,如果要设置 GPIO 为输入的话就设置相应的位为 0,如果要设置为
输出的话就设置为 1。比如要设置 GPIO1_IO00 为输入,那么 GPIO1.GDIR=0;
同样的 PSR 寄存器也是一个 GPIO 对应一个位,读取相应的位即可获取对应的 GPIO 的状
态,也就是 GPIO 的高低电平值。功能和输入状态下的 DR 寄存器一样
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
IMR 寄存器也是一个 GPIO 对应一个位, IMR 寄存器用来控制 GPIO 的中断禁止和使能,
如果使能某个 GPIO 的中断,那么设置相应的位为 1 即可,反之,如果要禁止中断,那么就设
置相应的位为 0 即可。例如,要使能 GPIO1_IO00 的中断,那么就可以设置 GPIO1.MIR=1 即

在这里插入图片描述
ISR 寄存器也是 32 位寄存器,一个 GPIO 对应一个位,只要某个 GPIO 的中断发生,那么
ISR 中相应的位就会被置 1。所以,我们可以通过读取 ISR 寄存器来判断 GPIO 中断是否发生,
相当于 ISR 中的这些位就是中断标志位。当我们处理完中断以后,必须清除中断标志位,清除
方法就是向 ISR 中相应的位写 1,也就是写 1 清零。
在这里插入图片描述
EDGE_SEL 寄存器用来设置边沿中断,这个寄存器会覆盖 ICR1 和 ICR2 的设置,同样是一
个 GPIO 对应一个位。如果相应的位被置 1,那么就相当与设置了对应的 GPIO 是上升沿和下降
沿(双边沿)触发。例如,我们设置 GPIO1.EDGE_SEL=1,那么就表示 GPIO1_IO01 是双边沿触
发中断,无论 GFPIO1_CR1 的设置为多少,都是双边沿触发。

5、GPIO时钟使能

在这里插入图片描述
在这里插入图片描述

6、总结

总结一下,要将 I.MX6UL的 IO 作为 GPIO 使用,我们需要一下
几步:
①、使能 GPIO 对应的时钟。
②、设置寄存器 IOMUXC_SW_MUX_CTL_PAD_XX_XX,设置 IO 的复用功能,使其复用
为 GPIO 功能。
③、设置寄存器 IOMUXC_SW_PAD_CTL_PAD_XX_XX,设置 IO 的上下拉、速度等等。
④、第②步已经将 IO 复用为了 GPIO 功能,所以需要配置 GPIO,设置输入/输出、是否使
用中断、默认输出电平等。

7、编程

/*汇编代码学习*/
.global _start /*全局标号*/
/*
 * 描述: _start 函数,程序从此函数开始执行此函数完成时钟使能、
 * GPIO 初始化、最终控制 GPIO 输出低电平来点亮 LED 灯。
 */
_start:
/*1、使能时钟*/
ldr r0, =0x020C406C /* 寄存器 CCGR1 */
ldr r1, =0xc0000000
str r1, [r0]

/*2、复用GPIO*/
ldr r0, =0x020E0030 /* 将寄存器 加载到 r0 中 */
ldr r1, =0x5 /* 设置寄存器 的 MUX_MODE 为 5 */
str r1, [r0]

/*3、配置GPIO
 *bit 16:0 HYS 关闭
 *bit [15:14]: 00 默认下拉
 *bit [13]: 0 kepper 功能
 *bit [12]: 1 pull/keeper 使能
 *bit [11]: 0 关闭开路输出
 *bit [7:6]: 10 速度 100Mhz
 *bit [5:3]: 110 R0/6 驱动能力
 *bit [0]: 0 低转换率
 */
ldr r0, =0x020E02BC
ldr r1, =0x10B0
str r1, [r0]

/*4、设置GPIO输出*/
ldr r0, =0x020AC004  /*寄存器 GPIO1_GDIR */
ldr r1, =0x20
str r1, [r0]

/*5、打开BEEP*/
//设置 GPIO5_IO05 输出高电平
ldr r0, =0x020AC000 /*寄存器 GPIO1_DR */
ldr r1, =0x20
str r1, [r0]

/*
 * 描述: loop 死循环
 */
 loop:
 b loop

8、编译

.s编译源文件,但是不链接成.o文件
在这里插入图片描述

9、链接

链接到一个运行地址
在这里插入图片描述

10、格式转换

我们需要将 led.elf 文件转换为
led.bin 文件
在这里插入图片描述

11、反汇编(查看用)

大多数情况下我们都是用 C 语言写试验例程的,有时候需要查看其汇编代码来调试代码,
因此就需要进行反汇编,一般可以将 elf 文件反汇编
在这里插入图片描述
在这里插入图片描述
通过 led.dis 这个反汇编文件可以
明显的看出我们的代码已经链接到了以 0X87800000 为起始地址的区域

12、使用Makefile操作

创建好 Makefile 以后我们就只需要执行一次“make”命令即可完成编译,过程如图 8.4.1.13
所示:
在这里插入图片描述

在这里插入图片描述

13、代码烧写

用SD卡烧写
Linux下对SD卡进行格式化
在这里插入图片描述
在这里插入图片描述
烧写好后,U盘是空的,不知道为啥。如果有其他文件百度看下,其实这些文件还真不是烧写文件。

14、代码验证

莫得问题,和编写一致。

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

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

相关文章

2024全网最全面及最新且最为详细的网络安全技巧五 之 SSRF 漏洞EXP技巧,典例分析以及 如何修复 (上册)———— 作者:LJS

五——SSRF漏洞 EXP技巧,典例分析以及 如何修复 目录 五——SSRF EXP技巧,典例分析以及 如何修复 5.1Apache mod_proxy SSRF(CVE-2021-40438)的一点分析和延伸 0x01 Apache Module综述 0x02 漏洞原理分析 Apache在配置反代的后端…

跟《经济学人》学英文:2024年07月06日这期:Finishing schools for the age of TikTok

Finishing schools for the age of TikTok Unsure how to be polite at work? Ask a digital etiquette guru 不确定如何在工作中保持礼貌?请教一位数字礼仪大师 “Finishing schools” 是指专门为年轻女性提供礼仪、社交技巧、文化修养等教育的学校,…

深度解析 Raft 分布式一致性协议

本文参考转载至:浅谈 Raft 分布式一致性协议|图解 Raft - 白泽来了 - 博客园 (cnblogs.com) 深度解析 Raft 分布式一致性协议 - 掘金 (juejin.cn) raft-zh_cn/raft-zh_cn.md at master maemual/raft-zh_cn (github.com) 本篇文章将模拟一个KV数据读写服…

华为开发者大会2024纪要:鸿蒙OS的全新篇章与AI大模型的革命

华为开发者大会2024纪要:鸿蒙OS的全新篇章与AI大模型的革命 在科技的浪潮中,华为再次引领潮流,2024年的开发者大会带来了一系列令人瞩目的创新成果。从鸿蒙操作系统的全新Beta版到盘古大模型的震撼发布,华为正以前所未有的速度重塑智能生态。以下是本次大会的亮点,让我们…

springboot马拉松赛事志愿者管理系统-计算机毕业设计源码80251

摘 要 随着马拉松运动的兴起和发展,马拉松赛事的组织和管理面临着越来越多的挑战,其中志愿者的招募、培训和管理是至关重要的一环。传统的人力资源管理方式已经无法满足大型马拉松赛事对志愿者团队的需求,因此基于现代信息技术的马拉松赛事志…

电表读数检测数据集VOC+YOLO格式18156张12类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):18156 标注数量(xml文件个数):18156 标注数量(txt文件个数):18156 标…

oracle数据库默认表空间详解

文章目录 oracle数据库默认表空间列表 oracle数据库默认表空间列表 系统表空间(System Tablespace) 系统表空间包含了系统级别的元数据,如数据字典、系统表和存储过程等。例如SYSTEM表空间用于保存数据库的数据字典、PL/SQL程序的源代码和解释…

Windows如何查看端口是否占用,并结束端口进程

需求与问题:前后端配置了跨域操作,但是仍然报错,可以考虑端口被两个程序占用,找不到正确端口或者后端接口书写是否规范,特别是利用Python Flask书写时要保证缩进是否正确! Windows操作系统中,查…

【算法专题】模拟算法题

模拟算法题往往不涉及复杂的数据结构或算法,而是侧重于对特定情景的代码实现,关键在于理解题目所描述的情境,并能够将其转化为代码逻辑。所以我们在处理这种类型的题目时,最好要现在演草纸上把情况理清楚,再动手编写代…

pytest使用报错(以及解决pytest所谓的“抑制print输出”)

1. 测试类的类名问题 #codingutf-8import pytestclass TestClass1:def setup(self) -> None:print(setup)def test_01(self) -> None:print(test_01111111111111111111111)def test_02(self) -> None:print(test_02)以上述代码为例,如果类名是Test开头&am…

基于Android Studio订餐管理项目

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 能够实现登录,注册、首页、订餐、购物车,我的。 用户注册后,登陆客户端即可完成订餐、浏览菜谱等功能,点餐,加入购物车,结算,以及删减…

Mysql慢日志、慢SQL

慢查询日志 查看执行慢的SQL语句,需要先开启慢查询日志。 MySQL 的慢查询日志,记录在 MySQL 中响应时间超过阀值的语句(具体指运行时间超过 long_query_time 值的SQL。long_query_time 的默认值为10,意思是运行10秒以上(不含10秒…

Nginx(http配置、https配置)访问Spring Boot 项目

前文 记录一下在linux服务器下配置nginx中nginx.conf文件代理访问springboot项目 1. spring boot.yml配置 其他mysql,redis,mybatis等之类的配置就不一一列出了 # 自定义配置 为了等下验证读取的配置文件环境 appName: productserver:port: 8083 # 应用服务 WEB 访问端口s…

Apache Seata 高可用部署实践

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata 高可用部署实践 Seata 高可用部署实践 使用配置中心和数据库来实现 Seata 的高…

OpenAI突然停止中国API使用,出海SaaS产品如何化挑战为机遇?

2023年是AI爆发的年代,人工智能带来的信息裂变刷新了整个SaaS行业。在这个AI引领的时代,我们不应该单纯依赖工具本身,而是要理解如何将这些AI功能与行业相结合。 然而,上周OpenAI宣布禁止对中国提供API服务,有一些用户…

FreeU: Free Lunch in Diffusion U-Net——【代码复现】

这篇文章发表于CVPR 2024,官网地址:ChenyangSi/FreeU: FreeU: Free Lunch in Diffusion U-Net (CVPR2024 Oral) (github.com) 一、环境准备 提前准备好python、pytorch环境 二、下载项目依赖 demo下有一个requirements.txt文件, pip inst…

ubuntu 22 安装 lua 环境 编译lua cjson 模块

在 windows 下使用 cygwin 编译 lua 和 cjson 简直就是灾难,最后还是到 ubuntu 下完成了。 1、下载lua源码(我下载的 5.1 版本,后面还有一个小插曲), 直接解压编译,遇到一个 readline.h not found 的问题,需要安装 re…

探索 SecureCRT:强大的终端 SSH 工具

SecureCRT 是一款功能强大、备受赞誉的终端 SSH 工具,适用于 Mac 和 Windows 操作系统,为用户提供了便捷、高效、安全的远程连接和管理体验。 SecureCRT 拥有直观友好的用户界面,即使是初次使用的用户也能迅速上手。其支持多种协议&#xff…

基于Python爬虫的城市二手房数据分析可视化

基于Python爬虫的城市二手房数据分析可视化 一、前言二、数据采集(爬虫,附完整代码)三、数据可视化(附完整代码)3.1 房源面积-总价散点图3.2 各行政区均价3.3 均价最高的10个小区3.4 均价最高的10个地段3.5 户型分布3.6 词云图四、如何更换城市一、前言 二手房具有价格普…

提高论文发表机会:Nature Communications 最新研究教你如何巧妙回复审稿意见

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 对于科研搬砖人来说,在论文投稿过程中,如何有效回复审稿意见才能得到审稿人的认可,一直是一个让人困惑又带点玄学的问题。 但是&#xff0c…