历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2019年01月15日 | LPC178x/7x的GPIO中断

2019-01-15 来源:eefocus

         除了外部中断管脚,LPC178x/7x的端口中的Port 0和Port 2也可以提供中断功能。


        这些端口管脚可以由上升沿、下降沿或边沿产生中断   


        因为 边沿检测是非同步的,所以可以在没有时钟的情况下操作。不需要电平来触发中断。


        每个使能的中断都可以产生唤醒信号,使器件退出掉电模式。


        寄存器为软件提供挂起的上升沿中断、挂起的下降沿中断,以及整个挂起的GPIO中断


        GPIO中断功能并不要求管脚配置为GPIO。这就允许作为外设接口的一部分管脚改变时发生中断。


GPIO中断寄存器描述


1.GPIO整体中断状态寄存器(IOIntStatus -- 0x4002 8080)


   bit0和bit2分别标识Port0和Port2上是否有中断


2.端口0上升沿GPIO中断使能(IO0IntEnR -- 0x4002 8090)


   在P0.0~P0.31管脚上使能上升沿GPIO中断


3.端口2上升沿GPIO中断使能(IO2IntEnR -- 0x4002 80B0)


   在P2.0~P2.31管脚上使能上升沿GPIO中断


4.端口0下降沿GPIO中断使能(IO0IntEnF -- 0x4002 8094)


   在P0.0~P0.31管脚上使能下降沿GPIO中断


5.端口2下降沿GPIO中断使能(IO2IntEnF -- 0x4002 80B4)


   在P2.0~P2.31管脚上使能下降沿GPIO中断


6.端口0上升沿GPIO中断状态(IO0IntStatR -- 0x4002 8094)


   在P0.0~P0.31管脚上的上升沿中断状态


7.端口2上升沿GPIO中断状态(IO2IntStatR -- 0x4002 80A4)


   在P2.0~P2.31管脚上的上升沿中断状态


8.端口0下降沿GPIO中断状态(IO0IntStatF -- 0x4002 8088)


   在P0.0~P0.31管脚上的下降沿中断状态


9.端口2下降沿GPIO中断状态(IO2IntStatF -- 0x4002 80A8)


   在P2.0~P2.31管脚上的下降沿中断状态


10.端口0的GPIO中断清零状态(IO0IntClr -- 0x4002 808C)


   向相应的位写入1可以清零该管脚的任何中断


11.端口2的GPIO中断清零状态(IO2IntClr -- 0x4002 80AC)


   向相应的位写入1可以清零该管脚的任何中断


范例:


  //启用P2.1 GPIO中断,下降沿


  LPC_GPIOINT->IO2IntEnF =   1<<1; // 使能GPIO中断

  NVIC_SetPriority(GPIO_IRQn, 0);  // 0-31 Priority(0=highest priority)

  NVIC_EnableIRQ(GPIO_IRQn); 



void GPIO_IRQHandler (void) 

{  

    uint32_t i = 0;

    uint32_t status = 0;

    uint32_t status_R_P0 = 0, status_F_P0 = 0;

    uint32_t status_R_P2 = 0, status_F_P2 = 0;



    status = LPC_GPIOINT->IntStatus; //GPIO整体中断状态寄存器

    if (status & 0x1) {                                                 /* P0口中断                     */

        status_R_P0 = LPC_GPIOINT->IO0IntStatR;  //P0上升沿中断状态

        status_F_P0 = LPC_GPIOINT->IO0IntStatF;  //P0下降沿中断状态

        if (status_R_P0) {

            LPC_GPIOINT->IO0IntClr = status_R_P0;                       /* P0口上升沿中断               */

             ///action

        }

        if (status_F_P0) {                                              /* P0口有下降沿中断             */

            LPC_GPIOINT->IO0IntClr = status_F_P0;                       /* 清除P0口中断状态             */

            ///action

       }

    }

    if (status & 0x4) {                                                 /* P2口中断                     */

        status_R_P2 = LPC_GPIOINT->IO2IntStatR;  //P2上升沿中断状态

        status_F_P2 = LPC_GPIOINT->IO2IntStatF;  //P2下降沿中断状态

        if (status_R_P2) {                                              /* P2口上升沿中断               */

            LPC_GPIOINT->IO2IntClr = status_R_P2; 

            ///action

        }

        if (status_F_P2) {                                              /* P2口下降沿中断               */

            LPC_GPIOINT->IO2IntClr = status_F_P2; 

            ///action

        }

    }

    return;

}

推荐阅读

史海拾趣

绿宝石(BERYL)公司的发展小趣事

绿宝石公司注重品牌建设和形象提升。公司加大了广告宣传的投入力度,通过电视、网络、户外广告等多种渠道进行品牌推广。此外,绿宝石公司还积极参与社会公益活动,履行企业社会责任。这些举措不仅提升了公司的知名度和美誉度,也增强了消费者对绿宝石品牌的认同感和忠诚度。

