173 lines
4.7 KiB
C
173 lines
4.7 KiB
C
/************************************************************************************************/
|
||
/**
|
||
* @file ciu32l051_std_gpio.c
|
||
* @author MCU Ecosystem Development Team
|
||
* @brief GPIO STD库驱动。
|
||
* 实现GPIO初始化、去初始化等API。
|
||
*
|
||
*
|
||
**************************************************************************************************
|
||
* @attention
|
||
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
|
||
*
|
||
**************************************************************************************************
|
||
*/
|
||
|
||
/************************************************************************************************/
|
||
/**
|
||
* @addtogroup CIU32L051_STD_Driver
|
||
* @{
|
||
*/
|
||
|
||
/**
|
||
* @addtogroup GPIO
|
||
* @{
|
||
*
|
||
*/
|
||
/************************************************************************************************/
|
||
|
||
|
||
/*------------------------------------------includes--------------------------------------------*/
|
||
#include "ciu32l051_std.h"
|
||
|
||
#ifdef STD_GPIO_PERIPHERAL_USED
|
||
|
||
/*-------------------------------------------functions------------------------------------------*/
|
||
|
||
/************************************************************************************************/
|
||
/**
|
||
* @addtogroup GPIO_External_Functions
|
||
* @{
|
||
*
|
||
*/
|
||
/************************************************************************************************/
|
||
|
||
/**
|
||
* @brief GPIO初始化
|
||
* @param gpiox GPIO外设
|
||
* @arg GPIOA
|
||
* @arg GPIOB
|
||
* @arg ...
|
||
* @param gpio_init_param GPIO初始化参数结构体
|
||
* @retval 无
|
||
*/
|
||
void std_gpio_init(GPIO_t* gpiox, std_gpio_init_t* gpio_init_param)
|
||
{
|
||
uint32_t offset = 0;
|
||
uint32_t current_pin = 0;
|
||
|
||
/* 遍历配置GPIO引脚 */
|
||
for (; ((gpio_init_param->pin) >> offset) != 0x00U; offset++)
|
||
{
|
||
/* 获取当前所遍历引脚 */
|
||
current_pin = (gpio_init_param->pin) & (0x00000001UL << offset);
|
||
|
||
if (current_pin != 0x00U)
|
||
{
|
||
/* 配置模式 */
|
||
std_gpio_set_pin_mode(gpiox, current_pin, gpio_init_param->mode);
|
||
|
||
/* 配置上下拉 */
|
||
std_gpio_set_pin_pull(gpiox, current_pin, gpio_init_param->pull);
|
||
|
||
if (gpio_init_param->mode == GPIO_MODE_ALTERNATE)
|
||
{
|
||
/* 配置复用功能 */
|
||
if (current_pin < GPIO_PIN_8)
|
||
{
|
||
/* 设置GPIO引脚(0~7)复用功能 */
|
||
std_gpio_set_afpin_0_7 (gpiox, current_pin, gpio_init_param->alternate);
|
||
}
|
||
else
|
||
{
|
||
/* 设置GPIO引脚(8~15)复用功能 */
|
||
std_gpio_set_afpin_8_15(gpiox, current_pin, gpio_init_param->alternate);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if ((gpio_init_param->mode == GPIO_MODE_OUTPUT) || (gpio_init_param->mode == GPIO_MODE_ALTERNATE))
|
||
{
|
||
/* 配置输出类型 */
|
||
std_gpio_set_pin_output_type(gpiox, gpio_init_param->pin, gpio_init_param->output_type);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief GPIO去初始化
|
||
* @param gpiox GPIO外设
|
||
* @arg GPIOA
|
||
* @arg GPIOB
|
||
* @arg ...
|
||
* @param pin_mask GPIO引脚组合
|
||
* @arg GPIO_PIN_0
|
||
* @arg GPIO_PIN_1
|
||
* @arg ...
|
||
* @arg GPIO_PIN_ALL
|
||
* @retval 无
|
||
*/
|
||
void std_gpio_deinit(GPIO_t* gpiox, uint32_t pin_mask)
|
||
{
|
||
uint32_t offset = 0;
|
||
uint32_t current_pin = 0;
|
||
|
||
/* 恢复寄存器值为默认值 */
|
||
for (; ((pin_mask) >>offset) != 0x00000000U; offset++)
|
||
{
|
||
/* 获取当前所遍历引脚 */
|
||
current_pin = (pin_mask) & (0x00000001U << offset);
|
||
if (current_pin)
|
||
{
|
||
/* 配置模式 */
|
||
std_gpio_set_pin_mode(gpiox, current_pin, GPIO_MODE_ANALOG);
|
||
|
||
/* 配置上下拉 */
|
||
std_gpio_set_pin_pull(gpiox, current_pin, GPIO_NOPULL);
|
||
|
||
/* 配置复用功能 */
|
||
if (current_pin < GPIO_PIN_8)
|
||
{
|
||
/* 设置GPIO引脚(0~7)复用功能 */
|
||
std_gpio_set_afpin_0_7 (gpiox, current_pin, 0U);
|
||
}
|
||
else
|
||
{
|
||
/* 设置GPIO引脚(8~15)复用功能 */
|
||
std_gpio_set_afpin_8_15(gpiox, current_pin, 0U);
|
||
}
|
||
}
|
||
}
|
||
|
||
/* 配置输出类型 */
|
||
std_gpio_set_pin_output_type(gpiox, pin_mask, GPIO_OUTPUT_PUSHPULL);
|
||
}
|
||
|
||
/**
|
||
* @brief GPIO初始化结构体初始化
|
||
* @param gpio_init_struct GPIO初始化参数结构体
|
||
* @retval 无
|
||
*/
|
||
void std_gpio_struct_init(std_gpio_init_t* gpio_init_struct)
|
||
{
|
||
gpio_init_struct->pin = GPIO_PIN_0;
|
||
gpio_init_struct->mode = GPIO_MODE_ANALOG;
|
||
gpio_init_struct->pull = GPIO_NOPULL;
|
||
gpio_init_struct->output_type = GPIO_OUTPUT_PUSHPULL;
|
||
gpio_init_struct->alternate = 0U;
|
||
}
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
#endif /* STD_GPIO_PERIPHERAL_USED */
|
||
|
||
/**
|
||
* @}
|
||
*/
|
||
|
||
/**
|
||
* @}
|
||
*/
|