[单片机框架][bsp层][cx32l003][bsp_exti] EXTI配置和使用

发布者:shmilyde最新更新时间:2022-09-22 来源: csdn 手机看文章 扫描二维码
随时随地手机看文章

一、 主体不同

内部中断:断是一个算法指令,是由软中断指令启动的中断。


外部中断:是单片机实时地处理外部事件的一种内部机制。


二、机制不同

内部中断:执行除法指令时,出现除数为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_exti] EXTI配置和使用

上一篇:[单片机框架][bsp层][cx32l003][bsp_flash] FLASH配置和使用
下一篇:[单片机框架][bsp层][cx32l003][bsp_gpio] GPIO配置和使用

推荐阅读最新更新时间:2024-11-07 15:21

MCU通用微秒计时函数框架设计
在嵌入式软件开发里,计时可以说是非常基础的功能模块了,其应用也非常广泛,比如可以辅助计算信号脉冲宽度时间,也可以直接用于常规延时等。相信很多人初次领略 MCU 的神奇,都是从计时功能相关小程序开始的。 在 MCU 里要想实现精确计时,往往都是利用其内部硬件定时器。不同厂商的 MCU,其定时器设计与使用都不太一样。即使是同一 MCU 内,通常也会有好几种不同类型的定时器共存。 基于此,今天分享一种非常简单实用的通用计时函数框架。这个框架的目的是统一计时函数接口,并且在实现上将通用部分和硬件相关部分剥离开。这样你的嵌入式项目在使用这个框架时,可以无缝快捷地切换底层定时器。 注:本框架主要适合定时器时钟源不小于 1MHz 的
[单片机]
[单片机框架][bsp][nrf51822][nrf51422][nrf51802][bsp_rng] rng随机数生成器配置和使用
Random Number Generator (RNG) The Random Number Generator (RNG) generates true non-deterministic random numbers derived from thermal noise that are suitable for cryptographic purposes. The RNG does not require a seed value. 随机数生成器(RNG)从热噪声中生成真实的非确定性随机数,适合于加密目的。 RNG不需要种子值。 /*****************************************
[单片机]
智能型框架式断路器单片机系统的电磁兼容性分析
一、 简述   随着单片机技术的不断发展与完善,单片机已被广泛地应用于各行各业中,其应用程度和应用水平已逐渐成为衡量一个行业或一个部门技术水平的重要标志。框架式断路器做为低压配电系统的主开关也已突破传统的结构模式,在其保护和信息处理单元采用了单片机技术,典型产品有施耐德公司的 M系列、美国GE公司的S系列、日本三菱公司的AE-SS系列、我国的DW45系列等。众所周知,框架式断路器对低压配电系统的安全、可靠运行起着至关重要的作用,而其单片机系统的电磁兼容性又是其安全、可靠、稳定运行的核心问题。以下对电磁兼容试验的目的、电磁干扰噪声对单片机系统的危害、单片机本身的硬件和软件的抗干扰性进行分析,以期进一步改善单片机系统的电磁兼容性。
[单片机]
智能型<font color='red'>框架</font>式断路器<font color='red'>单片机</font>系统的电磁兼容性分析
[单片机框架][bsp][AT32F415][bsp_key] 按键KEY配置和使用
按键的基本原理是设置单片机IO口(PB0-PB3)为输入状态,如DDRB = 0XF0(方向寄存器,“1”为输出,“0”为输入); 单片机一直检测按键端口(PB0-PB3)的状态,当端口为低电平时(即按键按下),实行相应的动作(比如控制LED灯)。 原理就是这么回事,但是正真实现时,按键会有抖动,要进行按键去抖,下图为按键按下时的抖动图。 按键实行一个动作过程是需要一定时间的,一般为100mS-1S左右,而一个单片机执行一个机器周期的时间很短,时钟为10MH的周期为0.1μs,这样按键每一次动作程序就会多次检测按键,出现误判(一次按下,多次动作)。 代码将讲解如何实现按键扫描功能,注册按键事件(单击/双击/长按/长
[单片机]
STM32——如何配置外部中断
中断服务函数列表 IO口外部中断在中断向量表中只分配了7个中断向量,也就是只能使用7个中断服务函数 EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler 外部中断一般步骤 1、开启IO口时钟,初始化IO口为输入。调用函数:GPIO_Init(); 2、开启IO口复用时钟。调用函数:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,EN
[单片机]
STM32——如何<font color='red'>配置</font><font color='red'>外部中断</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved