145 lines
3.8 KiB
C
145 lines
3.8 KiB
C
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @file ciu32l051_std_exti.c
|
|||
|
* @author MCU Ecosystem Development Team
|
|||
|
* @brief EXTI STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>EXTIģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD>߳<EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȥ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>API<EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
*
|
|||
|
**************************************************************************************************
|
|||
|
* @attention
|
|||
|
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
|
|||
|
*
|
|||
|
**************************************************************************************************
|
|||
|
*/
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @addtogroup CIU32L051_STD_Driver
|
|||
|
* @{
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @addtogroup EXTI
|
|||
|
* @{
|
|||
|
*
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
|
|||
|
|
|||
|
/*------------------------------------------includes--------------------------------------------*/
|
|||
|
#include "ciu32l051_std.h"
|
|||
|
|
|||
|
#ifdef STD_EXTI_PERIPHERAL_USED
|
|||
|
|
|||
|
/*-------------------------------------------functions------------------------------------------*/
|
|||
|
|
|||
|
/************************************************************************************************/
|
|||
|
/**
|
|||
|
* @addtogroup EXTI_External_Functions
|
|||
|
* @{
|
|||
|
*
|
|||
|
*/
|
|||
|
/************************************************************************************************/
|
|||
|
|
|||
|
/**
|
|||
|
* @brief EXTI<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* @param exti_init_param EXTI<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_exti_init(std_exti_init_t* exti_init_param)
|
|||
|
{
|
|||
|
uint32_t trigger;
|
|||
|
uint32_t exti_mode;
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>GPIO EXTIͨ<49><CDA8> */
|
|||
|
if ((exti_init_param->line_id & EXTI_GPIO) != 0x00U)
|
|||
|
{
|
|||
|
trigger = exti_init_param->trigger & EXTI_TRIGGER_MASK;
|
|||
|
|
|||
|
/* <20><>ֹEXTIͨ<49><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F>½<EFBFBD><C2BD>ش<EFBFBD><D8B4><EFBFBD> */
|
|||
|
std_exti_falling_trigger_disable(exti_init_param->line_id);
|
|||
|
std_exti_rising_trigger_disable (exti_init_param->line_id);
|
|||
|
|
|||
|
/* ʹ<><CAB9>EXTIͨ<49><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD> */
|
|||
|
if ((trigger & EXTI_TRIGGER_RISING) == EXTI_TRIGGER_RISING)
|
|||
|
{
|
|||
|
std_exti_rising_trigger_enable (exti_init_param->line_id);
|
|||
|
}
|
|||
|
|
|||
|
/* ʹ<><CAB9>EXTIͨ<49><CDA8><EFBFBD>½<EFBFBD><C2BD>ش<EFBFBD><D8B4><EFBFBD> */
|
|||
|
if ((trigger & EXTI_TRIGGER_FALLING) == EXTI_TRIGGER_FALLING)
|
|||
|
{
|
|||
|
std_exti_falling_trigger_enable(exti_init_param->line_id);
|
|||
|
}
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>EXTIͨ<49><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӦGPIO<49>˿<EFBFBD> */
|
|||
|
if ((exti_init_param->line_id & EXTI_GPIO) == EXTI_GPIO)
|
|||
|
{
|
|||
|
std_exti_set_gpio(exti_init_param->gpio_id, exti_init_param->line_id);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD>EXTIͨ<49><CDA8><EFBFBD>ж<EFBFBD>/<2F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
exti_mode = exti_init_param->mode & EXTI_MODE_INTERRUPT_EVENT;
|
|||
|
|
|||
|
/* <20><>ֹEXTIͨ<49><CDA8><EFBFBD>ж<EFBFBD>/<2F>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
std_exti_interrupt_disable(exti_init_param->line_id);
|
|||
|
std_exti_event_disable(exti_init_param->line_id);
|
|||
|
|
|||
|
/* ʹ<><CAB9>EXTIͨ<49><CDA8><EFBFBD>жϻ<D0B6><CFBB><EFBFBD> */
|
|||
|
if ((exti_mode & EXTI_MODE_INTERRUPT) == EXTI_MODE_INTERRUPT)
|
|||
|
{
|
|||
|
std_exti_interrupt_enable(exti_init_param->line_id);
|
|||
|
}
|
|||
|
|
|||
|
/* ʹ<><CAB9>EXTIͨ<49><CDA8><EFBFBD>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
if ((exti_mode & EXTI_MODE_EVENT) == EXTI_MODE_EVENT)
|
|||
|
{
|
|||
|
std_exti_event_enable (exti_init_param->line_id);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/**
|
|||
|
* @brief EXTIȥ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_exti_deinit(void)
|
|||
|
{
|
|||
|
EXTI->RTSR = 0x00000000U;
|
|||
|
EXTI->FTSR = 0x00000000U;
|
|||
|
EXTI->PIR = 0x3FFFFU;
|
|||
|
EXTI->EXTICR[0] = 0x00000000U;
|
|||
|
EXTI->EXTICR[1] = 0x00000000U;
|
|||
|
EXTI->IMR = 0xEFC00000U;
|
|||
|
EXTI->EMR = 0x00000000U;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @brief EXTI<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* @param exti_init_struct EXTI<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹ<EFBFBD><EFBFBD>
|
|||
|
* @retval <EFBFBD><EFBFBD>
|
|||
|
*/
|
|||
|
void std_exti_struct_init(std_exti_init_t* exti_init_struct)
|
|||
|
{
|
|||
|
exti_init_struct->line_id = EXTI_LINE_GPIO_PIN0;
|
|||
|
exti_init_struct->mode = EXTI_MODE_NONE;
|
|||
|
exti_init_struct->trigger = EXTI_TRIGGER_NONE;
|
|||
|
exti_init_struct->gpio_id = EXTI_GPIOA;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
#endif /* STD_EXTI_PERIPHERAL_USED */
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|