GPIO实验

一、GPIO

GPIO(General-purpose input/output)即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出
芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能
在这里插入图片描述

LED实验步骤

最终目的:通过GPIO这个控制器去控制引脚产生高低电平从而控制LED灯的点亮和熄灭

实验: 以LED2灯 闪烁 为例

1. 通过电路原理图分析LED的控制逻辑	2. 通过电路原理图查找LED与Exynos4412的连接关系3. 通过数据手册分析GPIO中哪些寄存器可以控制LED4. 通过程序去操控对应的寄存器完成对LED的控制

第一步

得出结论高电平-亮 低电平-灭
下一步要找到CHG_COK这个网络标号,连接在4412芯片那一个引脚上
在这里插入图片描述

第二步

在这里插入图片描述

通过电路设计图中的网络标号CHG_COK,在芯片电路设计图中可以看到连接在4412芯片上面是GPX2这一组的第七个(GPX2_7)控制着该引脚
(这个引脚的名称为什么这么多呢,因为很多引脚的功能是复用的)

第三步

查看芯片手册分析哪些寄存器可以控制LED2
在这里插入图片描述
通过芯片手册可以看到GPX0, GPX1, GPX2, GPX3 这四组共有32个引脚,那么GPX2这一组就是有8个引脚。
在这里插入图片描述

GPX2CON(32Bit): 可以配置这一组引脚,这一组有八个引脚,都归这个寄存器来管理
GPX2DAT(32Bit): 存储这一组引脚的相关数据

在这里插入图片描述
这里看到对GPX2CON这个寄存器每一位是干什么的一个详解
GPX2CON[0]这一位可以管理GPX2_0这个引脚,以此类推 > GPX2CON[7]这一位可以管理GPX2_7这个引脚
我们这个实验目的:是想要通过GPIO这个寄存器产生一个高或低信号,去控制外面的LED的点亮和熄灭,所以设置成 0x = Output 输出功能,设置GPX2CON[7]这个寄存器的[31:28]这四位设置成0x1
设置了这四位只是将GPX2_7设置成输出功能,然后输出什么信号还是控制不了的

然后得通过GPX2DAT寄存器来向GPX2CON[7]发送数据
在这里插入图片描述
GPX2DAT(32bit,高位没有用)这七位每一位控制着一个引脚,如果GPX2DAT第0位写零,GPX2_0输出低电平,写1输出高电平。
那么GPX2DAT第7位写零,GPX2_7就输出低电平,写1输出高电平

第四步

在相应的地址中写数据进而控制响应的寄存器

led_asm.s 文件


.text	//代码的开始
_start:MAIN:BL LED_CONFIG	//跳转
LOOP:BL LED_ONBL DELAYBL LED_OFFBL DELAYB  LOOP/* 配置GPX2CON寄存器 */
LED_CONFIG:/* GPX2CON寄存器地址 */LDR R2, =0x11000c40/* 将GPX2CON[7]这个引脚的 [31:28]位设置成 0x1输出功能*/LDR R1, =0x10000000STR R1, [R2]MOV PC, LR/* 配置GPX2DAT寄存器 点亮*/
LED_ON:/* GPX2DAT寄存器地址 */LDR R2, =0x11000c44/* GPX2DAT第七位写0,从而向GPX2CON[7]这一位发送高电平 */LDR R1, =0x00000080STR R1, [R2]  MOV PC, LR/* 配置GPX2DAT寄存器 熄灭*/
LED_OFF:LDR R2, =0x11000c44LDR R1, =0x00000000STR R1, [R2]MOV PC, LR/*LED2灯 灭和亮  之间间隔的时间*/
DELAY:LDR R1, =100000000
L:SUB R1, R1, #1CMP R1, #0BNE LMOV PC, LRSTOP:B STOP.end

Makefile文件

/* 执行文件的名字 */
TARGET = led-asm/* 交叉编译器的前缀 */
CROSS_COMPILE = arm-none-linux-gnueabi-/* 完整的编译器名字 */
CC = $(CROSS_COMPILE)gcc/* 链接文件使用的工具ld */
LD = $(CROSS_COMPILE)ld/* objcopy这个工具可以将.elf文件编译成开发板可执行的文件 */
OBJCOPY = $(CROSS_COMPILE)objcopy/* 编译规则 */
all:/* 编译分四步:-E 预编译, -S 汇编, -c 目标文件(机器码),gcc 链接 *//* 写的就是汇编文件  随意直接进行 -c 形成目标文件  形成 .o 机器码*/$(CC) -c $(TARGET).s -o $(TARGET).o/* ld链接生成一个.elf可执行文件  链接的时候重定向一个地址 0x40008000 *//* -Ttext 0x40008000: 这个文件编译完成之后,将来这段程序放入 0x40008000 这个地址去运行 */$(LD) $(TARGET).o -Ttext 0x40008000 -o $(TARGET).elf/* 因为开发板上面没有Linux系统,.elf只能在Linux系统下运行,所以需要转换成开发板可执行的文件 *//* 	-O 指定转换binary格式 -S 转换.elf文件, 生成.bin文件 */$(OBJCOPY) -O binary -S $(TARGET).elf $(TARGET).binclean:rm $(TARGET).o $(TARGET).elf $(TARGET).bin  

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

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

相关文章

优质的论文讲解

优质的论文讲解 2023 ICML UPop: Unified and Progressive Pruning for Compressing Vision-Language Transformers

windows 同时安装 Mysql 5.7 和8.0

下载链接 https://dev.mysql.com/downloads/mysql/ 推荐下载 MSI,可以通过图像化界面配置 8.1 版本 安装5.7 系统安装两个MySQL 怎么访问 都是mysql,所以环境变量 配置,只能一个生效,生效就是谁靠前谁生效 cmd 录入 services.m…

