解压压缩包
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