S3C2440启动流程与GPIO操作

S3C2440启动流程与GPIO操作

当我们学习一种新的语言时,首先会输出"hello world"程序,那么嵌入式领域引领我们的就是点灯。

启动流程

1.为什么要了解启动过程?
写完的程序要烧录到falsh中,系统启动过程需要要从flash中读取到内存中,不同flash介质类型,启动方式就会不一样,目前市场中主要流行有 Nor Flash、Nand Flash、Emmc;
在这里插入图片描述
通过手册第5章节,MEMORY CONTROLLER可以知道:
不论什么方式启动,系统会从0地址开始启动。

(1) Nor Flash启动时
"nor flash特性:能像内存一样读,但不能像内存一样写,所以可以从nor中直接读取程序并运行 "

Nor Flash的基地址为0,片内RAM地址为0x4000 0000
cpu读出nor上第一个指令(前4个字节),继续执行读出其他指令
(2) Nand Flash启动时
片内4k ram基地址为0
硬件把nand中的前4k内容复制到片内内存,cpu从0地址取出第一条指令开始执行

那我们如何点亮一个灯呢?

1.看原理图确定控制LED的引脚
通过下图可知,nLED1引脚连接在CPU的GPF4引脚上,我们通过程序将GPF4引脚拉低,即可点亮LED.
在这里插入图片描述
在这里插入图片描述

2.看主芯片手册确定如何设置并控制引脚
在这里插入图片描述
查阅主控芯片手册中GPIO寄存器,通过相关寄存器描述可知,需要先通过GPxCON设置GPIO引脚功能(输入、输出),再通过GPxDAT寄存器就可控制输出状态或读取输入状态。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

因此,设置GPFCON[9:8]=0b01,即GPF4配置为输出
设置GPFDAT[4]=1或0,即输出高电平或低电平

3.写程序

先看下几条汇编指令:

(1) LDR:读内存

LDR R0 ,[R1]
如:LDR R0 ,[R1]

翻译:假设R1的值是x,读取x地址上的数据保存到R0中

(2)STR:写内存

 如:STR R0,[R1]

翻译:假设R0的值是x,把x写入到R1地址中去

(3)B:跳转
(4)MOV:赋值

如:MOV R0,#0x100

翻译:把0x100赋值给R0
(5)伪指令

LDR R0,=0x12345678 

伪指令,会被拆分为几条RAM指令

思考?
为什么要引入伪指令,若 MOV R0,#12345678 这么会成立吗,明显是错误的,因为ARM指令是32位的,指令中有位表示mov,有些位表示R0,剩下的位不足表示这么大的数据,所以简单的值是可以的。

点灯代码:

/*
 * 点亮LED1: gpf4
 */

.text
.global _start

_start:

/* 配置GPF4为输出引脚
 * 把0x100写到地址0x56000050
 */
	ldr r1, =0x56000050
	ldr r0, =0x100	/* mov r0, #0x100 */
	str r0, [r1]


/* 设置GPF4输出高电平 
 * 把0写到地址0x56000054
 */
	ldr r1, =0x56000054
	ldr r0, =0	/* mov r0, #0 */
	str r0, [r1]

	/* 死循环 */
halt:
	b halt

编译Makefile:

all:
	arm-linux-gcc -c -o led_on.o led_on.S
	arm-linux-ld -Ttext 0 led_on.o -o led_on.elf
	arm-linux-objcopy -O binary -S led_on.elf led_on.bin
	arm-linux-objdump -D led_on.elf > led_on.dis
clean:
	rm *.bin *.o *.elf

思考?
写的代码为什么不是.c 或者是main函数?
如果做过单片机的同学会知道,我们直接写main函数就可以了,那是因为厂家把单片机的启动文件都给写好了,就是xxx.S文件,裸机没有任何厂家的代码,所以需要自己实现.S文件,同样把点灯的动作写入到了.S文件中,从而实现点灯的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值