Linux用户管理

一、linux用户:username/UID Linux用户分为以下几种 root用户:UID为0,也称超级用户,权限最高。系统用户:UID为1~999,也称虚拟用户、伪用户、假用户,是系统自身拥有的用户,比如bin、…

SpringBoot+SSM实战<一>:打造高效便捷的企业级Java外卖订购系统

文章目录 项目简介项目架构功能模块管理端用户端 技术选型用户层网关层应用层数据层工具 项目优缺点结语 黑马程序员最新Java项目实战《苍穹外卖》:让你轻松掌握SpringBootSSM的企业级开发技巧项目简介 《苍穹外卖》是一款为餐饮企业(餐厅、饭店&#x…

C++ 类的继承与派生

1.继承关系举例 交通工具的分类如下图所示: 这个分类树反映了交通工具的派生关系,最高层是抽象程度最高的,是最具有普遍和一般意义的概念,下层具有了上层的特性,同时加入了自己的新特征,而最下层是最为具…

C#设计模式之抽象工厂

抽象工厂模式是一种创建型设计模式,用于提供一个统一的接口来创建相关或依赖对象的系列,而无需指定具体的类。当需要满足以下情况之一时,可以考虑使用抽象工厂模式:创建一组相关的产品:抽象工厂模式适用于创建一系列相…

30岁程序员第一次失败的餐饮创业经历

背景介绍 我什么都比较晚,我比大多数人晚了两年毕业,事业稳定也比别人晚。直到去年,我才跳槽到一家外企外包工作获得相对满意的薪资。但即使如此,与更有经验的人相比,我仍然有很大的差距,自己也尚未积累足…

[CKA]考试之PersistentVolumeClaims

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 创建一个名字为pv-volume的pvc,指定storageClass为csi-hostpath-…

HTML中元素和标签有什么区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 标签(Tag)⭐元素(Element)⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

Leetcode-每日一题【剑指 Offer 17. 打印从1到最大的n位数】

题目 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 示例 1: 输入: n 1输出: [1,2,3,4,5,6,7,8,9] 说明: 用返回一个整数列表来代替打印 n 为正整数 解题思路 前置知识 M…

嵌入式面试八股文

一、C/C题目 1.1.strcat、strncat、strcmp、strcpy,那些会导致内存溢出?如何改进? strcmp:与内存溢出没有关系,其功能为比较两个字符串是否相等。strcpy:把源字符串拷贝到目的内存中,如果源字符…

kubernetes基于helm部署gitlab

kubernetes基于helm部署gitlab 这篇博文介绍如何在 Kubernetes 中使用helm部署 GitLab。 先决条件 已运行的 Kubernetes 集群负载均衡器,为ingress-nginx控制器提供EXTERNAL-IP,本示例使用metallb默认存储类,为gitlab pods提供持久化存储&…

将word每页页眉单独设置

在进行论文排版的时候,总是会出现页眉的页码设置问题,比如出现奇数或偶数页码一致,尝试将前面页码改掉,后面再修改前面也进行了变动,将每页页眉单独设置: (1)在第一页的最后一行输入…

OPENCV C++(四)形态学操作+连通域统计

形态学操作 先得到一个卷积核 Mat kernel getStructuringElement(MORPH_RECT,Size(5,5)); 第一个是形状 第二个是卷积核大小 依次为腐蚀 膨胀 开运算 闭运算 Mat erodemat,dilatemat,openmat,closemat;morphologyEx(result1, erodemat, MORPH_ERODE, kernel);morphologyEx…

智能指针shared_ptr:自定义删除器

重点&#xff1a; 1.普通指针转化成智能指针。 2.智能指针创建的时候&#xff0c;第二个参数是自定义删除器&#xff0c;默认情况下&#xff0c;shared_ptr调用delete()函数。 class A { public:void Get() { cout << b << endl; }; private:int b{ 10 }; };clas…

Pandas

系列文章目录 第一章 python数据挖掘基础环境安装和使用 第二章 Matplotlib 第三章 Numpy 文章目录 系列文章目录一、介绍1.1 为什么用Pandas&#xff1f;1.2 核心数据结构1.3 DataFrame1.3.1 结构1.3.2 常用属性1.3.3 常用方法1.3.4 DataFrame索引的设置修改行列索引值重设索…

git仓库与本地暂存区的同步问题

向下同步 对于远程仓库的项目&#xff0c;初始化一个配置文件&#xff0c;配置远程仓库及相关信息&#xff0c;赋值远程仓库的地址&#xff0c;使用git pull命令即可拉取仓库代码。 git pull [remote_addr] 该部分完成向下同步 向上同步 向上同步时会遇到很多的问题&#xf…

utf8mb4_general_ci 和utf8mb4_unicode_ci有什么异同,有什么优劣

utf8mb4_general_ci 和 utf8mb4_unicode_ci 都是 MySQL 数据库中的字符集和排序规则&#xff08;collation&#xff09;。它们主要用于指定字符数据的排序和比较规则&#xff0c;以确保在数据库中对字符串进行查询和比较时得到正确的结果。 异同点&#xff1a; 1. utf8mb4_gen…

Redis ERR Protocol error: invalid multibulk length

异常信息 org.springframework.data.redis.RedisConnectionFailureException: ERR Protocol error: invalid multibulk length; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: ERR Protocol error: invalid multibulk lengthCaused by: red…

《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)

1. 简介 俗话说&#xff1a;磨刀不误砍柴工&#xff0c;因此在我们要开始写自动化脚本之前&#xff0c;我们先来学习和了解几个基本概念&#xff0c;在完全掌握了这几个概念之后&#xff0c;有助于我们快速上手&#xff0c;如何去编写自动化测试脚本。 元素&#xff0c;在这个…