HBControls公司的发展小趣事
定期检查冰箱电源线、插头、插座等是否完好无损,避免老化、破损引起的电路故障。
Cavium Networks公司的发展小趣事

在电子行业的快速发展中,Cavium Networks 公司凭借其创新的技术和敏锐的市场洞察力,成功推出了基于 MIPS64 的单核和双核 OCTEON 处理器系列。这款处理器为网络、无线、控制和存储应用提供了高度集成化和低成本的64位计算解决方案,成为当时业界领先的面向下一代智能网络的新型处理器。OCTEON 处理器的诞生,标志着 Cavium Networks 在网络通信领域的技术实力得到了进一步提升,也为其后续的发展奠定了坚实的基础。

Cal-Chip Electronics公司的发展小趣事

在XXXX年,Cal-Chip Electronics公司迎来了一次技术创新的重大突破。公司研发团队成功开发出了一款具有高效能、低功耗特点的新型芯片,这款芯片在行业内引起了广泛关注。凭借这一技术创新,公司迅速扩大了市场份额,并与多家知名企业建立了长期合作关系。这一突破不仅提升了公司的技术水平,也为公司的长远发展奠定了坚实基础。

CalRamic Technologies Llc公司的发展小趣事

为了保证产品质量的稳定性和可靠性,CalRamic Technologies在公司成立不久后,就开始着手建立严格的质量管理体系。他们引入了国际先进的质量管理理念和方法,对每一个生产环节进行严格把控。这一举措大大提高了产品的合格率和客户满意度,为公司的长期发展奠定了坚实基础。

DIALIGHT公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

问答坊 | AI 解惑

求助关于基于单片机的数字PID调节问题

我正在做一个基于ATmega16单片机的直流调速系统 要用到PID控制 第一个问题是 怎么用ATmega16实现PID控制 第二个问题 怎么将PID的输出与PWM波的占空比联系起来…

查看全部问答>

Nios 视频学习

Nios工程创建视频学习教程 内容包括: (1)SOPC Builder 的使用创建工程方法 (2)Quartus中的配置 (3)Nios中C语言工程的创建 (4)Nios中Flash的下载…

查看全部问答>

数字转模拟(D/A) 隔离转换器485/232转4-20MA

数字转模拟(D/A) 隔离转换器:ISO DAO系列 RS232/RS485信号转模拟信号 隔离D/A转换器 产品概述: ISO DAO系列产品实现主机RS-485/232接口信号隔离转换成标准模拟信号,用以控制远程设备。ISODA系列产品可应用在 RS-232/RS-4 ...…

查看全部问答>

二个程序它们各有静态变量或静态区。它们的静态区和操作系统的静态区有什么不同?

二个程序它们各有静态变量或静态区。它们的静态区和操作系统的静态区(事件EVENT,互斥体Mutex存放的地方)有什么不同?…

查看全部问答>

wince内存泄露?

我使用evc开发一个应用程序,使用了timer,当timer里面没有任何人为添加的代码的时候,查看程序内存中正在使用的内存,没有变化。当我添加这样两行代码:         CWnd* pWnd = GetDlgItem(IDC_COORD);       ...…

查看全部问答>

转让友善micro2440sdk开发板

         本人去年7月份左右买了友善之臂的micro2440sdk开发板,现在将其转让,并且我愿意回答bootloader以及wince驱动的问题,其余不懂的我也会给一些意见。开发板网址http://www.arm9.net/micro2440sdk.asp就是这 ...…

查看全部问答>

刷卡支付功能的手机的相关技术

可以给我讲讲有关刷卡支付功能的手机的关键开发技术吗?…

查看全部问答>

求解答,工具是ccs2.2,读写flash空间和Clist问题

1.目前要把VC的程序刻录到板子上,请问原程序中用的是CList, c里面有替代的或差不多的吗?如果有,头文件是什么?刚接触这个,挺迷糊,刚 从一个辞职的同事上接手个半成品程序。 2. 请问怎么往板子里的flash空间写数据? typedef struct & ...…

查看全部问答>

做的一个俄罗斯方块,在全局变量就通过不了了

第一次碰见这种情况,shit是我生气打上的,但还是通过不了ELUOSI.C(25): error C244: \'shit\': can\'t initialize, bad type or classELUOSI.C(25): error C132: \'shit\': not in formal parameter list#include<reg52.h>#include\"anjian.h\ ...…

查看全部问答>

一个不知名的符号

读程序的时候突然发现的,volatile   GPIO   PA @ 0x5000; volatile   GPIO   PB @ 0x5005; 其中@ 符号是什么意思呢,请教各位大虾了!最好能具体点,关于这个符号的,谢谢!…

查看全部问答>