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<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 */
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|
|||
|
|
|||
|
/**
|
|||
|
* @}
|
|||
|
*/
|