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.hqwc.cn/news/55121.html

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

相关文章

无涯教程-Perl - do...while 语句函数

与 for 和 while 循环不同,它在循环的顶部测试循环条件,而 do ... while 循环在以下位置检查其条件:循环的底部。 do ... while 循环与while循环相似,除了保证do ... while循环至少执行一次。 do...while - 语法 do {statement(s); }while(…

Devops系统中jira平台迁移

需求:把aws中的devops系统迁移到华为云中,其中主要是jira系统中的数据迁移,主要方法为在华为云中建立一套 与aws相同的devops平台,再把数据库和文件系统中的数据迁移,最后进行测试。 主要涉及到的服务集群CCE、数据库mysql、弹性文件服务SFS、数据复制DRS、弹性负载均衡ELB。 迁…

pytorch学习——如何构建一个神经网络——以手写数字识别为例

目录 一.概念介绍 1.1神经网络核心组件 1.2神经网络结构示意图 1.3使用pytorch构建神经网络的主要工具 二、实现手写数字识别 2.1环境 2.2主要步骤 2.3神经网络结构 2.4准备数据 2.4.1导入模块 2.4.2定义一些超参数 2.4.3下载数据并对数据进行预处理 2.4.4可视化数…

华为QinQ技术的基本qinq和灵活qinq 2种配置案例

基本qinq配置: 运营商pe设备在收到同一个公司的ce发来的的包,统一打上同样的vlan ,如上图,同一个家公司两边统一打上vlan 2,等于在原内网vlan 10或20过来的包再统一打上vlan 2的标签,这样传输就不会和其它…

mysql进阶-修改linux服务器中MySQL的字符集

1.背景 linux中mysql8默认的字符集是latin1,在插入中文时会报错,所以一般在配置好mysql时需要修改字符集为utf8【又叫utfmb3,一般开发够用,一个字符用3个字节表示】或者utfmb4【一个字符用4个字节表示,如果存储emoji表情&#xf…

创建者模式-单例模式

文章目录 一、创建者模式1. 单例设计模式1.1 单例模式的结构1.2 单例模式的实现(1)饿汉式-方式1(静态变量方式)(2)饿汉式-方式2(静态代码块方式)(3)懒汉式-方…

CS 144 Lab Four 收尾 -- 网络交互全流程解析

CS 144 Lab Four 收尾 -- 网络交互全流程解析 引言Tun/Tap简介tcp_ipv4.cc文件配置信息初始化cs144实现的fd家族体系基于自定义fd体系进行数据读写的adapter适配器体系自定义socket体系自定义事件循环EventLoop模板类TCPSpongeSocket详解listen_and_accept方法_tcp_main方法_in…

SSL原理详解

SSL协议结构: SSL协议分为两层,下层为SSL记录协议,上层为SSL握手协议、SSL密码变化协议和SSL警告协议。 1.下层为SSL记录协议,主要作用是为高层协议提供基本的安全服务 建立在可靠的传输之上,负责对上层的数据进行分块…

【数组数组】应用

一.题目 样例输入&#xff1a; 5 7 1 5 1 5 5 3 3 1 1 样例输出&#xff1a; 1 2 1 1 0 二.分析 有两个数据&#xff1a;x&#xff0c;y。 我们不妨先将x排序&#xff0c;再判断y&#xff0c;若小于&#xff0c;就即可。 这是暴力的思路 for(int i1;i<n;i){int ans0;for(…

前端页面--视觉差效果

代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><link rel"stylesheet" href"https://un…

51单片机IIC方式驱动oled屏代码示例

以IIC方式驱动oled屏特点就是四根线&#xff0c;分别是GND,VCC,SCL,SDA。前面两根很好理解&#xff0c;GND接地&#xff0c;VCC电源正极。SCL接时钟信号&#xff0c;SDA接双向数据信号。在51单片机电路中&#xff0c;没有明确表示SCL和SDA的数据接口&#xff0c;需要自定义。 而…

【深度学习】Vision Transformer论文,ViT的一些见解《 一幅图像抵得上16x16个词:用于大规模图像识别的Transformer模型》

必看文章&#xff1a;https://blog.csdn.net/qq_37541097/article/details/118242600 论文名称&#xff1a; An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale 论文下载&#xff1a;https://arxiv.org/abs/2010.11929 官方代码&#xff1a;https:…