S3C2440 启动和点亮第一盏LED
一、S3C2440启动流程
1、S3C2440 内存映射图
从
S3C2440 User Manual
可以知道S3C2440
可以从nand flash
方式启动和不从nand flash
.如下图:
2、启动方式选择
1、
S3C2440
是从0x0000 0000
取出第一条指令并且执行。
2、OM0=0,OM1=0
时,S3C2440
从nand flash
启动;S3C2440
的0x0000 0000
地址会被映射到 芯片内部4KB的iram
;芯片上电启动的时候nand flash
的前4Kb的数据会自动被copy到到iram
里面。而S3C2440
会从iram
里面取指并且执行。
3、OM0=0,OM1=1
或者OM0=1,OM1=0
,S3C2440
从nor flash
启动,S3C2440
的0x0000 0000
地址会被映射nor flash
,而S3C2440
会从nor flash
里面取指并且执行。
启动方式如下图:
二、点亮第一盏LED灯
1、原理图
我的板子的
LED1
被连接到S3C2440
的GPF4
;
GPF4
的寄存器的使用这里就不贴出来了,可以去看S3C2440 User Manual
。
如下图:
2、程序
由于程序涉及到板级级的启动代码,所以点亮第一盏LED灯用汇编来写,程序如下:
.text /*定义代码段*/
.global _start /*标号_start是GNU连接器用来指定第一个要执行所必须的(只能出现在一个模块),.global将_start声明为全局可见*/
_start:
/* 点亮LED灯 GPF4 */
ldr r0, =0x56000050 /* GPFCON寄存器的地址 */
mov r1,#0x00000100
str r1,[r0] /* 将GPF4设置为 OUTPUT */
ldr r0, =0x56000054 /* GPFDAT 寄存器的地址 */
mov r1,#0
str r1,[r0] /* 这里为了简单就将GPFDAT的所有位都设置为0,也可以单独设置BIT4为0 */
loop:
b loop
3、MaKeFile
all:
arm-linux-gcc -c Led.S -o Led.o #编译
arm-linux-ld -Ttext 0 Led.o -o Led.elf #将text 段链接到0地址处
arm-linux-objcopy -O binary -S Led.elf Led.bin #将elf文件转换为bin文件
clean:
rm *.o *.elf *.bin
三、现象
将程序编译并且烧写到
S3C2440
里面就可以看到小灯亮了(这里就不贴图了,滑稽)
四、
---------------------------------------
唉,大半年没写博客了,写的没有之前顺畅了。先写点简单的找找感觉先。之前遗留的IAP还有两章节没有写完(重新设计了一个可靠完善的协议,有点小复杂,程序也只写了一个框架),可能要到年后放假再补回来了;有时间会先写一些基础的内容(滑稽滑稽滑稽);