单片机中断

1、中断是什么

        中断指的是在设备运行过程中,当某个事件或条件发生时,处理器能够暂停当前正在执行的程序,转而执行一段特定的代码(称为中断服务程序或中断处理程序),以响应这个事件或条件。中断处理完成后,处理器将返回到被中断的程序中继续执行。

        中断的主要目的是提高系统的响应能力和处理效率。通过中断机制,嵌入式系统可以实时地响应外部设备或内部状态的变化,而无需轮询或等待这些变化的发生。这使得嵌入式系统能够更加灵活地处理各种任务,并在需要时立即采取行动。

中断关键要素

  1. 中断源:触发中断的源头,可以是外部设备(如按键、传感器、定时器等)或内部事件(如除零错误、软件指令等)。

  2. 中断请求:当中断源检测到特定事件或条件时,会向处理器发送中断请求信号。这个信号通常通过特定的硬件引脚或中断线传输到处理器。

  3. 中断优先级:处理器可能同时接收到多个中断请求,因此需要根据中断的优先级来决定先处理哪个中断。优先级高的中断会先得到处理。

  4. 中断向量表:处理器内部或外部存储的一个表,用于存储中断服务程序的入口地址。当中断发生时,处理器会根据中断类型查找中断向量表,找到对应的中断服务程序的入口地址,并跳转到该地址执行。

  5. 中断服务程序:一段特定的代码,用于处理中断请求。中断服务程序会执行与中断源相关的操作,如读取外部设备的数据、更新内部状态等。处理完成后,中断服务程序会执行中断返回指令,使处理器返回到被中断的程序中继续执行。

  6. 中断屏蔽:处理器提供了一种机制来屏蔽某些中断请求,以避免不必要的中断干扰。通过设置中断屏蔽位,可以禁用或启用特定的中断源。

中断分类 

外部中断(External Interrupts)

  • 由外部设备或信号触发的中断。例如,按钮被按下、串口接收到数据等。
  • 这些中断通常通过中断控制器(如GIC、VIC等)进行管理,并映射到CPU的特定中断号上。

内部中断(Internal Interrupts)

  • 由CPU内部事件触发的中断。这些中断通常与CPU的执行状态或内部硬件功能有关。
  • 例如,定时器到期中断、软件触发的中断(如通过软件指令产生的中断)等。

异常中断(Exception Interrupts)

  • 这类中断通常不是由外部设备或信号触发的,而是由CPU在执行指令时遇到的异常情况引起的。
  • 例如,除数为零错误、地址越界、指令未定义等异常条件会导致CPU进入异常中断处理程序。

系统调用中断(System Call Interrupts)

  • 在裸机环境中,虽然不常见操作系统层面的系统调用,但类似的概念可以通过软件中断(如SVC、SWI等)来实现。
  • 这些中断允许用户程序请求操作系统(在裸机环境中可能是由用户自己管理的低级服务)执行某些操作。然而,在纯粹的裸机环境中,这种中断可能由用户自定义的服务例程来处理。

常用中断 

        I/O中断:来自外部设备通道的中断。

        当外部设备(如磁盘、打印机等)完成其操作或需要CPU进行干预时,会向CPU发送中断信号。

程序性中断:由运行程序本身的问题引起的中断,如溢出、缺页中断、缺段中断、地址越界等。

        当程序执行到某条机器指令时,可能出现各种问题,如定点操作数溢出、除数为0、地址越界等,这些情况都会导致程序性中断。

时钟中断:由定时时钟触发的中断。

        用于实现操作系统的时钟管理,如时间片轮转调度、定时任务处理等。

控制台中断:由控制台(如键盘、鼠标等)输入触发的中断。

        用户通过控制台输入指令或数据时,会产生控制台中断,以便CPU及时响应。

硬件故障中断:由硬件故障引起的中断。

        当硬件设备发生故障时,会向CPU发送中断信号,以便操作系统进行故障处理。

执行I/O操作:如读写磁盘、打印机等。

创建进程:当用户需要创建新的进程时,会触发访管中断。

分配内存:当用户需要为程序分配内存时,会触发访管中断。

信号量操作:在进程同步和互斥中,信号量的操作(如P操作、V操作)会触发访管中断。

发送/接收消息:在进程间通信中,发送和接收消息会触发访管中断。

2、单片机中断原理是什么

        当中断发生时,CPU会根据中断向量表中的中断向量找到对应的中断服务程序地址,并开始执行中断服务程序。中断服务程序处理完中断事件后,会返回到被中断的程序继续执行。

3、中断用在什么地方

1. 定时器中断

        应用场景:定时器中断是单片机中最常用的中断功能之一。通过定时器中断,可以实现定时器的定时功能,并在特定的时间点执行相应任务。例如,可以使用定时器中断来实现精确的延时功能,或者定时获取某种数据等。定时器中断广泛应用于各种计时、测速、调度等场景。

        优点:定时器中断能够提高系统的实时性和响应速度,确保任务在预定的时间点准确执行。

