S3C2440 启动和点亮第一盏LED

一、S3C2440启动流程

1、S3C2440 内存映射图

S3C2440 User Manual可以知道S3C2440 可以从nand flash方式启动和不从nand flash.如下图:

2、启动方式选择

1、S3C2440是从0x0000 0000取出第一条指令并且执行。
2、OM0=0,OM1=0时,S3C2440nand flash 启动;S3C24400x0000 0000 地址会被映射到 芯片内部4KB的iram;芯片上电启动的时候nand flash的前4Kb的数据会自动被copy到到iram里面。而S3C2440会从iram里面取指并且执行。
3、OM0=0,OM1=1或者OM0=1,OM1=0S3C2440nor flash 启动,S3C24400x0000 0000地址会被映射nor flash,而S3C2440会从nor flash里面取指并且执行。
启动方式如下图:

二、点亮第一盏LED灯

1、原理图

我的板子的LED1 被连接到 S3C2440GPF4
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还有两章节没有写完(重新设计了一个可靠完善的协议,有点小复杂,程序也只写了一个框架),可能要到年后放假再补回来了;有时间会先写一些基础的内容(滑稽滑稽滑稽);

---------------------------------------

posted @ 2020-10-11 23:53  古澜  阅读(397)  评论(0编辑  收藏  举报