【OK210试用体验】裸机篇 -- 点亮第一个发光二极管 - 在线问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【OK210试用体验】裸机篇 -- 点亮第一个发光二极管

本帖最后由 q15920078530 于 2015-8-7 12:57 编辑

【OK210试用体验】裸机篇 -- 点亮第一个发光二极管
   
相信所有学过51等单片机的都知道,点亮第一个发光二极管是进行裸板程序开发的开始。对于不同阶段的不同芯片的点亮LED,所经过的步骤的有所不同,但是根本的还是不变。在这个第一个裸板程序--点亮LED中,我将不在windows下运用ADS等一气呵成的工具,走一条对自己是崭新的路,在Linux下用arm-linux-gcc交叉编译工具链来完成。

查看原理图

写程序来控制LED的亮灭之前,当然是要来看看原理图啦。打开 OK210 V1.1硬件资料原理图PDF   和 核心板原理图。    第一次看核心板原理图可能比较头晕,可以透过索引来寻找对应的引脚。通过此原理图我们可以知道,分别给XM0ADDRx(x对应四个LED,4、5、6、7)低电平,则LED亮,反之则灭。

配置寄存器

查看好原理图之后,在写程序之前我们还要查看对应控制该GPIO的寄存器,通过配置其来完成驱动。这个时候三星大哥的官方资料的作用就无比巨大了,参考 OK210 V1.1三星原厂资料s5pv210HWUser Manual 下的文档 S5PV210_UM_REV1.1.pdf 。找到一下页面。
这里我们要配置两个寄存器, 配置寄存器CON和输入输出模式寄存器DAT,我们在用交叉编译器编写程序当中,要先知道寄存器的地址,才能去配置所要的功能,图中我们可以知道MP0_4 CONTROL REGISTER的地址是0xE020_0340,MP0_4DAT, R/W, Address = 0xE020_0344。我们的目标是点亮第一个LED,所以我们把此对应的CON配置成输出模式,即0b0001,对应的DAT寄存器的有效位是8位,如果我们点亮的是第4位,则是0x10。

编写程序

点亮一个LED的程序,代码量是可想而知,所以我们直接用ARM汇编来编写。在ubuntu的某个目录文件夹下建立一个led.S文件,输入:
  /* led_on.S */
  .text
  .global _start
  _start:
      ldr r0, =0xE0200340      @ configure GPIO_MP0_4 CONFIG REGIDTER
      ldr r1, =0x00010000
      str r1, [r0]
  
      ldr r0, =0xE0200344  @ configure GPIO_MP0_4 DATA REGISTER
      ldr r1, =0x000000e0
      str r1, [r0]
  
  halt:
      b halt
代码最后加入死循环。
      为了方便进行编译链接操作,所以还要编者Makefile
led.bin : led.o
      arm-linux-ld -Ttext 0xD0020010 -o led.elf $^
      arm-linux-objcopy -O binary led.elf $@
      arm-linux-objdump -D led.elf > led.dis
  
  led.o : led.S
      arm-linux-gcc -c $< -o $@
  
  clean :
      rm*.o *.elf *.bin *,dis

具体编写思路可以参考 GNU make v3.80完整版中文指南.pdf (1.59 MB, 下载次数: 3) 。这里指定了程序的链接地址(运行)为 0xD0020010,从 上一帖中的S5PV210的启动流程中我们可以知道,这个地址为 BL1 的起 始地址,具体的可以直接查看S5PV210启动流程帖。

make

编写好程序之后,我们要对程序进行编译链接。直接在储存源文件和Makefile文件的目录下输入make即可编译链接,中间产生的文件可以用make clean来清除,但是之前要把 .bin 文件拷贝到要烧写的目录下。

编写头信息程序

我们在S5PV210的启动流程中可以知道,在BL1阶段运行驱动程序之前,我们还要给它加入16个字节的头信息,来校验计算程序的对错。我们可以 addheader.c 文件,内容可以参考S5PV210启动流程的官方例子,附上个不错的例子文件 addheader.zip (1002 Bytes, 下载次数: 3) 。这个.c文件可以直接用自带的gcc编译器来完成编译链接
  1. gcc -o addheader addheader.c
复制代码


制作目标文件

  1. ./addheader led/led.bin 210.bin
复制代码


烧写程序


  将SD卡装到读卡器中插入电脑,如果虚拟机与主机之间没有建立文件共享关系,可以直接让SD挂载到虚拟机之中,有文件共享的可以将 .bin 文件拷贝到windows下。将 210.bin文件移入第一个扇区,拷贝好之后插入开发板,调节到SD卡启动,即可enjoy!!!!

实验现象

2个回复

374441293 发表于 2015-8-24 23:14:30
楼主,请问,我生成LED.BIN后怎么通过SD卡下进到板子里面去?是像烧写linux那样,还是需要改什么?
h1654155865.6393 发表于 2015-8-25 13:42:20
374441293 发表于 2015-8-24 23:14
楼主,请问,我生成LED.BIN后怎么通过SD卡下进到板子里面去?是像烧写linux那样,还是需要改什么?

可以将SD卡挂载到linux下,然后让led.bin加上头信息,用命令将加上头信息的文件烧到SD卡的第一个扇区。你还可以通过软件自动加信息并且烧到SD卡上。
您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-10-6 02:44 , Processed in 0.625640 second(s), Total 56, Slave 40 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表