【Nano Pi 2】-16 裸机开发(二)LED篇
——cztqwan
在上一个贴子中已经做了裸机开发的准备工作,本帖将一步步实现让Nano Pi2上的LED闪烁起来。
查看Nano Pi2的原理图,可以发现用户可编程按键为LED1。
该引脚连接到S5P4418的GPIOB12引脚上,低电平LED亮,高电平LED灭。
在Ubuntu系统下,新建三个文件:led.c、led.h和start.s:
打开led.h文件,在其中使用宏定义GPIO的三个重要的寄存器的地址:
通过查S5P4418的数据手册,可以知道要让GPIO输出电平需要设置三个寄存器。S5P4418的数据手册有一章专门介绍GPIO的寄存器。
从手册中知道GPIOxOUT寄存器每一位控制一个引脚的输出电平:
GPIOxOUTENB寄存器每一位控制一个引脚的输入输出模式,0表示输入,1表示输出:
GPIOxALTFN寄存器每两位控制一个引脚的复用模式,GPIOxALTFN0决定0-15引脚的复用模式,GPIOxALTFN1决定16-31引脚的复用模式,可以设置为Function0到Function3:
那么普通GPIO是Function几呢?这就需要查看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写到到TF卡0x8200地址下。首先,打开led.bin文件:
然后,打开TF卡,把led.bin中的内容复制到TF卡的0x8200处:
把TF卡插到Nano Pi2中,上电,就能够可以看到Nano Pi2蓝色的LED灯在闪烁。到此,第一个裸机代码成功运行了,从中可以很清楚地了解到S5P4418的GPIO的初步使用方法,要实现更加复杂的功能就要对S5P4418的寄存器有更加深入的理解,可以仔细查阅数据手册。