lPC1788的GPIO驱动
#include "led.h"
void led_init(void)
{
//p1.14 p0.16 p1.13 p4.27
LPC_SC->PCONP |= (1<<15);//打开时钟
//选择管脚模式,1788为每个管脚都设计了一个寄存器来选择管脚模式
LPC_IOCON->P1_14 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P1_14 |= (2<<3);//上拉
P1dir(14) = 1; //输出
P1low(14) = 1;//设置为低电平
LPC_IOCON->P0_16 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P0_16 |= (2<<3);//上拉
P0dir(16) = 1; //输出
P0low(16) = 1;//设置为低电平
LPC_IOCON->P1_13 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P1_13 |= (2<<3);//上拉
P1dir(13) = 1; //输出
P1low(13) = 1;//设置为低电平
LPC_IOCON->P4_27 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P4_27 |= (2<<3);//上拉
P4dir(27) = 1; //输出
P4low(27) = 1;//设置为低电平
}
void led_set(u8 ch)
{
switch(ch)
{
case 0:
P1high(14) = 1;
break;
case 1:
P0high(16) = 1;
break;
case 2:
P1high(13) = 1;
break;
case 3:
P4high(27) = 1;
break;
}
}
void led_clear(u8 ch)
{
switch(ch)
{
case 0:
P1low(14) = 1;//设置为低电平
break;
case 1:
P0low(16) = 1;//设置为低电平
break;
case 2:
P1low(13) = 1;//设置为低电平
break;
case 3:
P4low(27) = 1;//设置为低电平
break;
}
}
//位带操作,实现51类似的GPIO控制功能
//具体实现思想,参考<<CM3权威指南>>第五章(87页~92页).
//IO口操作宏定义
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
//IO口地址映射
//输出寄存器
#define GPIO0_ODR_Addr (LPC_GPIO0_BASE+0x18) //0x2009C018
#define GPIO1_ODR_Addr (LPC_GPIO1_BASE+0x18) //0x2009C038
#define GPIO2_ODR_Addr (LPC_GPIO2_BASE+0x18) //0x2009C058
#define GPIO3_ODR_Addr (LPC_GPIO3_BASE+0x18) //0x2009C078
#define GPIO4_ODR_Addr (LPC_GPIO4_BASE+0x18) //0x2009C098
//输入寄存器
#define GPIO0_IDR_Addr (LPC_GPIO0_BASE+0x14) //0x2009C014
#define GPIO1_IDR_Addr (LPC_GPIO1_BASE+0x14) //0x2009C034
#define GPIO2_IDR_Addr (LPC_GPIO2_BASE+0x14) //0x2009C054
#define GPIO3_IDR_Addr (LPC_GPIO3_BASE+0x14) //0x2009C074
#define GPIO4_IDR_Addr (LPC_GPIO4_BASE+0x14) //0x2009C094
//方向寄存器
#define GPIO0_DIR_Addr (LPC_GPIO0_BASE+0x00) //0x2009C000
#define GPIO1_DIR_Addr (LPC_GPIO1_BASE+0x00) //0x2009C020
#define GPIO2_DIR_Addr (LPC_GPIO2_BASE+0x00) //0x2009C040
#define GPIO3_DIR_Addr (LPC_GPIO3_BASE+0x00) //0x2009C060
#define GPIO4_DIR_Addr (LPC_GPIO4_BASE+0x00) //0x2009C080
//清零寄存器
#define GPIO0_CLS_Addr (LPC_GPIO0_BASE+0x1C) //0x2009C01C
#define GPIO1_CLS_Addr (LPC_GPIO1_BASE+0x1C) //0x2009C03C
#define GPIO2_CLS_Addr (LPC_GPIO2_BASE+0x1C) //0x2009C05C
#define GPIO3_CLS_Addr (LPC_GPIO3_BASE+0x1C) //0x2009C07C
#define GPIO4_CLS_Addr (LPC_GPIO4_BASE+0x1C) //0x2009C09C
//IO口操作,只对单一的IO口!
//确保n的值小于32!
#define P0high(n) BIT_ADDR(GPIO0_ODR_Addr,n) //输出 0输出不变 1输出为1
#define P0low(n) BIT_ADDR(GPIO0_CLS_Addr,n) // 清除 0输出不变 1输出0
#define P0in(n) BIT_ADDR(GPIO0_IDR_Addr,n) //输入
#define P0dir(n) BIT_ADDR(GPIO0_DIR_Addr,n) //方向 0输入1输出
#define P1high(n) BIT_ADDR(GPIO1_ODR_Addr,n) //输出 0输出不变 1输出为1
#define P1low(n) BIT_ADDR(GPIO1_CLS_Addr,n) // 清除 0输出不变 1输出0
#define P1in(n) BIT_ADDR(GPIO1_IDR_Addr,n) //输入
#define P1dir(n) BIT_ADDR(GPIO1_DIR_Addr,n) //方向 0输入1输出
#define P2high(n) BIT_ADDR(GPIO2_ODR_Addr,n) //输出 0输出不变 1输出为1
#define P2low(n) BIT_ADDR(GPIO2_CLS_Addr,n) // 清除 0输出不变 1输出0
#define P2in(n) BIT_ADDR(GPIO2_IDR_Addr,n) //输入
#define P2dir(n) BIT_ADDR(GPIO2_DIR_Addr,n) //方向 0输入1输出
#define P3high(n) BIT_ADDR(GPIO3_ODR_Addr,n) //输出 0输出不变 1输出为1
#define P3low(n) BIT_ADDR(GPIO3_CLS_Addr,n) // 清除 0输出不变 1输出0
#define P3in(n) BIT_ADDR(GPIO3_IDR_Addr,n) //输入
#define P3dir(n) BIT_ADDR(GPIO3_DIR_Addr,n) //方向 0输入1输出
#define P4high(n) BIT_ADDR(GPIO4_ODR_Addr,n) //输出 0输出不变 1输出为1
#define P4low(n) BIT_ADDR(GPIO4_CLS_Addr,n) // 清除 0输出不变 1输出0
#define P4in(n) BIT_ADDR(GPIO4_IDR_Addr,n) //输入
#define P4dir(n) BIT_ADDR(GPIO4_DIR_Addr,n) //方向 0输入1输出
lPC1788的GPIO驱动的更多相关文章
- Linux下GPIO驱动(三) ----gpio_desc()的分析
上篇最后提出的疑问是结构体gpio_chip中的成员函数set等是怎么实现的,在回答之前先介绍下gpio_desc这个结构体. 如上图所示,右上方部分为GPIO驱动对其它驱动提供的GPIO操作接口,其 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
/** ****************************************************************************** * @author 暴走的小 ...
- 开发GPIO驱动的基本套路
最近完成了基于AR9331的GPIO驱动的开发,主要包括:控制一个连接GPIO的灯控:接收一个连接GPIO的按键事件:以及接收一个连接GPIO的脉冲事件. 这里,结合开发实践,总结一下GPIO驱动开发 ...
- [RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED【转】
本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422 Platform: ROCKCHIPOS: Android 6.0Kern ...
- uboot的GPIO驱动分析--基于全志的A10芯片【转】
本文转载自:http://blog.csdn.net/lw2011cg/article/details/68954707 uboot的GPIO驱动分析--基于全志的A10芯片 转载至:http://b ...
- MM32F0020 GPIO驱动LED灯(MM32F0020 GPIO Toggle)
目录: 1.MM32F0020简介 2.MM32F0020系统时钟配置 3.MM32F0020的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0020 GPIO驱 ...
- MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)
目录: 1.MM32F0140简介 2.MM32F0140系统时钟配置 3.MM32F0140的GPIO外设配置及其初始化 4.使用官网的Systick定时器做延时 5.MM32F0140 GPIO驱 ...
随机推荐
- Tomcat 虚拟目录映射
最近老是被一个旧Ant工程所困扰,代码版本都改好了测试也通过了,就是打不了war包,一看build.xml 我的天 各种逆天啊....头大.于是乎想起了最基础的tomcat虚拟目录虽是一个很基础的点, ...
- 学习笔记——Windows下cocos2d-x,eclipse中自编译
cocos2d-x创建的安卓项目导入eclipse后. 在项目属性中配置Builders. 在eclipse编译还需要配置相应的变量,即后面提到的cygwin编译中要添加的变量. D:/cygdriv ...
- CodeForces 525D Arthur and Walls
广搜.看了官方题解才会的..... 定义2*2的小矩阵,有三个是点,一个是星,这样的小矩阵被称为元素块. 首先把所有元素块压入队列,每次取出对头,检查是否还是元素块,如果是 那么将那个*改为点,否则跳 ...
- JSON对象长度和遍历方法(转)
最 近在修改一个HTML页面的JS的时候遍历JSON对象,却怎么也调试不通过.怪这个HTML网页不知道用了什么方法禁止了js错误提示,刚开始的时候不 知道有这个问题,用chrome的开发人员工具都没发 ...
- SoftReference 介绍
1 Java中的SoftReference 2 即对象的软引用.如果一个对象具有软引用,内存空间足够,垃 圾回收器就不会回收它:如果内存空间不足了,就会回收这些对象的内存.只要垃圾回收器没有回收它,该 ...
- WeakSelf和StrongSelf
转载自:http://sherlockyao.com/blog/2015/08/08/weakself-and-strongself-in-blocks/ 现在我们用 Objective-C 写代码时 ...
- ARM汇编指令的一些总结-转
ARM汇编指令的一些总结ARM汇编指令很多,但是真正常用的不是很多,而且需要认真琢磨的又更少了.比较有用的是MOV B BL LDR STR还是通过具体汇编代码来学习吧.@ disable watch ...
- ida调试 android so
C:\Documents and Settings\Administrator>adb shellshell@htc_v2_dtg:/ $ susushell@htc_v2_dtg:/ # cd ...
- IE6下最小19px像素
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- Android开发环境配置(win7_64bit)
Android开发环境配置(win7_64bit) 目录 1.概述 2.Android开发涉及的技术 3.Android常用开发环境搭建 4.注意事项 >>看不清的图片可在新标签打开查看大 ...