第六章资料

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章
LPC1114中断系统
6.1 中断介绍
6.2 中断源
LPC1114中断源表
异常编号 功能 标志 每一个中断都会与一个PIO 输入管脚相连,作为从 深度睡眠模式唤醒的唤醒管脚;中断0 到11 对应 PIO0_0 到PIO0_11,中断12 对应PIO_1_0
12:0
启动逻辑 唤醒中断
13
-
6.3.4 GPIO中断设置
1、电平触发中断设置 电平触发中断有两种方式,设置的步骤如下: 1 )设置GPIO中断触发寄存器 GPIOnIS对应位为1 ,配置GPIO中断 为电平触发模式。 2 )设置 GPIO 中断事件寄存器 GPIOnIEV。如果需要高电平触发, 则GPIOnIEV相应位为1;否则,GPIOnIEV相应位设置为0,产生低 电平触发中断。
• 代码说明
/********************************************************* * FunctionName : LEDInit() * Description : LED初始化函数 * EntryParameter : None * ReturnValue : None *********************************************************/ void LEDInit() { LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟 LPC_IOCON->R_PIO1_0 &= ~0x07; LPC_IOCON->R_PIO1_0 |= 0x01; //把P1.0脚设置为GPIO LPC_IOCON->R_PIO1_1 &= ~0x07; LPC_IOCON->R_PIO1_1 |= 0x01; //把P1.1脚设置为GPIO LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟
位 11:0 31:12 符号 访问 值 0 IEV R/W 1 描述(n = 0~3,x = 0~11) 根据GPIOnIS的设置,下升沿还是低电平触发管脚 PIOn_x中断 根据GPIOnIS的设置,上降沿还是高电平触发管脚 PIOn_x中断 保留
6.3.3 GPIO中断寄存器
4. GPIO中断屏蔽寄存器 GPIO 中断屏蔽寄存器 GPIOnIE ,用于屏蔽管脚中断触发。如果 本寄存器中某一位设置为1,对应的引脚就会触发各自的中断和对 应的GPIOnINTR;如果本寄存器中某一位设置为0,就会禁止对应 管脚的中断触发,从而实现中断屏蔽的作用。
位 11:0 31:12 符号 访问 值 IBE R/W 0 1 描述(n = 0~3,x = 0~11) 通过寄存器GPIOnIEV控制管脚PIOn_x上的中断 模式 管脚PIOn_x上双边沿触发中断 保留
6.3.3 GPIO中断寄存器
3. GPIO中断事件寄存器 GPIO中断事件寄存器GPIOnIEV,用于设置中断触发事件模式。 如果GPIOnIS设置为边沿触发,则本寄存器可以设置中断为上升沿 还是下降沿触发;如果GPIOnIS设置为电平触发,则本寄存器可以 设置中断为低电平触发还是高电平触发。
位 11:0 31:12 符号 MASK 访问 值 R 描述(n = 0~3,x = 0~11)
0 管脚PIOn_x上无中断或中断被屏蔽 1 PIOn_x上产生了中断 保留
6.3.3 GPIO中断寄存器
7. GPIO中断清除寄存器 GPIO 中断清除寄存器 GPIOnIC ,用于清除 GPIO 管脚上 的中断标志。该寄存器位只写。
6.3.3 GPIO中断寄存器
GPIO 在使用作中断端口时有 7 个专门的中断寄存 器。下面将分别进行详细介绍。
6.3.3 GPIO中断寄存器
1. GPIO中断触发寄存器 GPIO 中断触发寄存器 GPIOnIS ,用于设置中断触发模式。每一 个GPIO对应一个寄存器,可以分别设置每一位GPIO的中断触发模 式。
28
29 30 31
PIO_3
PIO_2 PIO_1 PIO_0
端口3的GPIO中断状态
端口2的GPIO中断状态 端口1的GPIO中断状态 端口0的GPIO中断状态
特性
Hale Waihona Puke BaiduGPIO在用作外中断接口时,还有如下特性:
• 每个单独引脚可被用作外部中断输入引脚;
• 每个 GPIO 中断可配置为低电平、高电平、下降沿、 上升沿或双边沿触发;
• 可对单独端口的中断级别进行编程。
6.3 中断相关寄存器
6.3.2 中断过程
6.3.2 中断过程
LPC1100系列Cortex-M0微控制器的GPIO均可以产生中断。当GPIO 引脚触发中断时,会置位对应的中断状态位。 • 通过原始中断标志寄存器 GPIOnIRS可以读取未被屏蔽的中断标 志位状态。 • 通过向中断屏蔽寄存器GPIOnIE写入 1,将屏蔽对应引脚的中断 标志。 • 通过屏蔽中断状态寄存器GPIOnMIS可以读取屏蔽位之外的中断 状态标志位。 • 通过向GPIO中断标志清零寄存器GPIOnIC写入1,可将对应引脚 的中断标志清零。
位 11:0 31:12 符号 访问 值 0 1 描述(n = 0~3,x = 0~11) 管脚PIOn_x上的中断被屏蔽 管脚PIOn_x上的中断不被屏蔽 保留
MASK R/W -
6.3.3 GPIO中断寄存器
5. GPIO原始中断状态寄存器 GPIO原始中断状态寄存器GPIOnIRS,用于读取屏蔽之前的中断状 态。 GPIOnIRS 寄存器的某一位读出为 1 时反映了对应管脚上的原始 (屏蔽之前)中断状态,表示在触发 GPIOIE 之前所有的要求都满足。 该位读出为0时,表示对应的输入管脚还未启动中断。
6.4
CMSIS软件接口标准
为了简化对NVIC的编程,CMSIS标准已经提供了对NVIC控制寄 存器进行操作的函数,应用中只需要直接操作这些函数即可。
CMSIS函数 描述
void NVIC_EnableIRQ(IRQn_Type IRQn) void NVIC_DisableIRQ(IRQn_Type IRQn)
使能NVIC中断控制寄存器中相应位 禁止一个具体设备外部中断
将某个中断或异常 清除外部中断悬起位 获取中断悬起状态 设置中断优先级 获取中断优先级 初始化一个系统复位,请求复位MCU
6.5 外部中断实例
• 电路图
• 代码说明
/*********************************************************/ #include "LPC11XX.H" #define LED1_ON() (LPC_GPIO1->DATA &= ~(1<<0)) #define LED1_OFF() (LPC_GPIO1->DATA |= (1<<0)) #define LED2_ON() (LPC_GPIO1->DATA &= ~(1<<1)) #define LED2_OFF() (LPC_GPIO1->DATA |= (1<<1))

11:0 31:12
符号
MASK -
访问 值
R -
描述(n = 0~3,x = 0~11)
0 管脚PIOn_x上无中断 1 管脚PIOn_x上满足中断要求 保留
6.3.3 GPIO中断寄存器
6. GPIO屏蔽中断状态寄存器 GPIO屏蔽中断状态寄存器GPIOnMIS,用于读取中断被屏蔽后的 状态。 GPIOnMIS 寄存器中的某一位读为 1 反映了输入引脚的状态 触发中断。读出为0则表示对应的输入管脚没有中断产生,或者中 断被屏蔽。GPIOMIS是屏蔽后的中断状态。
}
• 代码说明
/******************************************************************* FunctionName : PIOINT1_IRQHandler() * Description : P1口中断服务函数 * EntryParameter : None * ReturnValue : None ******************************************************************/ void PIOINT1_IRQHandler() { if((LPC_GPIO1->MIS&(1<<9))==(1<<9)) // 如果是P1.9引起的中断 { LED1_ON(); while(KEY1_DOWN()); LED1_OFF(); LPC_GPIO1->IC = 0XFFF; // 清中断 } if((LPC_GPIO1->MIS&(1<<10))==(1<<10)) // 如果是P1.10引起的中断 { LED2_ON(); while(KEY2_DOWN()); LED2_OFF(); LPC_GPIO1->IC = 0XFFF; // 清中断 } }
#define KEY1_DOWN() ((LPC_GPIO1->DATA&(1<<9))!=(1<<9)) #define KEY2_DOWN() ((LPC_GPIO1->DATA&(1<<10))!=(1<<10)) /*********************************************************/
LPC_GPIO1->DIR |= (1<<0); // 把P1.0设置为输出引脚 LPC_GPIO1->DATA |= (1<<0); // 把P1.0设置为高电平 LPC_GPIO1->DIR |= (1<<1); // 把P1.1设置为输出引脚 LPC_GPIO1->DATA |= (1<<1); // 把P1.1设置为高电平
LPC1114中断源表
异常编号 功能 标志
21
UART
Rx 线状态(RLS) 发送保持寄存器空(THRE) Rx 数据可用(RDA) 字符超时指示(CTI) Modem 控制改变 自动波特率结束(ABEO) 自动波特率超时(ABTO) 保留
23:22
-
LPC1114中断源表
异常编号 24 25 26 27 功能 ADC WDT BOD A/D转换器结束转换 看门狗中断(WDINT) Brown-out检测 保留 标志
位 11:0 31:12 符号 ISENSE 访问 R/W 值 0 1 描述(n = 0~3,x = 0~11) PIOn_x管脚上的中断配置为边沿触发 PIOn_x管脚上的中断配置为电平触发 保留
6.3.3 GPIO中断寄存器
2. GPIO中断双边沿寄存器 GPIO中断双边沿触发寄存器GPIOnIBE,用于设置边沿触发的模式。 如果GPIOnIS寄存器设置为边沿触发模式时,则可以通过本寄存器 设置中断为双边沿触发中断。也就是说,本寄存器只有设置中断为 边沿触发时才有效,对电平触发没有作用。
6.3.4 GPIO中断设置
2、边沿触发中断设置 边沿触发中断有三种方式,设置步骤如下: 1 )设置GPIO中断触发寄存器 GPIOnIS对应位为0 ,配置GPIO中断 为边沿触发模式。 2)设置GPIO中断双边沿寄存器GPIOnIBE,如果需要配置GPIO中 断为双边沿触发中断,对应位设置为1,否则设置为0。 3 )设置 GPIO 中断事件寄存器 GPIOnIEV。如果需要上升沿触发中 断,设置GPIOnIEV对应位为1;否则,GPIOnIEV相应为设置为0, 下降沿触发中断。
位 11:0 31:12 符号 CLR 访问 值 W 0 无影响 1 清除PIOn_x上的边沿检测逻辑 保留 描述(n = 0~3,x = 0~11)
6.3.4 GPIO中断设置
LPC1100 系列 Cortex-M0 微控制器的所有端口均具有中断功能, 当引脚电平变化符合设置值时,就会触发中断。
保留 Tx FIFO 一半为空 Rx FIFO 一半为满 Rx 超时 Rx 溢出
SI(状态改变)
14
SSP1
15
I2C
LPC1114中断源表
异常编号 功能 标志
16
17 18 19
CT16B0
CT16B1 CT32B0 CT31B1
20
SSP0
匹配0-2 捕获0 匹配0-1 捕获0 匹配0-3 捕获0 匹配0-3 捕获0 Tx FIFO 一半为空 Rx FIFO 一半为满 Rx 超时 Rx 溢出
void NVIC_SetPendingIRQ(IRQn_Type IRQn) void NVIC_ClearPendingIRQ(IRQn_Type IRQn) uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn) void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) uint32_t NVIC_GetPriority(IRQn_Type IRQn) void NVIC_SystemReset(void)
相关文档
最新文档