中断和事件

目录

什么是中断

什么是EXTI

EXTI初始化结构体

中断/事件线

EXTI模式

触发类型

什么是优先级

什么是优先级分组

什么是NVIC

什么是中断向量表


什么是中断

         中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

什么是EXTI

        外部中断/ 事件控制器 (EXTI) 管理了控制器的  23  个中断 / 事件线。每个中断 / 事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。 EXTI  可以实现对每个中断 / 事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。
外部中断事件控制框图
EXTI  可分为两大部分功能,一个是产生中断,另一个是产生事件,这两个功能从硬件上就有所不同。 产生中断线路目的是把输入信号输入到 NVIC ,进一步会运行中断服务函数,实现功能,这样是软件级的。而产生事件线路目的就是传输一个脉冲信号给其他外设使用,并且是电路级别的信号传输,属于硬件级的。
EXTI初始化结构体
typedef struct
{
//中断/事件线
uint32_t EXTI_Line; /*!< Specifies the EXTI lines to be enabled or
disabled.
This parameter can be any combination value
of @ref EXTI_Lines */
//EXTI 模式
EXTIMode_TypeDef EXTI_Mode; /*!< Specifies the mode for the EXTI lines.
This parameter can be a value of @ref
EXTIMode_TypeDef */
//触发类型
EXTITrigger_TypeDef EXTI_Trigger; /*!< Specifies the trigger signal active edge for
the EXTI lines.
This parameter can be a value of @ref
EXTITrigger_TypeDef */
//EXTI 控制
FunctionalState EXTI_LineCmd; /*!< Specifies the new state of the selected EXTI
lines.
This parameter can be set either to ENABLE or
DISABLE */
}EXTI_InitTypeDef;
中断/事件线
# define EXTI_Line0 (( uint32_t ) 0x00001 ) /*!< External interrupt line 0 */
# define EXTI_Line1 (( uint32_t ) 0x00002 ) /*!< External interrupt line 1 */
# define EXTI_Line2 (( uint32_t ) 0x00004 ) /*!< External interrupt line 2 */
# define EXTI_Line3 (( uint32_t ) 0x00008 ) /*!< External interrupt line 3 */
# define EXTI_Line4 (( uint32_t ) 0x00010 ) /*!< External interrupt line 4 */
# define EXTI_Line5 (( uint32_t ) 0x00020 ) /*!< External interrupt line 5 */
# define EXTI_Line6 (( uint32_t ) 0x00040 ) /*!< External interrupt line 6 */
# define EXTI_Line7 (( uint32_t ) 0x00080 ) /*!< External interrupt line 7 */
# define EXTI_Line8 (( uint32_t ) 0x00100 ) /*!< External interrupt line 8 */
# define EXTI_Line9 (( uint32_t ) 0x00200 ) /*!< External interrupt line 9 */
# define EXTI_Line10 (( uint32_t ) 0x00400 ) /*!< External interrupt line 10 */
# define EXTI_Line11 (( uint32_t ) 0x00800 ) /*!< External interrupt line 11 */
# define EXTI_Line12 (( uint32_t ) 0x01000 ) /*!< External interrupt line 12 */
# define EXTI_Line13 (( uint32_t ) 0x02000 ) /*!< External interrupt line 13 */
# define EXTI_Line14 (( uint32_t ) 0x04000 ) /*!< External interrupt line 14 */
# define EXTI_Line15 (( uint32_t ) 0x08000 ) /*!< External interrupt line 15 */
# define EXTI_Line16 (( uint32_t ) 0x10000 ) /*!< External interrupt line 16
Connected to the PVD Output */
# define EXTI_Line17 (( uint32_t ) 0x20000 ) /*!< External interrupt line 17
Connected to the RTC Alarm event */
# define EXTI_Line18 (( uint32_t ) 0x40000 ) /*!< External interrupt line 18
Connected to the USB OTG FS Wakeup from suspend event */
# define EXTI_Line19 (( uint32_t ) 0x80000 ) /*!< External interrupt line 19
Connected to the Ethernet Wakeup event */
# define EXTI_Line20 (( uint32_t ) 0x00100000 ) /*!< External interrupt line 20
Connected to the USB OTG HS (configured in FS) Wakeup event */
# define EXTI_Line21 (( uint32_t ) 0x00200000 ) /*!< External interrupt line 21
Connected to the RTC Tamper and Time Stamp events */
# define EXTI_Line22 (( uint32_t ) 0x00400000 ) /*!< External interrupt line 22
Connected to the RTC Wakeup event */
EXTI模式
typedef enum
{
EXTI_Mode_Interrupt = 0x00 , // 产生中断
EXTI_Mode_Event = 0x04 // 产生事件
} EXTIMode_TypeDef ;
触发类型
typedef enum
{
EXTI_Trigger_Rising = 0x08 , // 上升沿
EXTI_Trigger_Falling = 0x0C , // 下降沿
EXTI_Trigger_Rising_Falling = 0x10 // 上升沿和下降沿都触发
} EXTITrigger_TypeDef ;
EXTI 控制:
使能 EXTI ,一般都是使能, ENABLE

什么是优先级

抢占优先级和响应优先级的区别:
1.高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。
2.抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。
3.抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。
4.如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行
什么是优先级分组
Cortex-M3 允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此 STM32 把指定中断优先级的寄存器位减少到4 位,这 4 个寄存器位的分组方式如下:
0 组:所有 4 位用于指定响应优先级
1 组:最高 1 位用于指定抢占式优先级,最低 3 位用于指定响应优先级
2 组:最高 2 位用于指定抢占式优先级,最低 2 位用于指定响应优先级
3 组:最高 3 位用于指定抢占式优先级,最低 1 位用于指定响应优先级
4 组:所有 4 位用于指定抢占式优先级
什么是NVIC
        STM32 通过中断控制器 NVIC Nested Vectored Interrupt Controller )进行中断的管理。NVIC是属于 Cortex 内核的器件,不可屏蔽中断( NMI )和外部中断都由它来处理,但是 SYSTICK不是由NVIC 控制的。
typedef struct
{
uint8_t NVIC_IRQChannel ;
uint8_t NVIC_IRQChannelPreemptionPriority ; // 抢断优先级
uint8_t NVIC_IRQChannelSubPriority ; // 响应优先级
FunctionalState NVIC_IRQChannelCmd ;
} NVIC_InitTypeDef ;
什么是中断向量表
         每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向量。所有中断的中断服务程序入口地址构成一个表,称为中断向量表;也有的机器把中断服务程序入口的跳转指令构成一张表,称为中断向量跳转表。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值