【Nano Pi 2】-16 裸机开发(二)LED篇

  • cztqwan
  • LV5工程师
  • |      2016-02-01 23:59:47
  • 浏览量 1798
  • 回复:0

Nano Pi 2-16 裸机开发(二)LED

——cztqwan


转载请注明ICKey



一、前言


在上一个贴子中已经做了裸机开发的准备工作,本帖将一步步实现让Nano Pi2上的LED闪烁起来。


二、硬件说明


查看Nano Pi2的原理图,可以发现用户可编程按键为LED1



该引脚连接到S5P4418GPIOB12引脚上,低电平LED亮,高电平LED灭。



三、代码编写


Ubuntu系统下,新建三个文件:led.cled.hstart.s



打开led.h文件,在其中使用宏定义GPIO的三个重要的寄存器的地址:



通过查S5P4418的数据手册,可以知道要让GPIO输出电平需要设置三个寄存器。S5P4418的数据手册有一章专门介绍GPIO的寄存器。



从手册中知道GPIOxOUT寄存器每一位控制一个引脚的输出电平:



GPIOxOUTENB寄存器每一位控制一个引脚的输入输出模式,0表示输入,1表示输出:



GPIOxALTFN寄存器每两位控制一个引脚的复用模式,GPIOxALTFN0决定0-15引脚的复用模式,GPIOxALTFN1决定16-31引脚的复用模式,可以设置为Function0Function3



那么普通GPIOFunction几呢?这就需要查看S5P4418的复用功能表了,如下图所示,所以要把复用功能设置为Function2



打开led.c文件,输入以下内容,代码很简单,实现LED的闪烁:



start.s中,主要是跳转到C语言主函数的汇编代码,比较简单,定义一个标记然后跳转到mian即可:



程序编写完后,在终端中进入文件所在的文件夹,依次执行以下命令,要根据使用的交叉编译器更改命令名称,我的Ubuntu系统中安装的交叉编译器的命令如下:

1、执行命令:arm-fsl-linux-gnueabi-gcc -c start.s -o start.o 

2、执行命令:arm-fsl-linux-gnueabi-gcc -c led.c -o led.o

3、执行命令:arm-fsl-linux-gnueabi-ld -Ttext=0x42C00000 start.o led.o -o led

4、执行命令:arm-fsl-linux-gnueabi-objcopy -I elf32-littlearm -O binary led led.bin



iROM程序执行后,2ndboot被加载到片内RAM中运行,初始化硬件,接着会把LED程序由TF卡加载至片外RAM(地址0x42c00000处)运行。所以需要把编译连接好的代码烧写到TF卡的相应位置。

TF插到电脑上,按照上一个贴子使用Winhex软件,将led.bin写到到TF0x8200地址下。首先,打开led.bin文件:



然后,打开TF卡,把led.bin中的内容复制到TF卡的0x8200处:



四、结果


TF卡插到Nano Pi2中,上电,就能够可以看到Nano Pi2蓝色的LED灯在闪烁。到此,第一个裸机代码成功运行了,从中可以很清楚地了解到S5P4418GPIO的初步使用方法,要实现更加复杂的功能就要对S5P4418的寄存器有更加深入的理解,可以仔细查阅数据手册。

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子