第一个裸机程序---点亮led小灯

来源:互联网 发布:手机淘宝开不了店2017 编辑:程序博客网 时间:2024/05/16 01:26

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处于常亮的状态。表示程序下载成功,并正确运行!




0 0
原创粉丝点击