LPC1788的外部中断和GPIO中断
首先是gpio中断,这一点和1768不同,1768使用的中断时和eint3共用中断通道,到了1788,专门为gpio开辟了中断
#ifndef __JOYPAD_H_
#define __JOYPAD_H_
#include "sys.h"
#include "delay.h"
#define JOYPAD_A 0X01
#define JOYPAD_B 0X02
#define JOYPAD_C 0X03
#define JOYPAD_D 0X04
#define JOYPAD_ENTER 0X05
extern u8 joypadValue;
void Joypad_Scan_Init(void);
void Joypad_Exti_Init(void);
u8 Joypad_Get_Key(void);
#endif
#include "joypad.h"
u8 joypadValue = 0;
void Joypad_Exti_Init(void)
{
//p4没有中断通道,所以只有key1和key2拥有中断
LPC_SC->PCONP |= (1<<15);//打开时钟
//选择管脚模式,1788为每个管脚都设计了一个寄存器来选择管脚模式
LPC_IOCON->P2_25 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_25 |= (2<<3);//上拉
P2dir(25) = 0; //输入
LPC_GPIOINT->IO2IntEnF |= (1<<25);//使能IO口下降沿触发
LPC_GPIOINT->IO2IntClr |= (1<<25);//清除io口中断
LPC_IOCON->P2_26 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_26 |= (2<<3);//上拉
P2dir(26) = 0; //输入
LPC_GPIOINT->IO2IntEnF |= (1<<26);//使能IO口下降沿触发
LPC_GPIOINT->IO2IntClr |= (1<<26);//清除io口中断
LPC_IOCON->P2_23 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_23 |= (2<<3);//上拉
P2dir(23) = 0; //输入
LPC_GPIOINT->IO2IntEnF |= (1<<23);//使能IO口下降沿触发
LPC_GPIOINT->IO2IntClr |= (1<<23);//清除io口中断
LPC_IOCON->P2_19 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_19 |= (2<<3);//上拉
P2dir(19) = 0; //输入
LPC_GPIOINT->IO2IntEnF |= (1<<19);//使能IO口下降沿触发
LPC_GPIOINT->IO2IntClr |= (1<<19);//清除io口中断
//P0.14 与usb2_connect冲突,所以使用usb2连接的时候不用p0.14
// LPC_IOCON->P0_14 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
// LPC_IOCON->P0_14 |= (2<<3);//上拉
// P0dir(14) = 0; //输入
// LPC_GPIOINT->IO0IntEnF |= (1<<14);//使能IO口下降沿触发
// LPC_GPIOINT->IO0IntClr |= (1<<14);//清除io口中断
NVIC_ClearPendingIRQ(GPIO_IRQn);
NVIC_SetPriority(GPIO_IRQn,NVIC_EncodePriority(PriorityGroup2,GPIO_PreemptPriority,GPIO_SubPriority));
NVIC_EnableIRQ(GPIO_IRQn);
}
void Joypad_Scan_Init(void)
{
//p2.25 p2.26 p2.23 P2.19 P0.14
LPC_SC->PCONP |= (1<<15);//打开时钟
//选择管脚模式,1788为每个管脚都设计了一个寄存器来选择管脚模式
LPC_IOCON->P2_25 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_25 |= (2<<3);//上拉
P2dir(25) = 0; //输入
LPC_IOCON->P2_26 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_26 |= (2<<3);//上拉
P2dir(26) = 0; //输入
LPC_IOCON->P2_23 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_23 |= (2<<3);//上拉
P2dir(23) = 0; //输入
LPC_IOCON->P2_19 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_19 |= (2<<3);//上拉
P2dir(19) = 0; //输入
// LPC_IOCON->P0_14 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
// LPC_IOCON->P0_14 |= (2<<3);//上拉
// P0dir(14) = 0; //输入
}
u8 Joypad_Get_Key(void)
{
if(P2in(25) == 0)
{
Delay_Ms(5);
if(P2in(25) == 0)
{
joypadValue = JOYPAD_A;
}
}
if(P2in(26) == 0)
{
Delay_Ms(5);
if(P2in(26) == 0)
{
joypadValue = JOYPAD_B;
}
}
if(P2in(23) == 0)
{
Delay_Ms(5);
if(P2in(23) == 0)
{
joypadValue = JOYPAD_C;
}
}
if(P2in(19) == 0)
{
Delay_Ms(5);
if(P2in(19) == 0)
{
joypadValue = JOYPAD_D;
}
}
// if(P0in(14) == 0)
// {
// Delay_Ms(5);
// if(P0in(14) == 0)
// {
// joypadValue = JOYPAD_ENTER;
// }
// }
return joypadValue;
}
void GPIO_IRQHandler(void)
{
NVIC_ClearPendingIRQ(GPIO_IRQn);
// if((LPC_GPIOINT->IntStatus & (1<<0))) //p0中断
// {
// if((LPC_GPIOINT->IO0IntStatF & (1<<14)))
// {
// //清除中断
// LPC_GPIOINT->IO0IntClr |= (1<<14);
// joypadValue = JOYPAD_ENTER;
// }
// }
if((LPC_GPIOINT->IntStatus & (1<<2))) //p2中断
{
if((LPC_GPIOINT->IO2IntStatF & (1<<25)))
{
//清除中断
LPC_GPIOINT->IO2IntClr |= (1<<25);
joypadValue = JOYPAD_A;
}
if((LPC_GPIOINT->IO2IntStatF & (1<<26)))
{
//清除中断
LPC_GPIOINT->IO2IntClr |= (1<<26);
joypadValue = JOYPAD_B;
}
if((LPC_GPIOINT->IO2IntStatF & (1<<23)))
{
//清除中断
LPC_GPIOINT->IO2IntClr |= (1<<23);
joypadValue = JOYPAD_C;
}
if((LPC_GPIOINT->IO2IntStatF & (1<<19)))
{
//清除中断
LPC_GPIOINT->IO2IntClr |= (1<<19);
joypadValue = JOYPAD_D;
}
}
}
然后是外部中断
void eint0_init(void)
{
//p2.10
LPC_SC->PCONP |= (1<<15);//打开时钟
LPC_IOCON->P2_10 = 0x00;//选择gpio功能,禁止迟滞 不反向 正常推挽
LPC_IOCON->P2_10 |= (1<<0)|(2<<3);//上拉 eint0模式
LPC_SC->EXTMODE |= 1<<0;//边沿触发 0为电平触发
LPC_SC->EXTPOLAR |= 1<<0;//上升沿触发 0为下降沿触发
LPC_GPIOINT->IO2IntEnR &= 1<<10;//使能GPIO 2.0上升沿触发
LPC_SC->EXTINT |= (0x01<<0); //清除中断
NVIC_SetPriority(EINT0_IRQn,NVIC_EncodePriority(PriorityGroup2,EINT0_PreemptPriority,EINT0_SubPriority));
NVIC_EnableIRQ(EINT0_IRQn);
}
中断函数就懒得写了,和1768类似了
LPC1788的外部中断和GPIO中断的更多相关文章
- LPC1768外部中断与GPIO中断
LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 ...
- 在xilinxFPGA上使用microblaze及自写GPIO中断
很久很久没有更新过博客了,今天来扒一扒FPGA上CPU软核的使用. 主要完成的功能:使用的开发板是nexys 4 DDR,板上有16个switch以及16个LED,需要完成microblaze对led ...
- 外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )
转帖: http://www.oschina.net/question/565065_115196?sort=time 实验目的: mini2440开发板上有6个按键,将其中的前4个按键设为外部中断方 ...
- MSP430 G2553 LaunchPad GPIO中断
P1.P2端口上的每个管脚都支持外部中断.P1端口的所有管脚都对应同一个中断向量(Interrupt Vector),类似的,P2端口的所有管脚都对应另一个中断向量:通过PxIFG寄存器来判断中断来源 ...
- 十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)
1.引脚定义 P3口各引脚第二功能定义 标号 引脚 第二功能 说明 P3.0 10 RXD 串行输入口 P3.1 11 TXD 串行输出口 P3.2 12 INT0(上划线) 外部中断0 P3.3 1 ...
- Linux Zynq GPIO中断
注册中断:对每个pin进行循环遍历for (pin_num = 0; pin_num < min_t(int, ZYNQ_GPIO_NR_GPIOS, (int)chip->ngpio) ...
- DAM的使用结合串口和中断以及GPIO。
DAM的使用结合串口和中断以及GPIO. 当我学到DMA这章的时候就意味着我已经学完了,GPIO里的LED,按键,还有就是串口发送数据. 那么下面就来总结下前段时间所学的知识(因为接下来有断时间我是没 ...
- esp8266 SDK开发之GPIO中断
先秀一下自己焊的板子,黑的开关用于复位,蓝的开关用于烧录程序. 首先要明确的是esp8622的大多数管脚都有多个功能, 比如可以用来当做GPIO管脚,还可以用来当做SPI管脚. 如下图所示 使用PIN ...
- TI-RTOS 之 GPIO中断(按键)
TI-RTOS 之 GPIO中断(按键) 前面已经用过LED, 定时器,这次来了解GPIO的中断是怎么用的,从CC1310+TI-RTOS的例程可以直接找到相应的例子程序,它的关键是在于要使能中断,也 ...
随机推荐
- 【PHP伪静态】时获取不规则的URL参数
$url = explode('/', '/article/category-5/status-2/page-3'); $params = array(); foreach ($url as $v) ...
- phpStudy环境配置多个站点,绑定域名
经常做网站的朋友,往往要在自已的电脑同时建立多个站点,而phpstudy这款软件就能很好的解决这个问题,大家看下图 点击上图中的 其它选项菜单 ,就会弹出下面的对话框,然后点击 站点域名管理 然 后在 ...
- ubuntu12.04 android studio 安装
ubuntu12.04 android studio 安装 分类: android 2014-02-17 15:57 10756人阅读 评论(0) 收藏 举报 1.下载JDK ,我下载的是jdk-7u ...
- 去除移动端点击事件出现的背景框 tap-highlight-color
-webkit-tap-highlight-color 这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就会出现一个半透明的灰色 ...
- android:分享 一个很强大的LOG开关---Log.isLoggable
标签:android分享 一个很强大的log开 1.API亮点: 此API可以实现不更换APK,在出问题的手机上就直接能抓到有效log,能提升不少工作效率. 2.API介绍 最近在解决短信问题时,看到 ...
- Sonya and Problem Wihtout a Legend
Sonya and Problem Wihtout a Legend Sonya was unable to think of a story for this problem, so here co ...
- Eclipse/MyEclipse 最最常用的快捷键
F 键类 F2 显示详细信息 F3 跳到声明或定义的地方 Ctrl + 键类 Ctrl+1 快速修复 ( 最经典的快捷键 , 就不用多说了 ) Ctrl+D 删除当前行 Ctrl+E 快速显示当前 E ...
- Swift中异常处理(续集.正则)
正则表达式 1.创建正则表达式的规则 let pattern = "abc" 2.创建正则表达式对象 // 方式一:try方式 do { let regex = try NSReg ...
- Eclipse使用的小细节归档
1. 控制台打印出来的语句不限制条数:Preference-> Run/Debug -> Control -> Limit Console Output 2.
- Highcharts一些属性
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...