2. 外部中断

        应用场景:外部中断用于处理外部事件,如按键触发、传感器信号等。在单片机中,常见的外部中断如INT0和INT1,它们分别对应于特定的引脚。当这些引脚的状态发生变化时,可以触发相应的外部中断,从而执行中断服务程序。

        优点:外部中断允许单片机实时响应外部事件,提高了系统的交互性和响应速度。

3. 串口中断

        应用场景:串口中断用于处理串口通信的数据接收和发送。在单片机中,串口通信常用的是UART(通用异步收发器)。通过设置相应的中断使能位,可以实现串口接收数据时的中断处理。这样,当数据到达时,单片机可以立即进行处理,而无需轮询串口接收缓冲区。

        优点:串口中断有效减少了系统资源的占用,提高了系统的响应速度和效率。

4、中断如何使用(stm32为例)

定时器中断

        1. 定时器选择与时钟配置

        2. 定时器初始化

        3. 使能定时器中断

        4. 编写中断服务函数和回调函数

        5. 启动定时器

按键中断

        先GPIO引脚的引脚使能,初始化gpio,配置需要使用国的gpio引脚,如按键1,GPIO_PIN_4,模式设为中断下降沿模式,上下拉为上拉。这里通过HAL_NVIC_SetPriority函数设置中断优先级,HAL_NVIC_EnableIRQ函数使能中断。

        重定义中断向量表中对应的中断函数 EXTI4_IRQHandler,在其内部调用中断处理函数HAL_GPIO_EXTI_IRQHandler,这个函数会调用中断回调函数(重定义函数)HAL_GPIO_EXTI_Callback,自己在内部写入回调操作即可。

        主函数调用相关初始化函数。

串口中断

        1. 初始化串口

        2. 启动中断接收或发送

        3. 编写中断回调函数

5、FreeRTOS里的中断

        在FreeRTOS中,中断除了上面的一些作用,还可以用来任务调度,具体需要了解Free RTOS中的任务调度器(Scheduler)和中断服务例程(ISR)。

        在FreeRTOS中,如果中断跳转的任务优先级比当前任务优先级低,任务调度器通常不会立即跳转任务。这是因为FreeRTOS采用的是基于优先级的抢占式调度策略。

在FreeRTOS中使用中断

 1. 中断配置

中断优先级分组:

  • ARM Cortex-M系列处理器支持中断优先级分组,FreeRTOS通常建议使用分组4(NVIC_PriorityGroup_4),即所有8位中断优先级寄存器的高4位用于设置抢占优先级,低4位保留不用。这样做可以简化中断优先级管理,使每个中断只有一个抢占优先级。

中断优先级设置:

  • 使用FreeRTOS时,需要为PendSV(上下文切换)和SysTick(任务调度)中断设置较低的优先级,以确保它们不会干扰其他高优先级的中断和任务。

NVIC配置:

  • 使用NVIC(嵌套向量中断控制器)来配置中断的使能、优先级等属性(将isr放在中断向量表里)。FreeRTOS本身不直接管理中断的硬件级配置,但提供了接口或宏定义来帮助用户进行配置。

2. 编写中断服务例程(ISR)

ISR的定义:

  • 中断服务例程(ISR)是一个在中断发生时由硬件自动调用的函数。在FreeRTOS中,用户需要定义这些函数来处理特定的中断事件。

ISR的编写:

  • ISR应该尽可能简短,只进行必要的处理,如清除中断标志、唤醒等待的任务等。复杂的处理应该放在任务中执行。

FreeRTOS API的调用:

  • 在ISR中,通常不建议直接调用FreeRTOS的API函数,因为这些函数可能不是可重入的。但是,FreeRTOS提供了FromISR后缀的API函数,这些函数可以在ISR中安全地调用。

3. 中断与任务之间的通信

通信机制:

  • FreeRTOS提供了多种机制来实现中断与任务之间的通信,如消息队列、信号量、任务通知(只可以发送)或事件标志组等。

示例流程:

  1. 任务运行:主任务在运行时等待某个事件或条件。

  2. 中断发生:当外设或内部事件触发中断时,CPU跳转到ISR执行。

  3. ISR处理:ISR执行必要的处理,如清除中断标志,并通过FreeRTOS提供的通信机制(如发送信号量或消息)通知任务。

  4. 任务响应:任务接收到中断通知后,执行相应的处理逻辑。

4. 注意事项

  • 中断嵌套:FreeRTOS允许中断嵌套,即高优先级的中断可以打断低优先级的中断。但是,需要确保中断处理程序的健壮性,以避免死锁或优先级反转等问题。

  • 中断延迟:中断处理应该尽可能快,以避免造成系统响应延迟。对于耗时较长的处理,应该将其放在任务中执行。

  • 临界区保护:在ISR中访问共享资源时,需要确保使用临界区保护机制来避免数据竞争或不一致。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值