tiny6410烧写程序

头一次写博文,在光棍节这一天
看了韦东山老师的S3C6410裸板程序视频,做一下学习笔记
注:将6410设为nand-flash启动后,硬件会自动将nand-flash中前8K内容复制到片内8K内存,然后从内存的0地址开始运行。
编译环境:arm-linux-gcc
程序功能:led灯按0—15的顺序依次显示
工作原理:将led对应引脚设为输出模式,然后给对应的引脚低电平就可以点亮对应的led了
百度网盘源码文件:

tiny6410裸机程序之一、led流水灯
从01-Tiny6410硬件手册-20110805.pdf文档中可以看到LED所占用的GPIO引脚为GPK4-7
查看S3C6410数据手册
tiny6410裸机程序之一、led流水灯

tiny6410裸机程序之一、led流水灯

可以看到GPK4-7属于GPKCON0寄存器,分别设为输出模式(可以通过写寄存器,点亮LED)

tiny6410裸机程序之一、led流水灯

GPKDAT数据寄存器,给相应的位写0就可以点亮LED了

接下来说一下烧写流程
首行,准备一个SD卡,用光盘上带的SD-Flasher工具,将superboot-20110727.bin烧写到SD卡上,将卡插到开发板上
连接好串口线(我用的是USB转串口),电源线,数据线,
将开发板设为SD—BOOT模式
打开超级终端,我用的是XSHELL,可以从我的网盘上下载: http://pan.baidu.com/s/1w0iMV
查看所占用的端口号,我的是COM8 tiny6410裸机程序之一、led流水灯

安装好XSHELL后,新建连接,随便起个连接名:如tiny6410,选择协议为:SERIAL
tiny6410裸机程序之一、led流水灯

点击SSH下的SERIAL设置属性如下
tiny6410裸机程序之一、led流水灯

点击连接就可以了,出现下图就表示连接成功了,或者可以用系统自带的超级终端

tiny6410裸机程序之一、led流水灯

打开开发板开关,可以看到如下画面就说明superboot烧写成功了,
tiny6410裸机程序之一、led流水灯

输入f,格式化nand-flash
tiny6410裸机程序之一、led流水灯

格式化完成后输入a将程序下载到nand-flash,打开光盘带的DNW软件,点击USB port下的Transmit/Restore,选择生成的二进制文件led.bin,双击即可

tiny6410裸机程序之一、led流水灯


关闭开发板开关,将启动模式选择为NAND,打开开关,奇迹出现了…………
tiny6410裸机程序之一、led流水灯


下面贴源码
程序运行流程
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值