GPIO简介

一、GPIO

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

LED实验步骤

实验步骤 以LED2灯 闪烁 为例

1. 通过电路原理图分析LED的控制逻辑	

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

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

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

第一步

得出结论高电平-亮 低电平-灭
GPIO简介_第1张图片

第二步

通过连接芯片那一端的网络标号CHG_COK 查看那个寄存器可以控制该LED灯
GPIO简介_第2张图片
在芯片电路设计图中可以看到是GPX2_7在控制着该LED2灯

第三步

查看芯片手册分析哪些寄存器可以控制LED2

GPIO简介_第3张图片

可以看到GPX2有四组
GPX2CON:配置GPX2寄存器
GPX2DAT:向内存发送数据(高/地电平)

通过LED与Exynos4412的连接关系可以看到用到的寄存器是GPX2_7(GPX2寄存器第七组)

GPIO简介_第4张图片
通过GPX2CON[7]来配置寄存器
配置了寄存器但是没有数据啊
然后得通过GPX2DAT来向GPX2CON[7]发送数据
GPIO简介_第5张图片

第四步

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

led_asm.s 文件


.text
_start:

MAIN:
	BL LED_CONFIG	//跳转
LOOP:
	BL LED_ON
	BL DELAY
	BL LED_OFF
	BL DELAY
	B  LOOP

/*控制LED2灯 配置寄存器*/
LED_CONFIG:
	LDR R2, =0x11000c40
	LDR R1, =0x10000000
	STR R1, [R2]
	MOV PC, LR

/*控制LED2灯 灭*/
LED_ON:
	LDR R2, =0x11000c44	//GPX2DAT 内存地址
	LDR R1, =0x00000080 //高电平
	STR R1, [R2]  //R2指向的0x11000c44内存空间地址写入R1的数据  (R2->0x11000c44 = R1)
	MOV PC, LR	// 将跳转之前 下一条的地址放回PC指令计数器中

/*控制LED2灯 亮*/
LED_OFF:
	LDR R2, =0x11000c44
	LDR R1, =0x00000000 //低电平
	STR R1, [R2]
	MOV PC, LR

/*LED2灯 灭和亮  之间间隔的时间*/
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
CROSS_COMPILE = arm-none-linux-gnueabi-
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
OBJCOPY = $(CROSS_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 $(TARGET).bin

你可能感兴趣的:(单片机,嵌入式硬件)