嵌入式linux裸板,嵌入式linux裸板开发--点亮LED

上一篇文章写的是linux下通过gcc完成程序源文件的编译执行的过程。以及makefile文件的编写,最后在终端平台输出myhello word!

有了这个基础,这次学习的就是通过linux编译生成的代码在ARM上完成硬件实现。因为还不涉及到系统移植,所以还是裸板程序开发。

1.源代码编写

ARM裸板程序需要代码原料主要包括:汇编文件,C文件,makefile文件。每个文件都有各自功能。

(1)汇编文件

完成关看门狗;配置时钟;初始化sdram;设置栈;以及跳转到C函数执行入口(相当于main函数),代码如下(该例程不需要配置时钟和sdram)。

@******************************************************************************

@ File:crt0.S

@ 功能:通过它转入C程序

@******************************************************************************

@注:正常汇编程序还需要初始化时钟,SDRAM功能,但对于点亮LED不需要。直接使用12Mhz

.text

.global _start

_start: @程序代码段开始处,各段在链接脚本定义

ldr r0,=0x53000000 @看门狗控制寄存器地址(32位地址赋值语句,r0地址为0x53000000)

@ ldr和mov区别就是,ldr传输32位数据,而mov只能传8位数

mov r1, #0x0 @立即数赋值给r1寄存器

str r1, [r0] @把r1寄存器内的数据0x0给r0地址

@以上三条语句为看门狗控制寄存器赋值为0

ldr sp,= 4*1024 @设置堆在大小为4K(NAND FLASH前4k)

bl main @跳转 到main函数,同时保存了下一条指令地址

haltloop:

(2)C文件

汇编的代码量相对较少,只执行一些必要的初始化功能,真正功能部分在C文件里。C文件主要执行:寄存器地址宏定义;外设初始化;功能实现等。

本例点亮的led引脚是GPF4,因此需要查询2440的参考手册,查看GPF的相关寄存器地址,主要配置的寄存器是GPFCON(控制寄存器)和GPFDAT(数据寄存器)。GPFCON主要控制引脚的工作模式(模式有:输入,输出,复用),其中每两位控制一个引脚的状态,从下图可以看出:

cc2db0e6e53dbc43ddaea75b7de452b4.png

引脚的高低电平由GPFDAT控制,每一位控制一个引脚,如图:

f8d8bab83fac514dbe1d80d46c3e8dd8.png

所以学会看芯片手册还是很重要的,明白各个寄存器并进行编程,同时应该掌握移位操作,在寄存器编程比较常用。该部分代码如下:

#define GPFCON (*(volatile unsigned long*)0x56000050)

#define GPFDAT (*(volatile unsigned long*)0x56000054)

#define GPFUP (*(volatile unsigned long*)0x56000058)

#define GPIO_Pin_0 ((volatile unsigned char)0x00)

#define GPIO_Pin_1 ((volatile unsigned char)0x01)

#define GPIO_Pin_2 ((volatile unsigned char)0x02)

#define GPIO_Pin_3 ((volatile unsigned char)0x03)

#define GPIO_Pin_4 ((volatile unsigned char)0x04)

int main()

{

GPFCON = 0X01<

GPFDAT = ~(0X01 << (GPIO_Pin_4)); //GPF_4输出0

return 0;

}

(3)makefile文件

编写编译规则,和上篇文章原理一样。linux有专门针对ARM的编译工具,主要用到的有这个3个:

arm-linux-gcc:主要在文件编译时,由(.C/.S)文件编程成.o目标文件时使用。

arm-linux-ls:主要对所有.o目标文件链接生成一个可执行文件

arm-linux-objcopy:主要对可执行文件进行二进制转换成.bin可以烧录用的文件

文件代码如下:

led_on.bin : crt0.S led_lighton.c

arm-linux-gcc -g -c -o crt0.o crt0.S

arm-linux-gcc -g -c -o led_lighton.o led_lighton.c

arm-linux-ld -Ttext 0x0000000 -g -o led_on_elf crt0.o led_lighton.o

arm-linux-objcopy -O binary -S led_on_elf led_on.bin

clean:

rm -f led_on.bin led_on_elf *.o

上述的3个文件分别为:crt0.S,led_lighton.c,Makefile。这是最简单的例程文件了,合适入门。代码文件下载地址链接:

http://download.csdn.net/download/ludaoyi88/10151739

1.文件编译链接

汇编文件和C文件需要编译链接后生成可执行文件,可执行文件再转换成.bin二进制文件,才能烧录到开发板上执行。而这些编译链接与转换都在makefile里写好,只需在linux终端输入make命令执行即可。

通过secureCRE远程登录到linux主机(这里用虚拟机),FTP文件传输工具连接到linux主机,在Windows下编写上述3个代码文件,整个过程和上篇文章一样,不再赘述。

将3个代码文件上传上linux主机的相关文件路径下,在终端键入make命令,执行makefile文件,执行结果如下图:

c6a24ca0cbbb5819ec939fef5bb9d0f7.png

上述可以看到生成了led_on.bin的二进制文件,将此文件烧录到开发板,烧录方法可以用:oflash,dnw,tftpd,nfs等方法下载,前3种方法之前文章有讲解使用方法。这里使用Windows下由dnw下载程序,先将二进制文件传入window再下载(开发板应拨码至nand)。如图:

b647ee348b83dc2727f9f1aaab758ba2.png

下载成功后,复位开发板,可以看到一个led灯变亮。效果如图(成功咯O(∩_∩)O哈哈~)。这仅仅是裸板开发的入门,如果有其他外设话就复杂了,同志仍需努力!

f75dfdad87daed05e79f6c01258869bf.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值