ARM学习之GPIO编程
开发环境与平台
开发板:粤嵌的GEC210开发板
处理器:s5pv210
处理器内核:Cortex-A8
开发环境:Keil4
基础知识
1、s5pv210的I/O口
S5PV210芯片上共有237个多功能的I/O口,分为34组I/0端口
2、内存单元
指针:内存单元的地址。
将一个数值强制转换为指针:(int )0x20391049
给地址赋值:((int *)0x20391049) = 0x101001
内存单元的地址就是内存单元的编号。
对于32位机来说,可寻址的范围是0~2^24,也就是最大可以达到4G。操作寄存器也就是操作特定编号的内存单元。
3、程序操作相关
置位操作: GPIO_REG |= (1 << x); //将GPIO_REG的第x位置1
清零操作: GPIO_REG &= ~(1 << x); //将GPIO_REG的第x位清零定义寄存器:#define GPJ2CON (*(volatile unsigned int*)0XE0200280)#define GPJ2DAT (*(volatile unsigned int*) 0XE0200284)
volatile关键字的作用:作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。
实验:LED灯亮灭闪烁
操作控制LED亮灭实际就是控制芯片的GPIO引脚输出高低电平,控制GPIO就是控制GPIO的寄存器
1、查看原理图
通过查看原理图可以得知控制LED接的分别是芯片的GPJ2_0、GPJ2_1、GPJ2_2、GPJ2_3引脚。GPIO输出低电平点亮LED,高电平熄灭。
2、看S5PV210芯片手册
找到对应GPJ2
寄存器相关的章节
1、配置寄存器
通过配置寄存器配置GPIO
的模式,可以看到四位控制一个GPIO
引脚的模式,有输入、输出、中断等等模式。可以看到每四位默认是0000,所以引脚默认是输入,这里要控制led,所以要配置为输出。
2、数据寄存器
GPJ2组GPIO只有7个引脚,数据寄存器的0-7位分别对应GPJ2_0~7,对数据寄存器对应的位写入0就将对应的GPIO输出低电平,反之输出高电平。
3、其他寄存器
暂时只看以上寄存器即可。
3、编写程序
(1)汇编程序
area init,code ,readonlyentryldr r1, =0xE0200280 ;将控制寄存器地址放到r1ldr r0, =0x00001111 ;将0x00001111存放r0中str r0, [r1] ;将控制寄存器的值设置为0x00001111,即将GPJ2_0/1/2/3配置为输出模式led_blink:;设置GPJ2DAT的bit[0:3],使GPJ2_0/1/2/3引脚输出低电平,LED亮ldr r1, =0xE0200284 mov r0, #0str r0, [r1]bl delay ; 延时 ;设置GPJ2DAT的bit[0:3],使GPJ2_0/1/2/3引脚输出高电平,LED灭ldr r1, =0xE0200284 mov r0, #0xfstr r0, [r1]bl delay ;延时b led_blinkhalt:b haltdelay:mov r0, #0xf00000
delay_loop:cmp r0, #0sub r0, r0, #1bne delay_loopmov pc, lrend
(2)C语言程序
start.s:
area init,code ,readonlyentryreset;先省略设置堆栈这些东西import Mainbl Mainb .end
led.c:
#include "s5pv210.h"
#include "led.h"void led_init(void) //LED引脚初始化
{GPJ2.GPJ2CON=(GPJ2.GPJ2CON & ~0xffff) | (0x1111); //配置GPJ2_0/1/2/3为输出GPJ2.GPJ2DAT |=0XF; //拉高,默认LED是熄灭的}void led_on_off(void)
{/*异或,不同为1,相同为0。异或0xF,GPJ2_0/1/2/3为低电平时执行该语句后变成高电平熄灭LEDGPJ2_0/1/2/3为高电平时执行该语句后变成低电平电平点亮LED */GPJ2.GPJ2DAT ^= 0xf;
}
//软件延时
void delay(unsigned int z)
{unsigned int x,y;for(x = z;x > 0;x--)for(y = 120;y > 0;y--);
}
s5pv210.h:
寄存器定义
...
...
...
typedef struct
{unsigned int GPD0CON;unsigned int GPD0DAT;unsigned int GPD0PUD;unsigned int GPD0DRV;unsigned int GPD0CONPDN;unsigned int GPD0PUDPDN;
}gpd0;
#define GPD0 (*(volatile gpd0 *)0xE02000A0) typedef struct
{unsigned int GPJ2CON;unsigned int GPJ2DAT;unsigned int GPJ2PUD;unsigned int GPJ2DRV;unsigned int GPJ2CONPDN;unsigned int GPJ2PUDPDN;
}gpj2;
#define GPJ2 (*(volatile gpj2 *)0XE0200280)
...
...
...
main.c:
#include "led.h"int Main(void)
{led_init();while(1){led_on_off(); //点亮or熄灭LEDdelay(0xfff); //延时}
}
ARM学习之GPIO编程相关推荐
- ARM学习之GPIO实现流水灯
今天在学习MMU时的时候,写了一个流水灯程序.虽然很简单,但是不怕大家笑话,由于学C语言的时候没学位运算操作,再加上硬件实验做的少,所以实现这个也费了不少力气呢. /** leds.c: 循环点亮4个 ...
- 华芯微特SWM181学习笔记--GPIO应用与环境搭建
华芯微特SWM181 系列 32 位 MCU(以下简称 SWM181)内嵌 ARM® CortexTM-M0 内核, SWM181 支持片上包含精度为 1%以内的 24MHz.48MHz 时钟,并提供 ...
- 2015-10-11 Sunday 晴 ARM学习
基础的知识看得差不多了,linux系统相关的,最主要是c语言基础知道,还有linux系统编程,网络编程socket等相关的. 这些内容最最基础的看完了,接下来我在考虑看什么呢?是看ARM以及驱动编程系 ...
- 基于树莓派的python GPIO编程-常用函数综合整理
Hello,朋友们大家好,欢迎大家来到LIUSE网络. 随着Mini型PC越来越多,与之而来的创客也丰富起来,比如说Arduino就是一个非常好里例子. 不过,Arduino毕竟是一块适合入门型的基础 ...
- STM32学习笔记---GPIO
STM32的学习笔记-GPIO 我使用的是STM32F401ZGT6,有7组IO口,每组16个引脚,共112个引脚. 因为太菜了,确实容易出错,还请赐教 参考官方文档:八种IO口模式区别 结构原理 该 ...
- [嵌入式]S5PV210微处理器GPIO编程
第四章 S5PV210微处理器GPIO编程 4.1 S5PV210硬件资源 S5PV210是一款32位精简指令集计算机(RISC),具有低成本.低功耗.高性能的微处理器解决方案,适用于手机及一 ...
- ARM学习系列 ---- ARM NEON
ARM学习系列 ---- ARM NEON 1 NEON概述 1.1 简介 NEON是指适用于Arm Cortex-A系列处理器的一种高级SIMD(单指令多数据)扩展指令集,可执行并行数据处理. 1. ...
- ARM 学习笔记整理(一)
ARM 学习笔记整理,主要用于将来的研究开发参考. 一.ARM体系结构的版本 处理器的体系结构就是其使用的指令集,而通常我们说的Soc结构的处理器可以理解为一个实现机器指令集的硬件内核,在这个内核周围 ...
- Python学习之面向对象编程
Python学习目录 在Mac下使用Python3 Python学习之数据类型 Python学习之函数 Python学习之高级特性 Python学习之函数式编程 Python学习之模块 Python学 ...
最新文章
- python中的高阶函数
- Ubuntu利用Samba映射磁盘到Windows(转)
- psql: 致命错误: 用户 postgres Ident 认证失败
- QYResearch回顾:2017年中国汽车语音识别系统产量为1413万
- 一些简单的java编程题(3) ————小球落地问题
- 【C++拾遗之二】fseek、ftell函数读取文件
- 大数据之 Hadoop 基本概念
- android 浏览器 内核版本,Android集成三方浏览器之X5内核
- 三种百度网盘加速器,轻松突破10M/S,总有一款适合你!
- 微信公众号数据2019_全国公众号总排名2019,全国微信公众号排名
- NAT技术配置(内外网IP地址转换)
- Java api中文在线版
- 小孩几岁学计算机合适,孩子几岁学电脑最合适?
- python输入输出拓展: 制作简单的exe程序(温度转换器)
- 小强IT游记之大连行
- 石英晶振应该如何存放,标准有哪些?
- Python 实现人机大战猜数字
- 可行性分析如何分析?
- Microsoft SQL Server 2000 下载地址汇总
- 『每周译Go』手把手教你用 Go 实现一个 mTLS
热门文章
- 如何快速批量转换图片格式?
- 为什么那么多公司在用快速开发平台开发软件?
- 智慧(路灯)灯杆的十大功能对应的经典落地应用案例分享
- 【Java入门学习】JAVA设计一个雇员类,创建雇员类对象
- 开发和设计实现LSTM模型用于家庭用电的多步时间序列预测
- 洛谷P2341(受欢迎的牛)题解
- 如何从Mac上恢复iPhone数据?iPhone数据恢复用户指南
- 蓝桥杯每日一练:等差序列求和
- OWASP TOP10 及防御手段(附加应用安全设计框架)
- 华为ne40e出现php什么意思,NE80E、NE40E、NE5000E的POS卡端口信息告警的含义及定位方法...