一、 主体不同
内部中断:断是一个算法指令,是由软中断指令启动的中断。
外部中断:是单片机实时地处理外部事件的一种内部机制。
二、机制不同
内部中断:执行除法指令时,出现除数为0或商超过寄存器所能表达的范围,则产生类型为0 的内部中断。是优先级最高的内部中断。
外部中断:当某种外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理;中断处理完毕后.又返回被中断的程序处,继续执行下去。
/********************************************************************************
* @file bsp_exti.c
* @author jianqiang.xue
* @version V1.0.0
* @date 2021-04-09
* @brief NULL
********************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include #include #include #include "RTE_Components.h" #include CMSIS_device_header #include "cx32l003_hal_def.h" #include "cx32l003_hal_conf.h" #include "sys_api.h" /* Private Includes ----------------------------------------------------------*/ /* Private Define ------------------------------------------------------------*/ /* Private Variables ---------------------------------------------------------*/ bool bsp_exti_init = false; typedef void(*bsp_gpio_exti_callback)(void *gpiox, uint16_t gpio_pin); static bsp_gpio_exti_callback g_irq_callback; /* Public Function Prototypes ------------------------------------------------*/ void HAL_GPIO_EXTI_Callback(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) { if (g_irq_callback) { g_irq_callback(GPIOx, GPIO_Pin); } } /** * @brief 设置外部中断NVIC * @note NULL * @param irqn: 中断号(在typedef enum IRQn中,例如:USART1_IRQn) * @param priority: 中断优先级 * @retval None */ void bsp_exit_set(uint8_t irqn, uint32_t priority) { bsp_exti_init = true; HAL_NVIC_SetPriority((IRQn_Type)(irqn), priority); HAL_NVIC_EnableIRQ((IRQn_Type)(irqn)); } /** * @brief 清除外部中断设置 * @note NULL * @param irqn: 中断号(在typedef enum IRQn中,例如:USART1_IRQn) * @retval None */ void bsp_exit_clear_set(uint8_t irqn) { HAL_NVIC_DisableIRQ((IRQn_Type)(irqn)); } /** * @brief 清除外部中断标志位 * @note NULL * @param *gpiox: 预留 * @param pin: 引脚号 * @retval None */ void bsp_exit_clear_flag(void *gpiox, uint8_t pin) { GPIO_TypeDef *gpiox_t = gpiox; __HAL_GPIO_EXTI_CLEAR_FLAG(gpiox_t, pin); } /** * @brief 注册外部中事件回调函数 * @note NULL * @param *event: 事件函数 * @retval None */ bool bsp_gpio_exit_irq_register_callback(void *event) { if (g_irq_callback != NULL) { return false; } else { g_irq_callback = (bsp_gpio_exti_callback)event; } return true; } /******************************************************************************** * @file bsp_exti.h * @author jianqiang.xue * @version V1.0.0 * @date 2021-04-09 * @brief NULL ********************************************************************************/ #ifndef __BSP_EXTI_H #define __BSP_EXTI_H /* Includes ------------------------------------------------------------------*/ #include /* Public Function Prototypes ------------------------------------------------*/ void bsp_exit_set(uint8_t irqn, uint32_t priority); void bsp_exit_clear_set(uint8_t irqn); void bsp_exit_clear_flag(void *gpiox, uint8_t pin); // 引脚外部中断回调 bool bsp_gpio_exit_irq_register_callback(void *event); #endif
上一篇:[单片机框架][bsp层][cx32l003][bsp_flash] FLASH配置和使用
下一篇:[单片机框架][bsp层][cx32l003][bsp_gpio] GPIO配置和使用
推荐阅读最新更新时间:2024-11-07 15:21
设计资源 培训 开发板 精华推荐
- AD8602ARMZ放大器光电二极管电路的典型应用
- LTC7138 的典型应用 - 高效率、140V 400mA 降压型稳压器
- AM3GH-4815SZ 15V 传导和辐射发射 DC/DC 转换器的典型应用
- NB6N14SMNGEVB,时钟/数据接收器评估板
- ADR423 超精密、低噪声、3.00 Vout XFET 电压基准和高压浮动电流源的典型应用
- SHT 30模块
- stm32平衡小车 banlancecar 间距16.7
- OP282GSZ 低功耗、高速 JFET 运算放大器的典型应用电路
- 使用 Diodes Incorporated 的 MAX608 的参考设计
- C3012033_WH-BLE103蓝牙模块方案验证板