头一次写博文,在光棍节这一天
看了韦东山老师的S3C6410裸板程序视频,做一下学习笔记
注:将6410设为nand-flash启动后,硬件会自动将nand-flash中前8K内容复制到片内8K内存,然后从内存的0地址开始运行。
编译环境:arm-linux-gcc
程序功能:led灯按0—15的顺序依次显示
工作原理:将led对应引脚设为输出模式,然后给对应的引脚低电平就可以点亮对应的led了
百度网盘源码文件:
http://pan.baidu.com/s/1zic7C
从01-Tiny6410硬件手册-20110805.pdf文档中可以看到LED所占用的GPIO引脚为GPK4-7
查看S3C6410数据手册
可以看到GPK4-7属于GPKCON0寄存器,分别设为输出模式(可以通过写寄存器,点亮LED)
GPKDAT数据寄存器,给相应的位写0就可以点亮LED了
接下来说一下烧写流程
首行,准备一个SD卡,用光盘上带的SD-Flasher工具,将superboot-20110727.bin烧写到SD卡上,将卡插到开发板上
连接好串口线(我用的是USB转串口),电源线,数据线,
将开发板设为SD—BOOT模式
打开超级终端,我用的是XSHELL,可以从我的网盘上下载: http://pan.baidu.com/s/1w0iMV
查看所占用的端口号,我的是COM8
安装好XSHELL后,新建连接,随便起个连接名:如tiny6410,选择协议为:SERIAL
点击SSH下的SERIAL设置属性如下
点击连接就可以了,出现下图就表示连接成功了,或者可以用系统自带的超级终端
打开开发板开关,可以看到如下画面就说明superboot烧写成功了,
输入f,格式化nand-flash
格式化完成后输入a将程序下载到nand-flash,打开光盘带的DNW软件,点击USB port下的Transmit/Restore,选择生成的二进制文件led.bin,双击即可
关闭开发板开关,将启动模式选择为NAND,打开开关,奇迹出现了…………
下面贴源码
程序运行流程
1.把外设的基地址告诉CPU
2.关看门狗
3.设置栈
4.调用C函数
文件名:start.S
.globl _start
_start:
/* 硬件相关的设置
/* Peri port setup
ldr r0, =0x70000000
orr r0, r0, #0x13
mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff)
/* 关看门狗
/* 往WTCON(0x7E004000)写0
ldr r0, =0x7E004000
mov r1, #0
str r1, [r0]
/* 设置栈
ldr sp, =8*1024
bl xxxxx
halt:
b halt
文件名:led.c
void delay()
{
volatile int i = 500000;
while (i--);
}
int xxxxx()
{
int i = 0;
volatile unsigned long *gpkcon = (volatile unsigned long *)0x7F008800;
volatile unsigned long *gpkdat = (volatile unsigned long *)0x7F008808;
gpk4,5,6,7设为输出引脚
*gpkcon &= 0xffff;
*gpkcon |= 0x11110000;
while (1)
{
*gpkdat = ((*gpkdat & (~0xf<<4)) | ~i<<4);
i++;
if (i == 16)
i = 0;
delay();
}
return 0;
}
文件名:Makefile
led.bin: start.o led.o
arm-linux-ld -Ttext 0 -o led.elf start.o led.o
/将两个文件连接生成 led.elf文件,链接地址为0(通过-Ttext 0指定)
arm-linux-objcopy -O binary led.elf led.bin
/用led.elf文件生成二进制文件led.bin(-O binary表示生成二进制文件)
arm-linux-objdump -D led.elf > led.dis
/用led.elf文件反汇编为led.dis文件
start.o : start.S
arm-linux-gcc -o start.o start.S -c
led.o : led.c
arm-linux-gcc -o led.o led.c -c
/说明:首先将start.S只编译(-c)生成start.o,然后将led.c只编译(-c)生成led.o
clean:
rm *.o led.elf led.bin led.dis