D12.GPIO实验-ARM体系结构与接口技术-嵌入式学习LV9

DAY12. GPIO实验


如果出现图片无法查看可能是网络问题,我用的GitHub+图床保存的图片,可以参考我另外一篇文章GitHub的使用方法含网络问题解决
GitHub使用教程含网络问题_github加速器_肉丸子QAQ的博客-CSDN博客


相关作业和资料已上传,请在主页自行查看

1. GPIO简介

  • GPIO(General-purpose input/output)

即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能

image-20230803163401235
  • 实验步骤
  1. 通过电路原理图分析LED的控制逻辑

  2. 通过电路原理图查找LED与Exynos4412的连接关系

  3. 通过数据手册分析GPIO中哪些寄存器可以控制LED

  4. 通过程序去操控对应的寄存器完成对LED的控制


2. GPIO寄存器分析

控制IO思路:

  1. 通过电路查看高低电平点亮
  2. 找到芯片相连的引脚
  3. 通过芯片数据手册查找相对应引脚的控制寄存器
  4. 最后查看手册如何修改寄存器从而控制电平输出
  • 实验步骤
  1. 通过电路原理图分析LED的控制逻辑 (以led2为例)

高电平点亮、低电平熄灭

image-20230803165726153

  1. 通过电路原理图查找LED与Exynos4412的连接关系

GPX2_7

image-20230803165804540

  1. 通过数据手册分析GPIO中哪些寄存器可以控制LED

GPX2CONGPX2DAT

image-20230803165830736

  1. 通过程序去操控对应的寄存器完成对LED的控制

操控寄存器

GPX2CON
  1. 地址
  • 基地址: 0x1100_0000
  • GPX2CON绝对地址: Base Address + 0x0C40,
  • 复位值: 0x0000_0000

image-20230803171045981

  1. GPX2CON寄存器只能设置模式,不能设置电平高低
  • GPX2CON[0] :控制GPX2_0引脚
  • [3:0]GPX2CON的哪几位控制
  • RW:该引脚可读可写
  • 0x0-F:不同值代表不同引脚功能
  • 0x00:默认值

image-20230803171454285

GPX2DAT
  1. 地址

image-20230803172144864

  1. 32位寄存器,但是只用了`[7:0]sads
  • 当您将端口配置为输入端口时对应的位是引脚状态。

  • 配置为输出端口时,则引脚状态应与相应的位。当端口配置为功能引脚,将读取未定义的值。

  • 意思就是:哪一位对应哪个引脚,0是低电平,1是高电平


3. LED实验

.text
_start:

MAIN:
	BL LED_CONFIG
LOOP:
	BL LED_ON
	BL DELAY
	BL LED_OFF
	BL DELAY
	B  LOOP
@GPX2CON寄存器
LED_CONFIG:
	LDR R2, =0x11000c40
	LDR R1, =0x10000000
	STR R1, [R2]
	MOV PC, LR

@GPX2DAT寄存器
LED_ON:
	LDR R2, =0x11000c44
	LDR R1, =0x00000080
	STR R1, [R2]
	MOV PC, LR

LED_OFF:
	LDR R2, =0x11000c44
	LDR R1, =0x00000000
	STR R1, [R2]
	MOV PC, LR
@延时函数
DELAY:
	LDR R1, =100000000
L:
	SUB R1, R1, #1
	CMP R1, #0
	BNE L
	MOV PC, LR

STOP:
	B STOP

.end



不能直接使用我们安装的编译器进行编译,所以我们需要使用Makefile进行特殊处理

TARGET = led-asm
CRORSS_COMPILE = arm-none-linux-gnueabi-
CC = $(CRORSS_COMPILE)gcc
LD = $(CRORSS_COMPILE)ld
OBJCOPY = $(CRORSS_COMPILE)objcopy

all:
	$(CC) -c $(TARGET).s -o $(TARGET).o
	$(LD) $(TARGET).o -Ttext 0x40008000 -o $(TARGET).elf
	$(OBJCOPY) -O binary -S $(TARGET).elf $(TARGET).bin

clean:
	rm $(TARGET).o $(TARGET).elf




从这里可以看出使用汇编进行编写代码十分的复杂,在后面的课程里面将使用C语言去编写,此次是为了巩固汇编的知识点

4. 作业

同上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肉丸子QAQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值