玩转orangepizeroz第一节 裸机电灯大法

来源:互联网 发布:网络教育统考免考 编辑:程序博客网 时间:2024/04/29 16:12

玩坏了s2c2440,玩厌了树莓派,最近心血来潮的买了个更迷你的orangepizero,具体计划还没定好

先和当初玩s3c2440一样的方法来了解这款CPU吧

先来个hello word程序~~~(点灯大法)


先晒晒我的板子




有新玩具了,还没来得及签收先玩一把


首先我到官网找了找 原理图、Datasheet,原理图找到了,但官方的包里头的datasheet蛋疼的是个h3的,猜测俩个可能兼容吧,先试试,总有种不详的预感。

(原理图,datasheet链接)

咱们有了这俩个资料可以开始点灯大法了(程序中的hello word),主要有以下几个步骤:


1.找到LED灯硬件的原理图

2.找到可编程管脚和对应CPU管脚

3.通过CPU管脚找对应控制器

4.根据控制器的类型在Datasheet里面找到对应的寄存器组

5.读对应的寄存器组 了解配置和使用值

6.进行编程写入寄存器的值

7.进行LED数据寄存器的操作

咱们现在开始找LED咯

 如同,在原理图的PDF中找到了俩个LED,一个是PWR也就是电源的,这个无法控制;我们选用status-led,这个是状态LED肯定是可控的啦


接下来嘛,ctrl+f搜索 status-led




当我看到这个结果的适合瞬间凌乱的想骂人,咋那么不严谨呢,原理图的CPU接口不是说好的PA17吗,这都是什么鬼,又要自己做实验的感脚。

不详的预感实现了,这是给自己挖坑。


找到IO控制器  搜索PORT CONTROLLER


我们先把GPIOA配置寄存器定义出来方便后面用

我们需要以下地址

PA我们用0 则CFG_1地址是0x01C20804  

CFG_2地址0x01C20808 

数据地址0x01C20810

驱动地址0x01C20814  0x01C20818

上下拉电阻地址0x01C2081C  0x01C20820

驱动地址0x01c20814  0x01c20818 


对地址进行如下定义方便调用  ,将指针定义出来

#define GPIOA_CONFIG1 (*(volatile unsigned long *)0x01C20804)
#define GPIOA_CONFIG2 (*(volatile unsigned long *)0x01C20808)
#define GPIOA_DATA (*(volatile unsigned long *)0x01C20810)
#define GPIOA_DRV0 (*(volatile unsigned long *)0x01C20814)
#define GPIOA_DRV1 (*(volatile unsigned long *)0x01C20818)
#define GPIOA_PUL0 (*(volatile unsigned long *)0x01C2081C)
#define GPIOA_PUL1 (*(volatile unsigned long *)0x01C20820)

//初始化寄存器

GPIOA_PUL0 &=0x0
GPIOA_PUL1 &=0x0
GPIOA_CONFIG1 |=0x77777777
GPIOA_CONFIG2 |=0x77777777

进行下一步吧,去datasheet找对应的控制器的寄存器  搜索PA17

PA控制器配置寄存器1



PA控制器配置寄存器2





第一下搜索到的是PA17的功能,PA17默认低电平且禁用,我们只需要用output,为了保险PA15也带上一起用,等会再禁用其中一个,但估计应该是PA15控制灯的闪烁,毕竟PA15是个SPI口有进入数据,会闪烁。

开始配置寄存器:

  从上图可见,所有寄存器初始值都是0x77777777,即所有IO禁用,可以不理会

第一个配置寄存器地址是0x04,第一个寄存器GPIOA_CONFIG1我们配置28到30位为001  ,运算如下

GPIOA_CONFIG1&=~(0x3<<28) 

第二个是0x08,同上,只不过地址是4到6,寄存器地址是GPIOA_CONFIG2

GPIOA_CONFIG2&=~(0x3<<4)


驱动级别不用管,默认就好

为了点灯,先上拉电阻


//0~15 对应 PA0~PA15
GPIOA_PUL0 |= 1<<(2*15)
//0~5 对应 PA16~PA21
GPIOA_PUL1 |= 1<<(2*1)


到此管脚配置搞定,下面就是数据寄存器了,我们控制15和17位的0和1就能控制灯泡的亮灭了,简不简单?兴不兴奋?惊不惊喜?


就像下面这样点灯咯,大家随意玩


//灯亮

GPIOA_DATA &=(1<<15 | 1<<17)

//灯灭

GPIOA_DATA &=(0<<15 | 0<<17)



源码链接,还未测试。。。

链接:http://pan.baidu.com/s/1nveGu0L 密码:jvry


刚刚装好了交叉编译链,因为我的小工控主机是64位系统,为了避免麻烦安装的arm-linux-gcc-4.4.3

此处略有小坑,运行以下3个命令完美解决

apt-get install lsb-core

apt-get install lib32z1 lib32ncurses5

apt-get install lib32stdc++6


编译链arm-linux-gcc-4.4.3链接

链接:http://pan.baidu.com/s/1slWaYLn 密码:h620



测试电源灯和status灯一个都不亮,不晓得是datasheet的原因还是电源灯直接连IO没连电源还是什么情况,只希望不要RP爆炸买到坏的了,具体原因明天下班回家再调,源码在上面已发了。

有朋友调好了求告知一下,在此谢过




嵌入式玩家

652107935

点击链接加入群【嵌入式玩家】:https://jq.qq.com/?_wv=1027&k=5BSvJ1c





原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 字花36种动物详细资料 三十六字花谜语破解软件 三十六动物字花手册 字花题目及答案 100万存银行一年利息多少 10万存一年利息多少 2019存30万存三年利息多少 50万存银行一年多少利息 1000万存银行一年利息多少 200万存银行一年利息多少 10万存银行好还是余额宝好 十万存银行一年多少利息 一万存一年利息多少 五十万存银行一年有多少利息 40万存银行一年利息多少 20万存定期三年利息 二十万存定期一年利息多少 20万存银行一年利息是多少 10万存3年定期利息是多少 100万存银行一个月利息多少 20万存余额宝一天收益多少 十万存一年定期利息是多少 十万存定期一年利息多少 10万存银行一年利息多少 一万存三个月利息多少 15万存银行一年利息多少 十万存余额宝一年收益多少 5万存银行一年利息多少 2018存款20万存3年利息会有多少 大额存单20万存一年有多少钱 10万存定期还是买理财 3万存银行一年利息多少 800万存银行一年利息多少 2万存银行一年利息多少 1000万存银行一年多少利息 一万存余额宝一天利息 三十万存银行一年利息多少 2018年20万存3年定期利息多少钱 5万存余额宝一天多少钱 20万存支付宝一天有多少利息 十万存三年定期利息是多少