嵌入式linux裸板开发--点亮LED-创新互联-成都快上网建站

嵌入式linux裸板开发--点亮LED-创新互联


上一篇文章写的是linux下通过gcc完成程序源文件的编译执行的过程。以及makefile文件的编写,最后在终端平台输出myhello word!
有了这个基础,这次学习的就是通过linux编译生成的代码在ARM上完成硬件实现。因为还不涉及到系统移植,所以还是裸板程序开发。

创新互联是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的10多年时间我们累计服务了上千家以及全国政企客户,如垃圾桶等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致赞扬。

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主要控制引脚的工作模式(模式有:输入,输出,复用),其中每两位控制一个引脚的状态,从下图可以看出:
嵌入式linux裸板开发--点亮LED

引脚的高低电平由GPFDAT控制,每一位控制一个引脚,如图:
嵌入式linux裸板开发--点亮LED

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

#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<<(GPIO_Pin_4*2);         //GPF_4输出模式
    GPFDAT = ~(0X01 << (GPIO_Pin_4));      //GPF_4输出0
    return 0;
}

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

  1. arm-linux-gcc:主要在文件编译时,由(.C/.S)文件编程成.o目标文件时使用。
  2. arm-linux-ls:主要对所有.o目标文件链接生成一个可执行文件
  3. 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文件,执行结果如下图:

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

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

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

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

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网站栏目:嵌入式linux裸板开发--点亮LED-创新互联
标题路径:http://kswjz.com/article/egpii.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流