mbed官方庫並未提供exti_api模塊,此乃本人在項目中根據實際需要創建的,用着也還順手。
內容比較簡單,直接把源代碼奉上。
該模塊會用到gpio_api中的接口函數。
一、exti_api.h
/**
******************************************************************************
* File Name : exti_api.h
* Description :
******************************************************************************
*/
#ifndef EXTI_API_H
#define EXTI_API_H
void exti_irq_init(uint32_t pin,uint32_t mode);
void exti_irq_set(uint32_t pin,uint32_t preempt_prio,uint32_t sub_prio);
void exti_irq_enable(uint32_t pin);
void exti_irq_disable(uint32_t pin);
#endif
二、exti_api.c
/**
******************************************************************************
* File Name : gpio_api.c
* Description :
******************************************************************************
*/
#include "iassert.h"
#include "ierror.h"
#include "stm32f1xx.h"
#include "exti_api.h"
#include "gpio_api.h"
/**
* biref initialize gpio exti
* pin - external IT gpio pin
* mode external IT or even trigger detection
* - GPIO_MODE_IT_RISING
* - GPIO_MODE_IT_FALLING
* - GPIO_MODE_IT_RISING_FALLING
*/
void exti_irq_init(uint32_t pin,uint32_t mode)
{
gpio_init(pin);
gpio_format(pin,mode,GPIO_NOPULL);
exti_irq_set(pin,0,0);
}
/*
* 描述:配置外部中斷,可使用的優先級數由優先級配置寄存器決定,爲了節省功耗cortex-cm3一般只使用了8位中的高4位,即16個優先級
* pin :引腳
* preempt_prio :搶佔優先級,由優先級組設置決定
* sub_prio:子優先級,
*/
void exti_irq_set(uint32_t pin,uint32_t preempt_prio,uint32_t sub_prio)
{
IRQn_Type irq;
uint32_t gpio_pin = (uint32_t)1<
三、應用舉例
實例:紅外遙控接收引腳配置
#include "exti_api.h"
#define IR_PIN PC_10
void main(void)
{
/* 設置爲上升下降沿中斷 */
exti_irq_init(IR_PIN,GPIO_MODE_IT_RISING_FALLING);
/* 設置優先級 */
exti_irq_set(IR_PIN,0,0);
while(1);
}