首先是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中断的更多相关文章

  1. LPC1768外部中断与GPIO中断

    LPC1768的外部中断严格来说只有四个,分别是EINT0,EINT1,EINT2,EINT3,技术手册上有如下说明 控制这四个外部中断靠以下寄存器 这三个寄存器的0 1 2 3位分别代表中断的0 1 ...

  2. 在xilinxFPGA上使用microblaze及自写GPIO中断

    很久很久没有更新过博客了,今天来扒一扒FPGA上CPU软核的使用. 主要完成的功能:使用的开发板是nexys 4 DDR,板上有16个switch以及16个LED,需要完成microblaze对led ...

  3. 外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )

    转帖: http://www.oschina.net/question/565065_115196?sort=time 实验目的: mini2440开发板上有6个按键,将其中的前4个按键设为外部中断方 ...

  4. MSP430 G2553 LaunchPad GPIO中断

    P1.P2端口上的每个管脚都支持外部中断.P1端口的所有管脚都对应同一个中断向量(Interrupt Vector),类似的,P2端口的所有管脚都对应另一个中断向量:通过PxIFG寄存器来判断中断来源 ...

  5. 十天学会单片机Day1点亮数码管(数码管、外部中断、定时器中断)

    1.引脚定义 P3口各引脚第二功能定义 标号 引脚 第二功能 说明 P3.0 10 RXD 串行输入口 P3.1 11 TXD 串行输出口 P3.2 12 INT0(上划线) 外部中断0 P3.3 1 ...

  6. Linux Zynq GPIO中断

    注册中断:对每个pin进行循环遍历for (pin_num = 0; pin_num < min_t(int, ZYNQ_GPIO_NR_GPIOS,  (int)chip->ngpio) ...

  7. DAM的使用结合串口和中断以及GPIO。

    DAM的使用结合串口和中断以及GPIO. 当我学到DMA这章的时候就意味着我已经学完了,GPIO里的LED,按键,还有就是串口发送数据. 那么下面就来总结下前段时间所学的知识(因为接下来有断时间我是没 ...

  8. esp8266 SDK开发之GPIO中断

    先秀一下自己焊的板子,黑的开关用于复位,蓝的开关用于烧录程序. 首先要明确的是esp8622的大多数管脚都有多个功能, 比如可以用来当做GPIO管脚,还可以用来当做SPI管脚. 如下图所示 使用PIN ...

  9. TI-RTOS 之 GPIO中断(按键)

    TI-RTOS 之 GPIO中断(按键) 前面已经用过LED, 定时器,这次来了解GPIO的中断是怎么用的,从CC1310+TI-RTOS的例程可以直接找到相应的例子程序,它的关键是在于要使能中断,也 ...

随机推荐

  1. Keychain 浅析

    什么是Keychain? 根据苹果的介绍,iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌.苹果自己用keychain来保存Wi- ...

  2. cmd下载文件

    进入cmd 输入ftp 192.168.1.200 然后按照提示输入用户名和密码 cd 进入要下载的目录 dir 看操作权限 lcd查看本地要装下载文件的目录 prompt关闭交互模式 mget da ...

  3. 深入解析FileInputStream和FileOutputStream

    http://swiftlet.net/archives/1363 FileInputStream和FileOutputStream类属于字节类,可以操作任意类型的文件.在数据流的处理过程中,有两种情 ...

  4. JS定时器的使用--无缝滚动

    <title>无标题文档</title> <style> * {margin:0; padding:0;} #div1{width:1172px; height:2 ...

  5. CodeForces 670 A. Holidays(模拟)

    Description On the planet Mars a year lasts exactly n days (there are no leap years on Mars). But Ma ...

  6. 6-SUPER关键字

    (1)强行调用父类方法的执行(2)super不一定在重写中使用,也可以表示那些方法是从父类中继承而来的.

  7. context-param与init-param的区别与作用

    <context-param>的作用: web.xml的配置中<context-param>配置作用 1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件 ...

  8. Junit单元测试的简单使用(主要是在spring框架下的项目)

    首先是解释什么是单元测试,单元测试是指对于一个大型项目里,对于单一模块或者单一接口的测试. 然后解释为什么要写单元测试,首先对于一个大型的项目,如果你每次都要重启一遍服务器调页面或者接口的bug,那就 ...

  9. 对比C#中==与equal方法

    C#中equal与==的区别 收藏 对于值类型,如果对象的值相等,则相等运算符 (==) 返回 true,否则返回 false.对于string 以外的引用类型,如果两个对象引用同一个对象,则 == ...

  10. map转换成list

    Java代码如下: package Test01; import java.util.ArrayList; import java.util.HashMap; import java.util.Ite ...