micro2440第一个裸板程序LED

发布者:tau29最新更新时间:2024-07-02 来源: elecfans关键字:micro2440  裸板程序  LED 手机看文章 扫描二维码
随时随地手机看文章

开发环境:

系统:Ubuntu 10.04.4

单板:micro2440

编译器:arm-linux-gcc-4.3.2

搭建开发环境详见Ubuntu 10.04.4开发环境配置。http://www.linuxidc.com/Linux/2013-04/83609.htm

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

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

nLED_1——>GPB5

nLED_2——>GPB6

nLED_3——>GPB7

nLED_4——>GPB8

根据s3c2440手册编写代码,包括2个文件1_led.s和Makefile.

文件·1_led.s:

.text
.global _start
_start: 
 ldr r0,=0x56000010
 mov r1,#0x00015400
 str r1,[r0]
 ldr r0,=0x56000014
loop: mov r1,#0x00000000
 str r1,[r0]
 bl delay
 mov r1,#0x00000ff0
 str r1,[r0]
 bl delay
 b loop

delay:
 mov r4,#100
del1: mov r5,#1000
del2: sub r5,r5,#1
 nop
 cmp r5,#1
 bne del2
 sub r4,r4,#1
 nop
 cmp r4,#1
 bne del1
 mov pc,lr

文件Makefile:

1_led.bin:1_led.s
 arm-linux-gcc -g -c -o 1_led.o 1_led.s
 arm-linux-ld -Ttext 0x00000000 -g 1_led.o -o 1_led_elf
 arm-linux-objcopy -O binary -S 1_led_elf 1_led.bin
 arm-linux-objdump -D 1_led_elf > 1_led.dis
clean:
 rm -f 1_led.bin *.o 1_led_elf 1_led.dis

linuxidc@linuxidc:~$ cd /home/linuxidc/Si/micro2440/1_led/
 
linuxidc@linuxidc:~/Si/micro2440/1_led$ make
 arm-linux-gcc -g -c -o 1_led.o 1_led.s
 arm-linux-ld -Ttext 0x00000000 -g 1_led.o -o 1_led_elf
 arm-linux-objcopy -O binary -S 1_led_elf 1_led.bin
 arm-linux-objdump -D 1_led_elf > 1_led.dis
 linuxidc@linuxidc:~/Si/micro2440/1_led$ ls
 1_led.bin  1_led.dis  1_led_elf  1_led.o  1_led.s  Makefile


烧写、测试:
 
很多人电脑都没有并口或者openjtag编程器,这里介绍直接用u-boot烧写。前提是单板已有u-boot并且支持网卡
 
我用NOR Flash里的u-boot烧写程序到NAND Flash,过程如下:
 
单板NOR Flash启动上电:

U-Boot 2012.04.01 (Oct 25 2012 - 22:47:25)

CPUID: 32440001
FCLK:      400 MHz
HCLK:      100 MHz
PCLK:      50 MHz
DRAM:  64 MiB
WARNING: Caches not enabled
Flash: 2 MiB
NAND:  256 MiB
In:    serial
Out:  serial
Err:  serial
Net:  dm9000
Warning: dm9000 MAC addresses don't match:
Address in SROM is        ff:ff:ff:ff:ff:ff
Address in environment is  00:0c:29:4d:e4:f4

Hit any key to stop autoboot:  0
SMDK2410 # printenv
baudrate=115200
bootargs=console=ttySAC0 root=/dev/mtdblock3
bootcmd=nand read 30000000 kernel;bootm 30000000
bootdelay=5
ethact=dm9000
ethaddr=00:0c:29:4d:e4:f4
gatewayip=172.16.1.1
ipaddr=172.16.1.133
mtddevname=u-boot
mtddevnum=0
mtdids=nand0=micro2440-0
mtdparts=mtdparts=micro2440-0:256k(u-boot),128k(params),2M(kernel),-(rootfs)
netmask=255.255.255.0
partition=nand0,0
serverip=172.16.1.135
stderr=serial
stdin=serial
stdout=serial

Environment size: 476/131068 bytes
SMDK2410 # tftp 0x30000000 1_led.bin
dm9000 i/o: 0x20000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 00:0c:29:4d:e4:f4
could not establish link
Using dm9000 device
TFTP from server 172.16.1.135; our IP address is 172.16.1.133
Filename '1_led.bin'.
Load address: 0x30000000
Loading: #
done
Bytes transferred = 96 (60 hex)
SMDK2410 # nand erase 0 0x40000

NAND erase: device 0 offset 0x0, size 0x40000
Erasing at 0x20000 -- 100% complete.
OK
SMDK2410 # nand write 0x30000000 0 0x40000

NAND write: device 0 offset 0x0, size 0x40000
 262144 bytes written: OK
SMDK2410 # 

注意printenv发现网卡参数不对,需要设置如下:
 
SMDK2410 # set ipaddr 172.16.1.133
 SMDK2410 # set gatewayip 172.16.1.1
 SMDK2410 # set serverip 172.16.1.135
 SMDK2410 # save
 
接着单板断电,拨到NAND Flash启动,上电,4个LED灯就开始闪烁。


关键字:micro2440  裸板程序  LED 引用地址:micro2440第一个裸板程序LED

上一篇:Ubuntu 8.10 下移植 madplay 到 mini2440
下一篇:友善之臂Micro2440下的Embedded Linux的硬件时间设置

推荐阅读最新更新时间:2026-03-20 21:12

