首页 > 系统相关 >【linux学习---1】点亮一个LED是多么的困难!!!

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

时间:2024-07-05 17:00:51浏览次数:27  
标签:LED 设置 linux --- ldr r0 IO 寄存器 GPIO

文章目录

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、代码验证

莫得问题,和编写一致。

标签:LED,设置,linux,---,ldr,r0,IO,寄存器,GPIO
From: https://blog.csdn.net/weixin_44407238/article/details/140154517

相关文章

  • 01-Web基础与HTTP协议
    目录域名概念域名空间结构域名注册网页概念网站主页域名HTTPURLURNURIHTML超链接发布HTMLHTML的结构静态网页特点动态网页特点WebHTTPHTTP方法GET方法POST方法HTTP状态码生产环境下常见的HTTP状态码域名概念IP地址不易记忆早期使用Hosts文......
  • CCF-CSP 202212-1 现值计算
    题目:试题编号:202212-1试题名称:现值计算时间限制:1.0s内存限制:512.0MB问题描述:问题描述评估一个长期项目的投资收益,资金的时间价值是一个必须要考虑到的因素。简单来说,假设银行的年利率为 5%,那么当前的 100 元一年后就会变成 105 元,两年后变成 110.25 元。因此,现在收到......
  • 题解 - 定价
    题目题目描述你如此计算一个价格\(p\)(为正整数)的荒谬程度:首先将\(p\)看做一个由数字组成的字符串(不带前导\(0\));然后,如果\(p\)的最后一个字符是\(0\),就去掉它。重复这一过程,直到\(p\)的最后一个字符不是\(0\);记\(p\)的长度为\(a\),如果此时\(p\)的最后一位是......
  • 2-Collection
    Collection常用方法Collection接口publicstaticvoidmain(String[]args){/*Collection接口的常用方法:增加:add(Ee)addAll(Collection<?extendsE>c)删除:clear()remove(Objecto)修改:查看:iterator(......
  • Linux下R安装配置以及工具包安装方式
    安装R1.下载安装R#/home/wangwz/packages/R/R-4.3.1下载安装R4.3.1wgethttp://mirrors.ustc.edu.cn/CRAN/src/base/R-4/R-4.3.1.tar.gztar-zxvfR-4.3.1.tar.gzcdR-4.3.1#注:R-4.0以上在configure时,需要增加一个--with-pcre1参数。./configure--with-readline......
  • linux部署Hugegraph
    HugeGraph是一款易用、高效、通用的开源图数据库系统(GraphDatabase)。一、基本概述功能特性:HugeGraph实现了ApacheTinkerPop3框架,并完全兼容Gremlin查询语言,具备完善的工具链组件,助力用户轻松构建基于图数据库之上的应用和产品。它支持百亿以上的顶点和边快速导入,并提供毫秒级......
  • Centos 7 离线安装docker及docker-compose
    一、docker安装下载docker安装包地址:https://download.docker.com/linux/static/stable/x86_64/选择需要用到的版本进行下载百度网盘docker-26.1.4.tgz安装包地址:https://pan.baidu.com/s/1mdCjdQnI_aFQ2CgGl7ILEA提取码:7h4d上传服务器并解压tar-zxvfdocker-26.......
  • Studying-代码随想录训练营day30| 452.用最少数量的箭引爆气球、435.无重叠区间、763.
    第30天,贪心part04,加油,编程语言:C++目录452.用最少数量的箭引爆气球435.无重叠区间 763.划分字母区间 总结 452.用最少数量的箭引爆气球文档讲解:代码随想录用最少数量的箭引爆气球视频讲解:手撕用最少数量的箭引爆气球题目:学习:根据题干,很直观的贪心逻辑就是尽可......
  • Linux 运行时调用动态链接库的方法
    项目场景:Linux动态链接库调用自定义的动态链接库动态链接库:(1)编写.c和.h文件(2)将.c文件转成.o文件gcc-c*.c-fPIC(3)将.o文件转成动态库文件lib库名.sogcc-shared-olib库......
  • Jenkins从0-1搭建--基于pipeline构建发布简单项目
    目录一、新建流水线任务二、参数化构建过程1.服务器选项2.项目分支3.发布环境三、编写流水线脚本3.1sshPublisher机器IP设置:3.2水流线代码四、流水线语法一、新建流水线任务二、参数化构建过程1.服务器选项value里面填写服务器ip 2.项目分支默认dev 3.发......