OK6410裸机程序(一)——GPIO(LED)
来源:互联网 发布:游戏账号交易平台软件 编辑:程序博客网 时间:2024/04/30 02:35
本人入手OK6410-A开发板,已经有一段时间。因为去年工作忙一直没时间来折腾这个东东。现在工作也有点空闲时间,又想开始折腾一下了。
我给自己定的最终目标是:linux驱动开发。有点经验的人都知道,驱动开发对硬件知识的掌握也很重要,所以本人确定就先从裸板程序开始学习。
我将借用这个平台来记录我学习的过程中的问题和经验。好了话不多说,现在就开始第一课。
OK6410裸机程序(一)——GPIO(LED)
这是一个非常简单的程序,这个程序就好像我们在学习C语言所写的“HELLO WORLD”程序。都会用它来做为C语言的入门程序。
GPIO意思就是通用输入、输出端口,通俗地说,就是一些引脚,可以通过它们输入出高低电平。或者通过它们读入引脚状态——高低电平。
S3C6410共有187个多功能的I/O端口。共分布在17个端口上(GPA、GPB……GPQ)。即然
一个引脚可以用于输入、输出或其他功能,那么一定有寄存器用来选择这些功能;对于输入,一定可以
通过读取某个寄存器来确定引脚的电平是高是低;对于输出,一定可以通过写入某个寄存器来让这个引脚
输出高电平或低电平;对于其它功能,则另有寄存器来控制它了。
对于这几组GPIO引脚,它们的寄存器是相似的,普通I/O功能通常是由三个寄存器来完成:
GPxCON:用于选择引脚功能。
GPxDAT:用于读写引脚数据。
GPxUP:用于确定是否使用内部上拉电阻。(x表示:A、B、C……Q)
下面就于端口A为例:如下图所示,一个端口是由5个32位的寄存器控制。每个寄存器都有自己地址。一个端口有八个引脚,也就是寄存器每四位控制一个引脚。
如图下面每个引脚的配置:
图2 引脚配置
数据寄存器GPADAT
上下拉电阻设置寄存器GPAPUD
我们在对GPIO操作的时候,第一步就是对这三个寄存器进行设置。配置相应的功能、输入、输出模式的选择。是否开启上下拉电阻功能。
下面我们就与点亮OK6410板上的第一个LED灯为例。
首先,来看一下OK6410开发板的原理图。LED灯的硬件是接在CPU上的个哪个引脚。
图:底板原理图
图:核心板原理图部分
结合核心板与底板原理图,可以看出位号LED1的LED灯(我们要点亮的灯),是阴极通过电阻接到了CPU上的GPM0引脚上。阳极直接接到了电源3.3V。也就是说:我们要点亮LED1这个灯,就要使CPU上的GPM0引脚输出低电平。才能点亮LED。
接下来,我们来看看这个程序 (请在linux环境下用交叉工具执行)。
/*GNU 汇编,设置CPU必要的硬件环境*/
.globl _start /*设置全局标号*/_start:/* 告诉CPU外设的基地址,对协处理器CP15操作命令*/
/* Peri port setup */ ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff) /*关闭看门狗*/ldr r0, =0x7E004000mov r1, #0str r1, [r0]/* 设置堆栈*/
ldr sp, =8*1024bl Main /*转到C语言执行*/
halt:b halt
/*************************************************************************//*程序名称:点亮LED灯 C程序/************************************************************************/
volatile unsigned long *GPMCON = (volatile unsigned long *)0x7F008820;volatile unsigned long *GPMDAT = (volatile unsigned long *)0x7F008824;void Main(){GPMCON |= (1 << 0);//设置成输出while(1){GPMDAT &= ~(1 << 0); //第0位置0,即输出为低,LED亮}}
- OK6410裸机程序(一)——GPIO(LED)
- OK6410裸机程序 ----led
- 【OK6410裸机程序】点亮LED
- OK6410裸机程序(二)——系统时钟
- OK6410裸机程序(三)——外部中断
- OK6410裸机程序(四)——DDR初始化
- ok6410-第06篇-裸机led程序
- OK6410上裸机点亮LED程序
- TQ210_裸机编程(一)——点亮LED灯
- 嵌入式Linux裸机开发(一)——点亮Led
- ok6410 LED/GPIO 控制 C#程序
- ARM裸机程序--GPIO实验 LED(1)
- ARM裸机程序--GPIO实验 LED(2)
- OK6410之裸机led
- ARM裸机程序开发9(GPIO)
- OK6410用DNW下载led和ds18b20的裸机程序
- ARM11裸机开发(一)---点亮LED
- 基于TX2440开发板在ADS1.2中编写LED的驱动(GPIO的使用)裸机程序
- Android OTA 升级之二:脚本 ota_from_target_files
- kafka 多台consumer 实验
- shell脚本实例备忘
- LLVM每日谈之十二 LLVM的源码分析之Pass相关
- Ext.Ajax. request
- OK6410裸机程序(一)——GPIO(LED)
- Java实现的质数输出
- 二.脚本ota_from_target_files(第二部分)
- 利用css3实现漂亮下载按钮
- 卸载sqlserver2008,完全清除
- 深入Lucene的索引文件
- 兼容IE和FF的js脚本做法(比较常用)
- OpenGL ES1.1.12 第一章
- linux内核TCP相关参数解释