S3C2440开发学习——如何烧写程序
S3C2440的裸板烧录的方法有:并口,OpenJTAG口,nor flash的u-boot,J-link,TFTP。 并口:不常用。 OpengJTAG口:裸板烧录u-boot时,起关键的作用。通过oflash命令将u-boot烧录到nor flash,当u-boot烧录OK之后,开 发板可以进行正常的启动。 Nor flash 的u-boot:此种方法的前提是,已经使用OpenJTAG口将u-boot烧录到开发板的nor flash中。通过menu中的 down to NAND Flash 等选项,配合配合Dnw程序,可以完成USB传输kernel和root到开发板的过程。注意:USB 驱动的安装,参
[单片机]
TQ210——TFTP程序下载
1. 直接下载u-boot.bin到内存运行(使用DNW中的的210USB启动下载),在DNW中输入命令可以直接查看修改u-boot.bin 2. 通过tftp下载你需要下载的程序到内存 下载示例: tftp 30000000(指定程序led_on.bin下载到内存中的30000000地址上,这里可以设置任意一个大于1M(u-boot.bin的大小)左右的空间地址,防止指定程序led_on.bin覆盖u-boot.bin) 3.固化u-boot.bin到nandflash(防止开发板掉电后程序代码丢失) 4.通过tftp下载裸板程序到链接地址 printenv --- 打印环境信息 setenv ---设置环境变量
[单片机]
2440程序之inline关键字
将点灯程序中wait延时函数声明为inline函数。并修改makefile,将优化等级选成-O1或以上,那么wait函数将被嵌入main函数中。pc指针需要指向的地址也由0x30000038变为0x30000000。 需要修改的内容: 1.head.S中55行 改为ldr pc,=0x30000000 2.main.c中第9行 改为static inline void wait(volatile unsigned long dly) 3.Makefile中第10行 改为arm-linux-gcc -O1 -march=armv4 -c -o $@ $ 可以明显感受到wait内联后,执行效率得到了提升。 inl
[单片机]
2440程序之时钟初始化
LED对应的引脚是GPF4、GPF5、GPF6。 使用的编译器为arm-linux-gcc-4.5.1。 包括四个文件head.S main.c main.lds Makefile。 实验目的:把CPU主频提高到400Mhz。(FCLK:400 HCLK:100 PCLK:50) 2440使用MPLL和UPLL将来自晶振或外部时钟倍频至合适的频率,UPLL输出时钟供USB使用,MPLL输出时钟经过分频供CPU和AHB、APB使用。ARM920T使用FCLK,Memory、LCD、CAM等使用HCLK,PCLK供给WDT、PWM、ADC等使用。 ARM920T有三种工作方式,fastBus mode、sync
[单片机]
2440<font color='red'>裸</font><font color='red'>板</font><font color='red'>程序</font>之时钟初始化
Tiny210和Tiny4412程序烧写比较
1、Tiny4412启动时首先运行固化在芯片内部iROM中的程序,把启动设备(可能是EMMC/nand flash、SD、USB启动)特定位置处的程序读入片内存 (iRAM) ,并执行它,BL1又把启动设备上另一个特定位置处的程序读入片内内存,并执行它。这个被称为 BL2(Bootloader 2) ,是我们编写的源码。(详情可参考博文“Exynos4412的启动过程分析”)在汇编流水灯程序中我们通过mkbl2工具制作的BL2: sudo ./sd_fusing.sh /dev/sdc ../../../hardware/1th_led_s/led.bin 分析sd_fusing.sh可知: #################
[单片机]
对S3C2440程序设计(无操作系统)的抽象
在嵌入式领域中,几乎所有的设备控制和各种协议控制都在同一个嵌入式CPU当中,非常有利于对CPU Core和设备进行抽象。如果能对CPU Core和设备的各种控制进行抽象,人们在移植OS或者开发驱动程序时就没有必要对CPU进行非常深入的了解,不必要了解某个寄存器的某个位是控制什么的,也没有必要了解怎样初始化某个控制寄存器等等。 在利用控制器编写裸板应用程序时,编程人员只需要了解该控制器的初始化顺序以及初始化的内容而不需要了解初始化的具体细节就能完成应用程序。显然可以大大的提高工作效率,并且对于硬件的具体细节设置是在应用程序中最容易出错的地方,而利用控制器则可以大大的减少出错的可能性。 ARM是功能更加强大的单
[单片机]
Linux平台驱动-LED驱动(Micro2440 + linux 2.6.39)
由于LINUX使用了MINI2440的配置,MICRO2440与MINI2440的硬件资料基本一样。因此LED驱动也是通用的,默认的MINI2440配置已经添加对板上4个LED的支持,这里只需要对其配置和测试进行简单的说明。 a) menuconfig配置 MICRO2440的LED驱动被定义为一LED类平台设备,使用该类型驱动需要在menuconfig中打开对LED类设备的支持。 # make menuconfig Device Drivers --- -*- LED Support --- -*- LED Cl
[单片机]
Linux平台驱动-<font color='red'>LED</font>驱动(<font color='red'>Micro2440</font> + linux 2.6.39)
micro2440 LED驱动(装载和卸载模块)
micro2440所用光盘资料如下: 笔记本系统:fedora 13 (编译内核,配置交叉编译环境,详见手册) 台式机系统:windows XP 1、fedora13中: 2、建立一个C文件,取名为my_leds.c 输入以下代码: #include linux/miscdevice.h #include mach/regs-gpio.h #include linux/fs.h #include linux/pci.h #define DEVICE_NAME myleds static unsigned long led_table = { S3C2410_GPB5, S3C2410_GPB
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved