CIU32_L051_M307R/Peripheral/CIU32L051_Lib/Source/ciu32l051_std_gpio.c

173 lines
4.7 KiB
C
Raw Normal View History

/************************************************************************************************/
/**
* @file ciu32l051_std_gpio.c
* @author MCU Ecosystem Development Team
* @brief GPIO STD<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ʵ<EFBFBD><EFBFBD>GPIO<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 GPIO
* @{
*
*/
/************************************************************************************************/
/*------------------------------------------includes--------------------------------------------*/
#include "ciu32l051_std.h"
#ifdef STD_GPIO_PERIPHERAL_USED
/*-------------------------------------------functions------------------------------------------*/
/************************************************************************************************/
/**
* @addtogroup GPIO_External_Functions
* @{
*
*/
/************************************************************************************************/
/**
* @brief GPIO<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @param gpiox GPIO<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg GPIOA
* @arg GPIOB
* @arg ...
* @param gpio_init_param GPIO<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
void std_gpio_init(GPIO_t* gpiox, std_gpio_init_t* gpio_init_param)
{
uint32_t offset = 0;
uint32_t current_pin = 0;
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD><EFBFBD> */
for (; ((gpio_init_param->pin) >> offset) != 0x00U; offset++)
{
/* <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
current_pin = (gpio_init_param->pin) & (0x00000001UL << offset);
if (current_pin != 0x00U)
{
/* <20><><EFBFBD><EFBFBD>ģʽ */
std_gpio_set_pin_mode(gpiox, current_pin, gpio_init_param->mode);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
std_gpio_set_pin_pull(gpiox, current_pin, gpio_init_param->pull);
if (gpio_init_param->mode == GPIO_MODE_ALTERNATE)
{
/* <20><><EFBFBD>ø<EFBFBD><C3B8>ù<EFBFBD><C3B9><EFBFBD> */
if (current_pin < GPIO_PIN_8)
{
/* <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD>ţ<EFBFBD>0~7<><37><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD> */
std_gpio_set_afpin_0_7 (gpiox, current_pin, gpio_init_param->alternate);
}
else
{
/* <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD>ţ<EFBFBD>8~15<31><35><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD> */
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))
{
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
std_gpio_set_pin_output_type(gpiox, gpio_init_param->pin, gpio_init_param->output_type);
}
}
/**
* @brief GPIOȥ<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @param gpiox GPIO<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg GPIOA
* @arg GPIOB
* @arg ...
* @param pin_mask GPIO<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @arg GPIO_PIN_0
* @arg GPIO_PIN_1
* @arg ...
* @arg GPIO_PIN_ALL
* @retval <EFBFBD><EFBFBD>
*/
void std_gpio_deinit(GPIO_t* gpiox, uint32_t pin_mask)
{
uint32_t offset = 0;
uint32_t current_pin = 0;
/* <20>ָ<EFBFBD><D6B8>Ĵ<EFBFBD><C4B4><EFBFBD>ֵΪĬ<CEAA><C4AC>ֵ */
for (; ((pin_mask) >>offset) != 0x00000000U; offset++)
{
/* <20><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
current_pin = (pin_mask) & (0x00000001U << offset);
if (current_pin)
{
/* <20><><EFBFBD><EFBFBD>ģʽ */
std_gpio_set_pin_mode(gpiox, current_pin, GPIO_MODE_ANALOG);
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
std_gpio_set_pin_pull(gpiox, current_pin, GPIO_NOPULL);
/* <20><><EFBFBD>ø<EFBFBD><C3B8>ù<EFBFBD><C3B9><EFBFBD> */
if (current_pin < GPIO_PIN_8)
{
/* <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD>ţ<EFBFBD>0~7<><37><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD> */
std_gpio_set_afpin_0_7 (gpiox, current_pin, 0U);
}
else
{
/* <20><><EFBFBD><EFBFBD>GPIO<49><4F><EFBFBD>ţ<EFBFBD>8~15<31><35><EFBFBD><EFBFBD><EFBFBD>ù<EFBFBD><C3B9><EFBFBD> */
std_gpio_set_afpin_8_15(gpiox, current_pin, 0U);
}
}
}
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
std_gpio_set_pin_output_type(gpiox, pin_mask, GPIO_OUTPUT_PUSHPULL);
}
/**
* @brief GPIO<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
* @param gpio_init_struct GPIO<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @retval <EFBFBD><EFBFBD>
*/
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 */
/**
* @}
*/
/**
* @}
*/