ARM篇四--简单使用汇编点亮LED
一、前言
本篇使用华清远见的FS4412
开发板,对开发板的LED进行亮灭操作,知识包含GPIO寄存器介绍
、与ubuntu
下linux操作系统
通过进行交叉编译
生成开发板可执行代码
,通过本次实验来认识ARM开发板
的GPIO知识
。
二、准备工作
FS4412开发板
,我用的是华清远见的FS4412开发板- ubuntu下linux操作系统(包含交叉编译工具)
serial-com8
程序烧入执行工具- 开发板电路原理图、芯片手册
开发板资料、交叉编译工具、程序烧入工具下载(包含教程)
开发板可选择到华清远见官网进行租赁。
开发板图:
三、GPIO寄存器介绍
当拿到一个开发板时,可以不用着急关注它有多少个引脚,因为不同的芯片引脚都不同,本篇使用的Exynos 4412 芯片包含304个多功能输入/输出
接口引脚和164个内存接口引脚
,因此我们在最开始时,只需要关注需要用到的引脚,在根据电路原理图上,用到引脚的编号,去看数据手册。
1、LED电路原理图
引用
FS4412-DevBoard-V5
扩展板电路原理图与FS4412_CoreBoard_V2
核心板原理图
2、GPIO寄存器介绍
引用
(4412手册完整版)SEC_Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary
,第113页
GPX1PUD
与GPX1DRV
是控制上下拉寄存器与驱动寄存器,我们暂时不用管,重点在GPX1CON
与GPX1DAT
两个寄存器上。
2.1 GPX1PUD寄存器
引用
(4412手册完整版)SEC_Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary
,第355页
- 该寄存器地址是由
基地址0x1100 0000
偏移0x0C20
位得到的,地址是0x11000C20
,默认配置是0x0000 0000 - 该寄存器8位控制一个引脚的功能,
0~31
分别控制引脚GPX1_0~GPX1_7
共8个引脚。 - 本篇用到
输出功能
,也就是output
,写值为0x0000 0001
,其他功能用到的时候在介绍。
2.2 GPX1DAT寄存器
引用
(4412手册完整版)SEC_Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary
,第357页
- 该寄存器地址是由
基地址0x1100 0000
偏移0x0C24
位得到的,地址是0x11000C24
,默认配置是0x0000 0000 - 该寄存器
0~7位
控制引脚输入输出,其他位只读不能用,0~7位
每一位控制一个引脚的功能,分别控制引脚GPX1_0~GPX1_7
共8个引脚。 - 输入模式下
位置1为输出高电平
、位置0输出低电平
。
四、Makefile编写
ARM_Procedure = ARM_LED
compile = arm-none-linux-gnueabi-
CC = $(compile)gcc
LD = $(compile)ld
OBJCOPY = $(compile)objcopy
all:
$(CC) -c $(ARM_Procedure).s -o $(ARM_Procedure).o
$(LD) $(ARM_Procedure).o -Ttext 0x40008000 -o $(ARM_Procedure).elf
$(OBJCOPY) -O binary -S $(ARM_Procedure).elf $(ARM_Procedure).bin
clean:
rm $(ARM_Procedure).o $(ARM_Procedure).elf $(ARM_Procedure).bin
五、汇编代码编写
ARM_LED.s
:
.text
_start:
MAIN:
BL LED_INIT
operation:
BL LED_ON
BL DELAY
BL LED_OFF
BL DELAY
B operation
LED_INIT: @ GPIO初始化
LDR R1, =0x11000C20
LDR R2, =0x00000001
STR R2, [R1]
mov PC, LR
LED_ON: @ LED亮
LDR R1, =0x11000C24
LDR R2, =0x01
STR R2, [R1]
mov PC, LR
LED_OFF: @ LED灭
LDR R1, =0x11000C24
LDR R2, =0x00
STR R2, [R1]
mov PC, LR
DELAY: @ 延时
LDR R1, =100000000
LDR R2, =1
for:
SUB R1, R1, R2
cmp R1, R2
BNE for
mov PC, LR
stop:
B stop
.end
六、程序烧入
1.输入make
生成.bin文件
,将文件
2.将.bin文件
复制到共享文件夹
①
②
③
输入:
cp ARM_LED.bin /mnt/hgfs/cca
将文件复制到cc文件夹
3.打开serial-com8
,连接开发板(COM2
接口),烧入程序
①查看端口
②打开serial-com8设置
③接通开发板电源,迅速按enter
键,使其快速进入裸机模式。
④烧入程序
输入:
loadb 40008000
选择可执行文件烧入
烧入成功:
⑤执行程序
输入:
go 40008000
七、实验现象
到这里就结束啦!