物联网之ARM体系结构及接口技术四(裸机开发)

裸机开发

开发板 

复杂  嵌入式产品

裸机驱动的开发步骤(最简例子  LED灯控制

1. 看电路图

    a. 找到我要控制的设备

    b. 找到设备在CPU侧的控制管脚(如GPX2_7)

2. 看芯片手册 (先看相关的中文文档,熟悉设备,再看手册)

    a. 搜索电路图里对应控制管脚的名称(如GPX2)

    b. 看目录找到对应的控制模块(如:6 General Purpose Input/Output (GPIO) Control)

    c. 看该模块的overview 了解该模块的大概功能

    d. 看控制寄存器(REGISTER DESCRIPTION)  重点,难点 

     注: 如果寄存器比较多什么办?

       看技术支持提供的例子程序, 找到需要修改的寄存器(常常只有几个)。

        部分厂商会提供配置软件,通过界面去配置功能, 我们只需使用配置好的寄存器值就可以了

3. 编程

       a. 定义要控制的寄存器的宏 (与手册里的寄存器地址对应起来)

       b. 设备初始化  (如设置GPIO为输出状态)

       c. 把功能分成最基本的小块,逐个实现 如点亮灯-> 在灭灯-> 加延时->闪烁-> 跑马灯

SOC片上系统

LED 灯控制程序

.equ  GPX2CON,0x11000C40

.equ  GPX2DAT,0x11000C44

   .section .text  

   .globl _start

_start:

      @set Pin OutPut

      ldr   r0,=GPX2CON

      ldr   r1,[r0]

      bic   r1,#0xF0000000

      orr   r1,#0x10000000

      str   r1,[r0]

@set Pin High Level for led on

ldr   r2,=GPX2DAT

     ldr   r3,[r2]

     orr   r3,#0x80

     str   r3,[r2]

loop_stop:  b   loop_stop

delay1s:

     ldr      r4,=0x1ffffff  

delay1s_loop:

     sub    r4,r4,#1

     cmp   r4,#0        

     bne    delay1s_loop

     mov   pc,lr

   .end

Makefile 编译程序

 CROSS = arm-none-linux-gnueabi-     注:指定交叉编译工具
 CC=$(CROSS)gcc 
 LD=$(CROSS)ld
 OBJCOPY=$(CROSS)objcopy
all: led.s
         $(CC) -g -c -o led.o led.s  
         $(LD) led.o -Ttext 0x43e00000 -o led.elf    
               注: -Ttext 指定链接地址为 0x43e00000  
        $(OBJCOPY)  -O binary -S led.elf led.bin  
               注:转换为 binary 格式的,这样在u-boot中才能直接运行
        $(CROSS)objdump -D led.elf > led.dis      
               注:objdump	-D 反汇编生成文件 led.dis  
clean:
        rm -f *.o *.elf *.bin *.dis 

嵌入式Linux交叉开发环境硬件基本组成

• 开发主机(Host)

• 目标机(Target)

• 连接介质

Linux开发环境 搭建

1. 虚拟机与window建立文件共享

   VM -> setting   -> Options -> ShareFolder->add E盘 -> Always enable

   $cd   /mnt/hgfs/E  该目录就是共享目录

2. 交叉编译工具安装

  拷贝gcc-4.6.4.tar.xz到linux系统中

  $ tar  xvf  gcc-4.6.4.tar.xz

  $ export PATH=xxx/gcc-4.6.4/bin:$PATH  

     xxx是 gcc-4.6.4解压后所在的目录 

  $ arm-n  按Tab键能补全为

    arm-none-linux-gnueabi-  表示安装成功

3. 看到串口信息

   连接串口线,安装串口驱动

   打开超级终端 选择对应串口 

 串口设置为  115200     flow control = none

 重上电能看到串口信息

4. 用串口传输文件 

   串口终端里输入

   loadb   40001000

   再选传送-> 发送文件->选择待发送的文件

   led.bin

   选协议为kermit ,点传送

5.  运行裸机程序

   go   40001000

猜你喜欢

转载自blog.csdn.net/weixin_39148042/article/details/82470461