主题 : 玩转NanoPi 2 裸机教程编程-01点亮User LED难点解析 复制链接 | 浏览器收藏 | 打印
级别: 论坛版主
UID: 103400
精华: 0
发帖: 434
金钱: 2235 两
威望: 447 点
贡献值: 0 点
综合积分: 868 分
注册时间: 2014-04-24
最后登录: 2016-10-10
楼主  发表于: 2015-11-30 11:23

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

转自:http://weibo.com/p/1001603914504617510424

一、关于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

到此解析结束。

根据上述及上一篇微博的方法,各位可以开始尝试自己写程序了。