ok6410第一个裸板程序led

本文档详细介绍了如何在ubuntu 10.04.4环境下,使用arm-linux-gcc-4.3.2为ok6410单板编写并编译一个简单的汇编程序,使得4个LED灯闪烁。硬件连接遵循NLED1-GPM0, NLED2-GPM1, NLED3-GPM2, NLED4-GPM3的规则。开发过程包括编写start.S汇编源码,创建Makefile进行编译,最终通过tftp将1_led.bin烧写到板子上,利用u-boot运行程序进行测试。" 133040220,18784123,理解Python中的变量t,"['Python', '开发语言']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发环境:

系统:ubuntu 10.04.4

单板:ok6410

编译器:arm-linux-gcc-4.3.2

搭建开发环境详见ubuntu 10.04.4开发环境配置。

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

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

NLED1——>GPM0

NLED2——>GPM1

NLED3——>GPM2

NLED4——>GPM3

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

文件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]

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

	ldr r1, =0x7F008820

	ldr r0, =0x1111

	str r0, [r1]



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

	ldr r1, =0x7F008824

	mov r0, #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 -Ttext 0 -o 1_led.elf start.o
	arm-linux-objcopy -O binary 1_led.elf 1_led.bin
	arm-linux-objdump -D 1_led.elf > 1_led.dis

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

clean:
	rm *.o 1_led.elf 1_led.bin 1_led.dis


编译:

change@change:~$ cd Si/OK6410/1_led/
change@change:~/Si/OK6410/1_led$ ls
Makefile  start.S
change@change:~/Si/OK6410/1_led$ make
arm-linux-gcc -o start.o start.S -c
arm-linux-ld -Ttext 0 -o 1_led.elf start.o
arm-linux-objcopy -O binary 1_led.elf 1_led.bin
arm-linux-objdump -D 1_led.elf > 1_led.dis
change@change:~/Si/OK6410/1_led$ cp 1_led.bin /home/change/work/tftpboot/

下面会用到tftp,tftp配置详见ubuntu 10.04.4开发环境配置。

烧写、测试:

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

U-Boot 2012.04.01 (Jan 11 2013 - 14:47:24) for SMDK6410


CPU:     S3C6400@532MHz
         Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz (ASYNC Mode) 
Board:   SMDK6410
DRAM:  128 MiB
WARNING: Caches not enabled
Flash: 0 KB
NAND:  select s3c_nand_oob_mlc_64
id_data[0] = 0xec id_data[1] = 0xd5 id_data[2] = 0x94 id_data[3] = 0x29 id_data[4] = 0x34 id_data[5] = 0x41 id_data[6] = 0xec id_data[7] = 0xd5 NAND_ECC_NONE selected by board driver. This is not recommended !!
2048 MiB
realpage value:255
page value:255
ret value:0
*** Warning - bad CRC, using default environment

In:    serial
Out:   serial
Err:   serial
Net:   dm9000
Hit any key to stop autoboot:  0 

##### 100ask Bootloader for OpenJTAG #####
[n] Download u-boot to Nand Flash
[k] Download Linux kernel uImage
[j] Download root_jffs2 image
[y] Download root_yaffs image
[d] Download to SDRAM & Run
[z] Download zImage into RAM
[g] get file, and write to nand flash 0 block
[f] Format the Nand Flash
[s] Set the boot parameters
[b] Boot the system
[r] Reboot u-boot
[q] Quit from menu
Enter your selection: q
SMDK6410 # printenv
baudrate=115200
bootargs=console=ttySAC0,115200 root=/dev/mtdblock3
bootcmd=nand read 0x50000000 0x60000 0x200000;bootm 0x50000000
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

Environment size: 313/524284 bytes
SMDK6410 # set ipaddr 172.16.1.133
SMDK6410 # set gatewayip 172.16.1.1
SMDK6410 # set serverip 172.16.1.135
SMDK6410 # ping 172.16.1.135
dm9000 i/o: 0x18000000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 00:0c:29:4d:e4:f4
operating at 100M full duplex mode
Using dm9000 device
host 172.16.1.135 is alive
SMDK6410 # save
Saving Environment to NAND...
Env_nand.c...
env_nand.c saveenv start1
env_nand.c saveenv start2
 res = 1472200204 len = 524284
Erasing Nand...
Erasing at 0x80000 -- 100% complete.
Writing to Nand... done
SMDK6410 # tftp 0x52000000 1_led.bin
dm9000 i/o: 0x18000000, id: 0x90000a46 
DM9000: running in 16 bit mode
MAC: 00:0c:29:4d:e4:f4
operating at 100M full duplex mode
Using dm9000 device
TFTP from server 172.16.1.135; our IP address is 172.16.1.133
Filename '1_led.bin'.
Load address: 0x52000000
Loading: #
done
Bytes transferred = 128 (80 hex)
SMDK6410 # go 0x52000000
## Starting application at 0x52000000 ...

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




                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值