中断和事件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• EXTI 控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽; 每个中断线都有专用的状态位;支持多达 20 个软件的中断/事件请求; 检测脉冲宽度低于 APB2 时钟宽度的外部信号。具体参见数据手册 中电气特性部分的相关参数。
• 1. 框图 • 外部中断/事件控制器框图如图 4-1 所示。
上一页 下一页 返回
4.2 外部中断/事件控制器(EXTI)
• (1) 配置 20 个中断线的屏蔽位(EXTI_IMR); • (2) 配置所选中断线的触发选择位(EXTI_RTSR 和
EXTI_FTSR); • (3) 配置对应到外部中断控制器(EXTI)的 NVIC 中断通道的使能
和屏蔽位,使 20 个中断线中的请求可以被正确地响应。 • 2)硬件事件选择 • 通过下面的过程,可以配置 20 个线路为事件源: • (1) 配置 20 个事件线的屏蔽位(EXTI_EMR); • (2) 配置事件线的触发选择位(EXTI_RTSR 和 EXTI_FTSR)。 • 3)软件中断/事件的选择
• STM32 中,每一个 GPIO 都可以触发一个外部中断,但是,GPIO 的中断是以组为一个单位的,同组间的外部中断同一时间只能使用一 个。比如说,PA0、PB0、PC0、PD0、PE0、PF0、PG0 这些为 1 组,如果使用 PA0 作为外部中断源,那么别的就不能够再使用了, 在此情况下,只能使用类似 PB1、PC2 这种末端序号不同的外部中 断源。每一组使用一个中断标志 EXTIx。EXTI0~EXTI4 这 5 个外部 中断有着单独的中断响应函数,EXTI5~EXTI9 共用一个中断响应函 数,EXTI10~EXTI15 共用一个中断响应函数。
SysHandlerCtrl; • vu32 ConfigFaultStatus; vu32 HardFaultStatus; vu32
DebugFaultStatus; • vu32 MemoryManageFaultAddr;vu32 BusFaultAddr; • } SCB_TypeDef; /* System Control Block Structure */
设置优先级)提升至 1。 • (11) NVIC_GetBASEPRI:返回 BASEPRI 屏蔽值。 • (12) NVIC_GetCurrentPendingIRQChannel:返回当前待处理
IRQ 标识符。 • (13) NVIC_GetIRQChannelPendingBitStatus:检查指定的 IRQ
下一页 返回
4.4 中断库函数
• typedef struct • { vu32 CPUID; vu32 IRQControlState; vu32
ExceptionTableOffset; vu32 AIRC; • vu32 SysCtrl; vu32 ConfigCtrl; vu32 SystemPriority[3]; vu32
下一页 返回
4.1 嵌套向量中断控制器(NVIC)
• 第 0 组:所有 4 bit 用于指定响应优先级。 • 第 1 组:最高 1 位用于指定抢占式优先级,后面 3 位用于指定响应
优先级。 • 第 2 组:最高 2 位用于指定抢占式优先级,后面 2 位用于指定响应
优先级。 • 第 3 组:最高 3 位用于指定抢占式优先级,后面 1 位用于指定响应
先级至 0。 • (7) NVIC_RESETPRIMASK:失能 PRIMASK 优先级。
上一页 下一页 返回
4.4 中断库函数
• (8) NVIC_SETFAULTMASK:使能 FAULTMASK 优先级,提升 执行优先级至-1。
• (9) NVIC_RESETFAULTMASK:失能 FAULTMASK 优先级。 • (10) NVIC_BASEPRICONFIG:改变执行优先级,从 N(最低可
下一页 返回
4.2 外部中断/事件控制器(EXTI)
• 2. 唤醒事件管理 • STM32 可以处理外部或内部事件来唤醒内核(WFE)。唤醒事件可
以通过下述配置产生: • (1) 在外设的控制寄存器使能一个中断,但不在 NVIC 中使能,同
时在 Cortex-M3 的系统控制寄存器中使能 SEVONPEND 位。当 CPU 从 WFE 恢复后,需要清除相应外设的中断挂起位和外设 NVIC 中断通道挂起位(在 NVIC 中断清除挂起寄存器中)。 • (2) 配置一个外部或内部 EXTI 线为事件模式,当 CPU 从 WFE 恢 复后,因为对应事件线的挂起位没有被置位,不必清除相应外设的中 断挂起位或 NVIC 中断通道挂起位。在互联型产品中,以太网唤醒事 件同样具有 WFE 唤醒功能。 • 使用外部 I/O 端口作为唤醒事件,请参见功能说明。
上一页 下一页 返回
4.4 中断库函数
• 2. NVIC 常见库函数 • (1) NVIC_DeInit:将外设 NVIC 寄存器重设为缺省值。 • (2) NVIC_SCBDeInit:将外设 SCB 寄存器重设为缺省值。 • (3) NVIC_PriorityGroupConfig:设置优先级分组——先占优先
级和从优先级。 • (4) NVIC_Init:根据 NVIC_InitStruct 中指定的参数初始化外设
NVIC 寄存器。 • (5) NVIC_StructInit:把 NVIC_InitStruct 中的每一个参数按缺省
值填入。 • (6) NVIC_SETPRIMASK:使能 PRIMASK 优先级,提升执行优
RSERVED1[30]; vu32 • Set[2]; • u32 RESERVED2[30]; vu32 Clear[2]; u32 RESERVED3[30]; vu32
Active[2]; • RESERVED4[62]; vu32 Priority[11]; • } NVIC_TypeDef;/* NVIC Structure */
上一页
返回
4.4 中断库函数
• 4.4.1 NVIC 库函数
• 1. NVIC 寄存器结构 • NVIC_TypeDeff 在文件 stm32f10x_map.h 中定义如下: • typedef struct • { vu32 Enable[2]; u32 RESERVED0[30]; vu32 Disable[2]; u32
• STM32 可支持 68 个中断通道,已经固定分配给相应的外部设备,每 个中断通道都具备自己的中断优先级控制字节 PRI_n(8 位,但只使 用高 4 位),每 4 个通道的 8 位中断优先级控制字构成一个 32 位的 优先级寄存器。68 个通道的优先级控制字至少构成 17 个 32 位的优 先级寄存器。4 bit 的中断优先级可以分成 2 组,从高位看,前面定 义的是抢占式优先级,后面定义的是响应优先级。按照这种分组,4 bit 一共可以分成 5 组。
上一页 下一页 返回
4.2 外部中断/事件控制器(EXTI)
• 20 个线路可以被配置成软件中断/事件线。下面是产生软件中断的过 程:
• (1) 配置 20 个中断/事件线屏蔽位(EXTI_IMR,EXTI_EMR);
• (2) 设置软件中断寄存器的请求位(EXTI_SWIER)。
• 4. 外部中断/事件线路映像
上一页
返回
4.3 EXTI 寄存器描述
• 1. 中断屏蔽寄存器(EXTI_IMR) • 位 31:20 保留,必须始终保持为复位状态(0)。位 19:0 线 x 上的
中断屏蔽位中,0 屏蔽来自线 x 上的中断请求,1 开放来自线 x 上的 中断请求,位 19 只适用于互联型产品,对于其他产品为保留位。偏 移地址:0x00,复位值:0x00000000。 • 2. 事件屏蔽寄存器(EXTI_EMR) • 位 31:20 保留。位 19:0 线 x 上的事件屏蔽位中,0 屏蔽来自线 x 上 的事件请求,1 开放来自线 x 上的事件请求。偏移地址:0x04,复位 值:0x00000000。 • 3. 上升沿触发选择寄存器(EXTI_RTSR) • 位 31:19 保留。对于位 18:0,TRx 线 x 上的上升沿触发事件配置位, 0 禁止输入线 x 上的上升沿触发(中断和事件),1 允许输入线 x 上 的上升沿触发(中断和事件)。
下一页 返回
4.3 EXTI 寄存器描述
• 4. 下降沿触发选择寄存器(EXTI_FTSR) • 位 31:19 保留。对于位 18:0,TRwk.baidu.com 线 x 上的下降沿触发事件配置位,
0 禁止输入线 x 上的下降沿触发(中断和事件),1 允许输入线 x 上 的下降沿触发(中断和事件)。偏移地址:0x0C,复位值: 0x00000000。 • 5. 软件中断事件寄存器(EXTI_SWIER) • 位 31:19 保留。对于位 18:0,SWIERx 线 x 上的软件中断位,当该 位为 0 时,写 1 将设置 EXTI_PR 中相应的挂起位。如果在 EXTI_IMR 和 EXTI_EMR 中允许产生该中断,则此时将产生一个中 断。通过清除 EXTI_PR 的对应位(写入 1),可以清除该位为 0。 偏移地址:0x10,复位值:0x00000000。
上一页 下一页 返回
4.2 外部中断/事件控制器(EXTI)
• 3. 功能说明 • 要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置
2 个触发寄存器,同时在中断屏蔽寄存器的相应位写 1 允许中断请求。 当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的 挂起位也随之被置 1。在挂起寄存器的对应位写 1,将清除该中断请 求。如果需要产生事件,必须先配置好并使能事件线。根据需要的边 沿检测通过设置 2个触发寄存器,同时在事件屏蔽寄存器的相应位写 1 允许事件请求。当事件线上发生了需要的边沿时,将产生一个事件 请求脉冲,对应的挂起位不被置 1。通过在软件中断/事件寄存器写 1, 也可以通过软件产生中断/事件请求。 • 1)硬件中断选择 • 通过下面的过程来配置 20 个线路作为中断源:
第 4 章 中断和事件
• 4.1 嵌套向量中断控制器(NVIC) • 4.2 外部中断/事件控制器(EXTI) • 4.3 EXTI 寄存器描述 • 4.4 中断库函数 • 4.5 设计实例——按键中断
返回
4.1 嵌套向量中断控制器(NVIC)
• NVIC 和处理器核的接口紧密相连,可以实现低延迟的中断处理和高 效地处理晚到的中断,例如使能或者失能 IRQ 中断、使能或者失能 单独 IRQ 通道、改变 IRQ 通道优先级等。其有以下特点:68 个可屏 蔽中断通道(不包含 16 个 Cortex-M3 的中断线);16 个可编程的 优先等级(4 位中断优先级);低延迟的异常和中断处理;电源管理 控制;系统控制寄存器的实现。
优先级。 • 第 4 组:所有 4 位用于指定抢占式优先级。 • STM32 异常和中断向量表见表 4-1。表中的地址异常和中断处理程
序的起始地址,系统使用 4 位优先级控制、1 位使能控制,处理程序 的名称在 STM32F10x.s 中定义。
上一页
返回
4.2 外部中断/事件控制器(EXTI)
• 对于互联型产品,外部中断/事件控制器由 20 个产生事件/中断请求 的边沿检测器组成,其他产品则有 19 个能产生事件/中断请求的边沿 检测器。每个输入线可以独立地配置输入类型(脉冲或挂起)和对应 的触发事件(上升沿、下降沿或者双边沿都触发)。每个输入线都可 以独立地被屏蔽。挂起寄存器保持着状态线的中断请求。
上一页 下一页 返回
4.3 EXTI 寄存器描述
• 6. 挂起寄存器(EXTI_PR) • 位 31:19 保留。对于位 18:0,PRx 为挂起位,0 表示没有发生触发
请求,1 表示发生了选择的触发请求。当在外部中断线上发生了选择 的边沿事件,该位被置 1。在该位中写入 1 可以清除它,也可以通过 改变边沿检测的极性清除。偏移地址:0x14,复位值:0x00000000。
相关文档
最新文档