Linux /home/program/test2 需要三个文件,led.lds , led.S和Makefile三个文件;
---------------------------------led.S-----------------------------------------------
@****************************
@File:LED1
@
@功能:用汇编点亮一个LED
@****************************
.equ WTCON, 0x53000000 @看门狗控制寄存器地址
.equ GPBCON, 0x56000010 @GPB控制寄存器地址
.equ GPBDAT, 0x56000014 @GPB数据寄存器地址
.equ INTMSK, 0x4a000008 @中断屏蔽寄存器地址
.equ INTSUBMSK, 0x4a00001c @子中断屏蔽寄存器地址
.text
.global _start
_start:
@建立中断向量表
b reset @复位
ldr pc, _undefined_instruction @未定义指令向量
ldr pc, _software_interrupt @软件中断向量
ldr pc, _prefetch_abort @预取指令异常向量
ldr pc, _data_abort @数据操作异常向量
ldr pc, _not_used @未使用
ldr pc, _irq @irq中断向量
ldr pc, _fiq @fiq中断向量
_undefined_instruction:
b .
_software_interrupt:
b .
_prefetch_abort:
b .
_data_abort:
b .
_not_used:
b .
_irq:
b .
_fiq:
b .
reset:
@复位
bl set_svc
bl disable_watchdog
bl disable_irq
bl init_led
bl light_led
halt:
b halt
set_svc:
@设置为管理模式
mrs r0,cpsr
bic r0,r0,#0x1f
orr r0,r0,#0xd3
msr cpsr,r0
mov pc,lr
disable_watchdog:
@关闭看门狗
ldr r0, =WTCON
mov r1, #0x0
str r1, [r0]
mov pc, lr
disable_irq:
@屏蔽中断
ldr r1, =0xffffffff
ldr r0, =INTMSK
str r1, [r0]
ldr r1, =0x7fff
ldr r0, =INTSUBMSK
str r1, [r0]
mov pc, lr
init_led:
@清除GPB5的初始电平
ldr r0, =GPBDAT
mov r1, #0x20
str r1, [r0]
@设置GPB5为输出状态
ldr r0, =GPBCON
mov r1, #0x400
str r1, [r0]
mov pc, lr
light_led:
@点亮LED1
ldr r0, =GPBDAT
mov r1, #0x0
str r1, [r0]
mov pc, lr
---------------------------------led.lds---------------------------------------------
SECTIONS {
. = 0x30008000;
. = ALIGN(4);
.text :
{
led.o (.text)
*(.text)
}
. = ALIGN(4);
.rodata : {*(.rodata)}
. = ALIGN(4);
.data : {*(.data)}
. = ALIGN(4);
bss_start = .;
.bss : {*(.bss) *(COMMON)}
bss_end = .;
}
---------------------------------Makefile-------------------------------------------
all: led.o
arm-linux-ld -Tled.lds -o led.elf led.o
arm-linux-objcopy -O binary led.elf led.bin
led.o : led.S
arm-linux-gcc -g -o led.o -c led.S
.PHONY: clean
clean:
rm *.o led.elf led.bin
--------------------------------------------------------------------------------------------
操纵步骤:
1.使用Linux中的交叉编译环境--make,,产生led.bin 文件
2.TQ2440开发板连接电脑:
(1).TQ2440的串口线通过USB转串口线连接电脑的USB接口(如COM2);
(2).TQ2440的下载线连接电脑的USB接口.
如果使用的是虚拟机(VM10)的Linux(RHEL 6.3),点击虚拟机如图标志;进行TQ2440开发板与Linux连接。
3.打开windows中的secureCRT软件,设置该软件
4.把TQ2440的启动选择开关拨到Nor flash ;打开TQ2440的电源开关;这时secureCRT会有信息打印出来:
对secureCRT进行操作,输入 “9”,回车;会标记开发板中的Nand flash中的坏块;
输入“1”,进行裸机程序的下载等待……
5.在Linux中安装dnw模块,
(1).使用secureCRT连接Linux(RHEL 6.3);或者在Linux中的终端中进行操作的话,这一步就省略了;
(2).安装dnw模块;安装之前也可以查看Linux中是否已经存在该模块:使用命令:lsmod,就会列出所有已经安装好的模块,如果存在dnw就忽略这一步。如果不存在就进入dnw_usb.ko所在的目录,使用命令:insmod dnw_usb.ko,
(3)使用dnw进行led.bin文件的下载:/……/dnw /……/led.bin 30000000
/……/表示后面的文件所在的目录
如果dnw和led.bin在同一个目录那就可以忽略路径问题了,下面的例子如图:
经过上述5个步骤,led的裸机程序下载完毕;
把TQ2440的启动选择开关拨到Nand flash;重新打开电源,就会看到led1处于常亮的状态。表示程序下载成功,并正确运行!