您的位置:首页 > 其它

ok6410第一个裸板程序led

2013-04-23 14:06 453 查看
开发环境:

系统:ubuntu10.04.4

单板:ok6410

编译器:arm-linux-gcc-4.3.2

搭建开发环境详见ubuntu10.04.4开发环境配置。

目标:实现ok6410单板上4个led灯闪烁

第一个程序很简单,用汇编实现。硬件如下:

NLED1——>GPM0

NLED2——>GPM1

NLED3——>GPM2

NLED4——>GPM3

根据s3c6410手册编写代码,包括2个文件start.S和Makefile.

文件start.S:

.globl_start

_start:

/*硬件相关的设置*/

/*Periportsetup*/

ldrr0,=0x70000000

orrr0,r0,#0x13

mcrp15,0,r0,c15,c2,4@256M(0x70000000-0x7fffffff)

/*关看门狗*/

/*往WTCON(0x7E004000)写0*/

ldrr0,=0x7E004000

movr1,#0

strr1,[r0]

/*设置GPMCON让GPM0/1/2/3作为输出引脚*/

ldrr1,=0x7F008820

ldrr0,=0x1111

strr0,[r1]

/*设置GPMDAT让GPM3输出0*/

ldrr1,=0x7F008824

movr0,#0

loop:	mov	r0,#0x0
str	r0,[r1]
bl	delay
mov	r0,#0x0f
str	r0,[r1]
bl	delay
b	loop

delay:
mov	r4,#0x400
del1:	mov	r5,#0x1000
del2:	sub	r5,r5,#1
cmp	r5,#1
bne	del2
sub	r4,r4,#1
cmp	r4,#1
bne	del1
mov	pc,lr

halt:	b	halt


文件Makefile:

1_led.bin:start.o
arm-linux-ld-Ttext0-o1_led.elfstart.o
arm-linux-objcopy-Obinary1_led.elf1_led.bin
arm-linux-objdump-D1_led.elf>1_led.dis

start.o:start.S
arm-linux-gcc-ostart.ostart.S-c

clean:
rm*.o1_led.elf1_led.bin1_led.dis


编译:

change@change:~$cdSi/OK6410/1_led/

change@change:~/Si/OK6410/1_led$ls

Makefilestart.S

change@change:~/Si/OK6410/1_led$make

arm-linux-gcc-ostart.ostart.S-c

arm-linux-ld-Ttext0-o1_led.elfstart.o

arm-linux-objcopy-Obinary1_led.elf1_led.bin

arm-linux-objdump-D1_led.elf>1_led.dis

change@change:~/Si/OK6410/1_led$cp1_led.bin/home/change/work/tftpboot/

下面会用到tftp,tftp配置详见ubuntu10.04.4开发环境配置。

烧写、测试:

考虑到大多数电脑没有并口也没有仿真器,直接用板子自带的u-boot测试程序,把程序放到内存运行。后期会写操作nand的自我更新程序,那时再下载程序就方便了。

U-Boot2012.04.01(Jan112013-14:47:24)forSMDK6410

CPU:S3C6400@532MHz
Fclk=532MHz,Hclk=133MHz,Pclk=66MHz(ASYNCMode)
Board:SMDK6410
DRAM:128MiB
WARNING:Cachesnotenabled
Flash:0KB
NAND:selects3c_nand_oob_mlc_64
id_data[0]=0xecid_data[1]=0xd5id_data[2]=0x94id_data[3]=0x29id_data[4]=0x34id_data[5]=0x41id_data[6]=0xecid_data[7]=0xd5NAND_ECC_NONEselectedbyboarddriver.Thisisnotrecommended!!
2048MiB
realpagevalue:255
pagevalue:255
retvalue:0
***Warning-badCRC,usingdefaultenvironment

In:serial
Out:serial
Err:serial
Net:dm9000
Hitanykeytostopautoboot:0

#####100askBootloaderforOpenJTAG#####

Downloadu-boottoNandFlash
[k]DownloadLinuxkerneluImage
[j]Downloadroot_jffs2image
[y]Downloadroot_yaffsimage
[d]DownloadtoSDRAM&Run
[z]DownloadzImageintoRAM
[g]getfile,andwritetonandflash0block
[f]FormattheNandFlash
[s]Setthebootparameters
[b]Bootthesystem
[r]Rebootu-boot
[q]Quitfrommenu
Enteryourselection:q
SMDK6410#printenv
baudrate=115200
bootargs=console=ttySAC0,115200root=/dev/mtdblock3
bootcmd=nandread0x500000000x600000x200000;bootm0x50000000
bootdelay=5
ethact=dm9000
ethaddr=00:0c:29:4d:e4:f4
ipaddr=172.16.1.111
netmask=255.255.255.0
serverip=172.16.1.114
stderr=serial
stdin=serial
stdout=serial

Environmentsize:313/524284bytes
SMDK6410#setipaddr172.16.1.133
SMDK6410#setgatewayip172.16.1.1
SMDK6410#setserverip172.16.1.135
SMDK6410#ping172.16.1.135
dm9000i/o:0x18000000,id:0x90000a46
DM9000:runningin16bitmode
MAC:00:0c:29:4d:e4:f4
operatingat100Mfullduplexmode
Usingdm9000device
host172.16.1.135isalive
SMDK6410#save
SavingEnvironmenttoNAND...
Env_nand.c...
env_nand.csaveenvstart1
env_nand.csaveenvstart2
res=1472200204len=524284
ErasingNand...
Erasingat0x80000--100%complete.
WritingtoNand...done
SMDK6410#tftp0x520000001_led.bin
dm9000i/o:0x18000000,id:0x90000a46
DM9000:runningin16bitmode
MAC:00:0c:29:4d:e4:f4
operatingat100Mfullduplexmode
Usingdm9000device
TFTPfromserver172.16.1.135;ourIPaddressis172.16.1.133
Filename'1_led.bin'.
Loadaddress:0x52000000
Loading:#
done
Bytestransferred=128(80hex)
SMDK6410#go0x52000000
##Startingapplicationat0x52000000...

u-boot下执行完上述命令。ok6410单板上4个LED即开始闪烁。上面的u-boot是我仿照韦老师的jz2440移植的,需要源码的留邮箱。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: