历史上的今天
今天是: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;
}
史海拾趣
|
我正在做一个基于ATmega16单片机的直流调速系统 要用到PID控制 第一个问题是 怎么用ATmega16实现PID控制 第二个问题 怎么将PID的输出与PWM波的占空比联系起来… 查看全部问答> |
|
数字转模拟(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存放的地方)有什么不同?… 查看全部问答> |
|
我使用evc开发一个应用程序,使用了timer,当timer里面没有任何人为添加的代码的时候,查看程序内存中正在使用的内存,没有变化。当我添加这样两行代码: CWnd* pWnd = GetDlgItem(IDC_COORD); ...… 查看全部问答> |
|
本人去年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\ ...… 查看全部问答> |




