GPIO实验

解压压缩包

ROM存放指令集

RAM存放变量,数据

CPU本身是不能直接控制硬件的,硬件一般是由其对应的控制器来控制,SOC中将各个硬件控制器的寄存器映射到了CPU地址空间中的一段范围,这样CPU就可以通过读写寄存器来间接控制硬件

LED实验步骤

实验步骤:

    1. 通过电路原理图分析LED的控制逻辑 - 高电平点亮、低电平熄灭(跟硬件和电路设计有关)

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

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

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

LED2的熄灭

makefile

LED3闪烁  .s 文件


.text
_start:
MAIN:
   BL LED_CONFIG
LOOP:
   BL LED_ON
   BL DELAY
   BL LED_OFF
   BL DELAY
   B LOOP

LED_CONFIG:
 LDR R2, =0X11000C20
 LDR R1, =0x00000001
 STR R1,[R2]
 MOV PC,LR

LED_ON:
    LDR R2, =0x11000c24
	LDR R1, =0x00000001
	STR R1, [R2]
	MOV PC,LR

 LED_OFF:
   LDR R2, =0x11000c24
   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

详解

步骤1:

找到LED3对应网络编号

网络编号为 CHG_FLT; 对应CPU内核引脚为GPX1_0

步骤2:FS4412手册上寻找控制此引脚的寄存器(共四个)

GPX1CON                       GPX1DAT          GPX1PUD               GPX1DRV

步骤3:代码控制GPX1CON   寄存器地址 0x11000c24

4位为一个位域,控制一个引脚,此寄存器控制8个引脚

【3:0】设为输出 output

机器码:0000 0000 0000 0000 0000 0000 0000 0001

16进制 0x0000 0001

步骤4: 配置GPX1DAT的前8位   此寄存器地址:0x11000c24

机器码:0000 0000 0000 0000 0000 0000 0000 0001

16进制 0x0000 0001

附 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).binary

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值