玩转NanoPi 2 裸机教程编程-01点亮User LED难点解析

一、关于winhex工具
在网上找了很多都不能用,来,这个能用。
链接:http://pan.baidu.com/s/1qWy5eu4 密码:y8zf

二、关于USB转TLL/232串口线
我这个是PL2303HXD版本的USB串口芯片。相比PL2303HXA版本好用的多。
CH340芯片的USB串口线也是可以的,淘宝卖的很便宜。
三、关于串口助手
习惯直接用STC的下载工具自带的串口助手。
四、关于VMware虚拟机和Ubuntu
VMware直接从百度软件中心下载就可以
Ubuntu从Ubuntu官网下载
五、关于VMware tools
在你安装完ubuntu系统之后,VMware软件会提示你安装VMware Tools
按照提示去做就好,设计linux下的命令,自行百度。
六、关于ARM-linux-gcc交叉编译工具
可参考网上的教程或者友善之臂wiki
http://wiki.friendlyarm.com/wiki/index.php/NanoPi_2/zh#.E5.AE.89.E8.A3.85.E4.BA.A4.E5.8F.89.E7.BC.96.E8.AF.91.E5.99.A8

七、关于NanoPi2原理图
在原理图最后一页,找到User LED
连接的标号是LED1,那么在PDF中搜索LED1
找到LED1连接的是GPIOB12
通过这种方式来找到是GPIOxN
八、分析数据手册,解析源码
源码如下,先用注释解析一遍
 

#include "gpio.h"//引入gpio.h
/*定义简单的延迟函数*/
void delay(unsigned int time)
{
while(time--);
}
/*主函数*/
void main(void)
{
/*初始化GPIOB*/
GPIOBALTFN0 &= ~(0X3<<24);//清位
GPIOBALTFN0 |= (0X2<<24);//置位,设置GPIO12为GPIO模式
GPIOBOUTENB |= (1<<12);//设置GPIO12为输出模式
   //UserLED接的是GPIO12
GPIOBOUT |= (1<<12);//先置GPIOB为高电平
//因为UserLED的阴极接的GPIO12
/*初始化完毕*/

while(1)
{
GPIOBOUT |= (1<<12);//GPIO12置高电平,LED灭
delay(1000000);//1000000只是随便写的一个数字,具体延时多少秒,不清楚
GPIOBOUT &= ~(1<<12);//GPIO12置低电平,LED亮
delay(1000000);
}
}


先来看这两条代码

GPIOBALTFN0 &= ~(0X3<<24);//清位
GPIOBALTFN0 |= (0X2<<24);//置位,设置GPIO12为GPIO模式
打开S5P4418数据手册
目录处定位到15.4.1.8 GPIOxALTFN0
我们要控制的是GPIOB12,那么就找到GPIOx[12]
GPIOxALTFN0是一个32位寄存器,每两位控制一个GPIOx,一共控制16个GPIOx,
因为有32个GPIOx,
所以GPIOxALTFN1是控制另外16个GPIOx的。
下面来找一下到底是给GPIOB12设置成ALT Function0、ALT Function1、ALT Function2还是ALT Function3。
定位到目录的2.3.2 Ball List Table: Sorted by Function在搜索框中搜GPIOB12,即可快速找到是ALT Function2
那么,给GPIOBALTFN0的第24、25位,分别置1、0即可。

GPIOBALTFN0 &= ~(0X3<<24);//清位,0x3的二进制就是11,取反后为00
GPIOBALTFN0 |= (0X2<<24);//置位,设置GPIO12为GPIO模式,0x2的二进制是10
到此解析结束。
根据上述及上一篇微博的方法,各位可以开始尝试自己写程序了。

猜你喜欢

转载自blog.csdn.net/ddffyhg/article/details/88091442