2021-12-13 21:39:13 -08:00
|
|
|
/**
|
|
|
|
**************************************************************************
|
|
|
|
* @file at32f435_437_gpio.c
|
2022-03-03 03:49:19 -08:00
|
|
|
* @version v2.0.5
|
|
|
|
* @date 2022-02-11
|
2021-12-13 21:39:13 -08:00
|
|
|
* @brief contains all the functions for the gpio firmware library
|
|
|
|
**************************************************************************
|
|
|
|
* Copyright notice & Disclaimer
|
|
|
|
*
|
|
|
|
* The software Board Support Package (BSP) that is made available to
|
|
|
|
* download from Artery official website is the copyrighted work of Artery.
|
|
|
|
* Artery authorizes customers to use, copy, and distribute the BSP
|
|
|
|
* software and its related documentation for the purpose of design and
|
|
|
|
* development in conjunction with Artery microcontrollers. Use of the
|
|
|
|
* software is governed by this copyright notice and the following disclaimer.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES,
|
|
|
|
* GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS,
|
|
|
|
* TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR
|
|
|
|
* STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS,
|
|
|
|
* INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
|
|
|
|
*
|
|
|
|
**************************************************************************
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "at32f435_437_conf.h"
|
|
|
|
|
|
|
|
/** @addtogroup AT32F435_437_periph_driver
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
|
|
|
/** @defgroup GPIO
|
|
|
|
* @brief GPIO driver modules
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef GPIO_MODULE_ENABLED
|
|
|
|
|
|
|
|
/** @defgroup GPIO_private_functions
|
|
|
|
* @{
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief reset the gpio register
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_reset(gpio_type *gpio_x)
|
|
|
|
{
|
|
|
|
if(gpio_x == GPIOA)
|
|
|
|
{
|
|
|
|
crm_periph_reset(CRM_GPIOA_PERIPH_RESET, TRUE);
|
|
|
|
crm_periph_reset(CRM_GPIOA_PERIPH_RESET, FALSE);
|
|
|
|
}
|
|
|
|
else if(gpio_x == GPIOB)
|
|
|
|
{
|
|
|
|
crm_periph_reset(CRM_GPIOB_PERIPH_RESET, TRUE);
|
|
|
|
crm_periph_reset(CRM_GPIOB_PERIPH_RESET, FALSE);
|
|
|
|
}
|
|
|
|
else if(gpio_x == GPIOC)
|
|
|
|
{
|
|
|
|
crm_periph_reset(CRM_GPIOC_PERIPH_RESET, TRUE);
|
|
|
|
crm_periph_reset(CRM_GPIOC_PERIPH_RESET, FALSE);
|
|
|
|
}
|
|
|
|
else if(gpio_x == GPIOD)
|
|
|
|
{
|
|
|
|
crm_periph_reset(CRM_GPIOD_PERIPH_RESET, TRUE);
|
|
|
|
crm_periph_reset(CRM_GPIOD_PERIPH_RESET, FALSE);
|
|
|
|
}
|
|
|
|
else if(gpio_x == GPIOE)
|
|
|
|
{
|
|
|
|
crm_periph_reset(CRM_GPIOE_PERIPH_RESET, TRUE);
|
|
|
|
crm_periph_reset(CRM_GPIOE_PERIPH_RESET, FALSE);
|
|
|
|
}
|
|
|
|
else if(gpio_x == GPIOF)
|
|
|
|
{
|
|
|
|
crm_periph_reset(CRM_GPIOF_PERIPH_RESET, TRUE);
|
|
|
|
crm_periph_reset(CRM_GPIOF_PERIPH_RESET, FALSE);
|
|
|
|
}
|
|
|
|
else if(gpio_x == GPIOG)
|
|
|
|
{
|
|
|
|
crm_periph_reset(CRM_GPIOG_PERIPH_RESET, TRUE);
|
|
|
|
crm_periph_reset(CRM_GPIOG_PERIPH_RESET, FALSE);
|
|
|
|
}
|
|
|
|
else if(gpio_x == GPIOH)
|
|
|
|
{
|
|
|
|
crm_periph_reset(CRM_GPIOH_PERIPH_RESET, TRUE);
|
|
|
|
crm_periph_reset(CRM_GPIOH_PERIPH_RESET, FALSE);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief initialize the gpio peripheral.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param gpio_init_struct: pointer to gpio init structure.
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_init(gpio_type *gpio_x, gpio_init_type *gpio_init_struct)
|
|
|
|
{
|
|
|
|
uint16_t pinx_value, pin_index = 0;
|
|
|
|
|
|
|
|
pinx_value = (uint16_t)gpio_init_struct->gpio_pins;
|
|
|
|
|
|
|
|
while(pinx_value > 0)
|
|
|
|
{
|
|
|
|
if(pinx_value & 0x01)
|
|
|
|
{
|
|
|
|
gpio_x->cfgr &= (uint32_t)~(0x03 << (pin_index * 2));
|
|
|
|
gpio_x->cfgr |= (uint32_t)(gpio_init_struct->gpio_mode << (pin_index * 2));
|
|
|
|
|
|
|
|
gpio_x->omode &= (uint32_t)~(0x01 << (pin_index));
|
|
|
|
gpio_x->omode |= (uint32_t)(gpio_init_struct->gpio_out_type << (pin_index));
|
|
|
|
|
|
|
|
gpio_x->odrvr &= (uint32_t)~(0x03 << (pin_index * 2));
|
|
|
|
gpio_x->odrvr |= (uint32_t)(gpio_init_struct->gpio_drive_strength << (pin_index * 2));
|
|
|
|
|
|
|
|
gpio_x->pull &= (uint32_t)~(0x03 << (pin_index * 2));
|
|
|
|
gpio_x->pull |= (uint32_t)(gpio_init_struct->gpio_pull << (pin_index * 2));
|
|
|
|
}
|
|
|
|
pinx_value >>= 1;
|
|
|
|
pin_index++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief fill each gpio_init_type member with its default value.
|
|
|
|
* @param gpio_init_struct : pointer to a gpio_init_type structure which will be initialized.
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_default_para_init(gpio_init_type *gpio_init_struct)
|
|
|
|
{
|
|
|
|
/* reset gpio init structure parameters values */
|
|
|
|
gpio_init_struct->gpio_pins = GPIO_PINS_ALL;
|
|
|
|
gpio_init_struct->gpio_mode = GPIO_MODE_INPUT;
|
|
|
|
gpio_init_struct->gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
|
|
|
|
gpio_init_struct->gpio_pull = GPIO_PULL_NONE;
|
|
|
|
gpio_init_struct->gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief read the specified input port pin.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param pins: gpio pin number
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* - GPIO_PINS_0
|
|
|
|
* - GPIO_PINS_1
|
|
|
|
* - GPIO_PINS_2
|
|
|
|
* - GPIO_PINS_3
|
|
|
|
* - GPIO_PINS_4
|
|
|
|
* - GPIO_PINS_5
|
|
|
|
* - GPIO_PINS_6
|
|
|
|
* - GPIO_PINS_7
|
|
|
|
* - GPIO_PINS_8
|
|
|
|
* - GPIO_PINS_9
|
|
|
|
* - GPIO_PINS_10
|
|
|
|
* - GPIO_PINS_11
|
|
|
|
* - GPIO_PINS_12
|
|
|
|
* - GPIO_PINS_13
|
|
|
|
* - GPIO_PINS_14
|
|
|
|
* - GPIO_PINS_15
|
|
|
|
* @retval flag_status (SET or RESET)
|
|
|
|
*/
|
|
|
|
flag_status gpio_input_data_bit_read(gpio_type *gpio_x, uint16_t pins)
|
|
|
|
{
|
|
|
|
flag_status status = RESET;
|
|
|
|
|
|
|
|
if(pins != (pins & gpio_x->idt))
|
|
|
|
{
|
|
|
|
status = RESET;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
status = SET;
|
|
|
|
}
|
|
|
|
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief read the specified gpio input data port.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @retval gpio input data port value.
|
|
|
|
*/
|
|
|
|
uint16_t gpio_input_data_read(gpio_type *gpio_x)
|
|
|
|
{
|
|
|
|
return ((uint16_t)(gpio_x->idt));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief read the specified output port pin.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param pins: gpio pin number
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* - GPIO_PINS_0
|
|
|
|
* - GPIO_PINS_1
|
|
|
|
* - GPIO_PINS_2
|
|
|
|
* - GPIO_PINS_3
|
|
|
|
* - GPIO_PINS_4
|
|
|
|
* - GPIO_PINS_5
|
|
|
|
* - GPIO_PINS_6
|
|
|
|
* - GPIO_PINS_7
|
|
|
|
* - GPIO_PINS_8
|
|
|
|
* - GPIO_PINS_9
|
|
|
|
* - GPIO_PINS_10
|
|
|
|
* - GPIO_PINS_11
|
|
|
|
* - GPIO_PINS_12
|
|
|
|
* - GPIO_PINS_13
|
|
|
|
* - GPIO_PINS_14
|
|
|
|
* - GPIO_PINS_15
|
|
|
|
* @retval flag_status (SET or RESET)
|
|
|
|
*/
|
|
|
|
flag_status gpio_output_data_bit_read(gpio_type *gpio_x, uint16_t pins)
|
|
|
|
{
|
|
|
|
flag_status status = RESET;
|
|
|
|
|
|
|
|
if((gpio_x->odt & pins) != RESET)
|
|
|
|
{
|
|
|
|
status = SET;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
status = RESET;
|
|
|
|
}
|
|
|
|
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief read the specified gpio ouput data port.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @retval gpio input data port value.
|
|
|
|
*/
|
|
|
|
uint16_t gpio_output_data_read(gpio_type *gpio_x)
|
|
|
|
{
|
|
|
|
return ((uint16_t)(gpio_x->odt));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief set the selected data port bits.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param pins: gpio pin number
|
|
|
|
* parameter can be any combination of gpio_pin_x, gpio_pin_x as following values:
|
|
|
|
* - GPIO_PINS_0
|
|
|
|
* - GPIO_PINS_1
|
|
|
|
* - GPIO_PINS_2
|
|
|
|
* - GPIO_PINS_3
|
|
|
|
* - GPIO_PINS_4
|
|
|
|
* - GPIO_PINS_5
|
|
|
|
* - GPIO_PINS_6
|
|
|
|
* - GPIO_PINS_7
|
|
|
|
* - GPIO_PINS_8
|
|
|
|
* - GPIO_PINS_9
|
|
|
|
* - GPIO_PINS_10
|
|
|
|
* - GPIO_PINS_11
|
|
|
|
* - GPIO_PINS_12
|
|
|
|
* - GPIO_PINS_13
|
|
|
|
* - GPIO_PINS_14
|
|
|
|
* - GPIO_PINS_15
|
|
|
|
* - GPIO_PINS_ALL
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_bits_set(gpio_type *gpio_x, uint16_t pins)
|
|
|
|
{
|
|
|
|
gpio_x->scr = pins;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief clear the selected data port bits.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param pins: gpio pin number
|
|
|
|
* parameter can be any combination of gpio_pin_x, gpio_pin_x as following values:
|
|
|
|
* - GPIO_PINS_0
|
|
|
|
* - GPIO_PINS_1
|
|
|
|
* - GPIO_PINS_2
|
|
|
|
* - GPIO_PINS_3
|
|
|
|
* - GPIO_PINS_4
|
|
|
|
* - GPIO_PINS_5
|
|
|
|
* - GPIO_PINS_6
|
|
|
|
* - GPIO_PINS_7
|
|
|
|
* - GPIO_PINS_8
|
|
|
|
* - GPIO_PINS_9
|
|
|
|
* - GPIO_PINS_10
|
|
|
|
* - GPIO_PINS_11
|
|
|
|
* - GPIO_PINS_12
|
|
|
|
* - GPIO_PINS_13
|
|
|
|
* - GPIO_PINS_14
|
|
|
|
* - GPIO_PINS_15
|
|
|
|
* - GPIO_PINS_ALL
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_bits_reset(gpio_type *gpio_x, uint16_t pins)
|
|
|
|
{
|
|
|
|
gpio_x->clr = pins;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief set or clear the selected data port bit.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param pins: gpio pin number
|
|
|
|
* parameter can be any combination of gpio_pin_x, gpio_pin_x as following values:
|
|
|
|
* - GPIO_PINS_0
|
|
|
|
* - GPIO_PINS_1
|
|
|
|
* - GPIO_PINS_2
|
|
|
|
* - GPIO_PINS_3
|
|
|
|
* - GPIO_PINS_4
|
|
|
|
* - GPIO_PINS_5
|
|
|
|
* - GPIO_PINS_6
|
|
|
|
* - GPIO_PINS_7
|
|
|
|
* - GPIO_PINS_8
|
|
|
|
* - GPIO_PINS_9
|
|
|
|
* - GPIO_PINS_10
|
|
|
|
* - GPIO_PINS_11
|
|
|
|
* - GPIO_PINS_12
|
|
|
|
* - GPIO_PINS_13
|
|
|
|
* - GPIO_PINS_14
|
|
|
|
* - GPIO_PINS_15
|
|
|
|
* - GPIO_PINS_ALL
|
|
|
|
* @param bit_state: specifies the value to be written to the selected bit (TRUE or FALSE).
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_bits_write(gpio_type *gpio_x, uint16_t pins, confirm_state bit_state)
|
|
|
|
{
|
|
|
|
if(bit_state != FALSE)
|
|
|
|
{
|
|
|
|
gpio_x->scr = pins;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gpio_x->clr = pins;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief write data to the specified gpio data port.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param port_value: specifies the value to be written to the port output data register.
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_port_wirte(gpio_type *gpio_x, uint16_t port_value)
|
|
|
|
{
|
|
|
|
gpio_x->odt = port_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief write protect gpio pins configuration registers.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param pins: gpio pin number
|
|
|
|
* this parameter can be any combination of the following:
|
|
|
|
* - GPIO_PINS_0
|
|
|
|
* - GPIO_PINS_1
|
|
|
|
* - GPIO_PINS_2
|
|
|
|
* - GPIO_PINS_3
|
|
|
|
* - GPIO_PINS_4
|
|
|
|
* - GPIO_PINS_5
|
|
|
|
* - GPIO_PINS_6
|
|
|
|
* - GPIO_PINS_7
|
|
|
|
* - GPIO_PINS_8
|
|
|
|
* - GPIO_PINS_9
|
|
|
|
* - GPIO_PINS_10
|
|
|
|
* - GPIO_PINS_11
|
|
|
|
* - GPIO_PINS_12
|
|
|
|
* - GPIO_PINS_13
|
|
|
|
* - GPIO_PINS_14
|
|
|
|
* - GPIO_PINS_15
|
|
|
|
* - GPIO_PINS_ALL
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_pin_wp_config(gpio_type *gpio_x, uint16_t pins)
|
|
|
|
{
|
|
|
|
uint32_t temp = 0x00010000;
|
|
|
|
|
|
|
|
temp |= pins;
|
|
|
|
/* set wpen bit */
|
|
|
|
gpio_x->wpr = temp;
|
|
|
|
/* reset wpen bit */
|
|
|
|
gpio_x->wpr = pins;
|
|
|
|
/* set wpen bit */
|
|
|
|
gpio_x->wpr = temp;
|
|
|
|
/* read wpen bit*/
|
|
|
|
temp = gpio_x->wpr;
|
|
|
|
/* read wpen bit*/
|
|
|
|
temp = gpio_x->wpr;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief enable or disable gpio pins huge driven.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param pins: gpio pin number
|
|
|
|
* parameter can be any combination of gpio_pin_x, gpio_pin_x as following values:
|
|
|
|
* - GPIO_PINS_0
|
|
|
|
* - GPIO_PINS_1
|
|
|
|
* - GPIO_PINS_2
|
|
|
|
* - GPIO_PINS_3
|
|
|
|
* - GPIO_PINS_4
|
|
|
|
* - GPIO_PINS_5
|
|
|
|
* - GPIO_PINS_6
|
|
|
|
* - GPIO_PINS_7
|
|
|
|
* - GPIO_PINS_8
|
|
|
|
* - GPIO_PINS_9
|
|
|
|
* - GPIO_PINS_10
|
|
|
|
* - GPIO_PINS_11
|
|
|
|
* - GPIO_PINS_12
|
|
|
|
* - GPIO_PINS_13
|
|
|
|
* - GPIO_PINS_14
|
|
|
|
* - GPIO_PINS_15
|
|
|
|
* - GPIO_PINS_ALL
|
|
|
|
* @param new_state: new state of the slew rate.
|
|
|
|
* this parameter can be: true or false.
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_pins_huge_driven_config(gpio_type *gpio_x, uint16_t pins, confirm_state new_state)
|
|
|
|
{
|
|
|
|
if(new_state != FALSE)
|
|
|
|
{
|
|
|
|
gpio_x->hdrv |= pins;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gpio_x->hdrv &= ~pins;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief configure the pin's muxing function.
|
|
|
|
* @param gpio_x: to select the gpio peripheral.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH.
|
|
|
|
* @param gpio_pin_source: specifies the pin for the muxing function.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* - GPIO_PINS_SOURCE0
|
|
|
|
* - GPIO_PINS_SOURCE1
|
|
|
|
* - GPIO_PINS_SOURCE2
|
|
|
|
* - GPIO_PINS_SOURCE3
|
|
|
|
* - GPIO_PINS_SOURCE4
|
|
|
|
* - GPIO_PINS_SOURCE5
|
|
|
|
* - GPIO_PINS_SOURCE6
|
|
|
|
* - GPIO_PINS_SOURCE7
|
|
|
|
* - GPIO_PINS_SOURCE8
|
|
|
|
* - GPIO_PINS_SOURCE9
|
|
|
|
* - GPIO_PINS_SOURCE10
|
|
|
|
* - GPIO_PINS_SOURCE11
|
|
|
|
* - GPIO_PINS_SOURCE12
|
|
|
|
* - GPIO_PINS_SOURCE13
|
|
|
|
* - GPIO_PINS_SOURCE14
|
|
|
|
* - GPIO_PINS_SOURCE15
|
|
|
|
* @param gpio_mux: select the pin to used as muxing function.
|
|
|
|
* this parameter can be one of the following values:
|
|
|
|
* - GPIO_MUX_0
|
|
|
|
* - GPIO_MUX_1
|
|
|
|
* - GPIO_MUX_2
|
|
|
|
* - GPIO_MUX_3
|
|
|
|
* - GPIO_MUX_4
|
|
|
|
* - GPIO_MUX_5
|
|
|
|
* - GPIO_MUX_6
|
|
|
|
* - GPIO_MUX_7
|
|
|
|
* - GPIO_MUX_8
|
|
|
|
* - GPIO_MUX_9
|
|
|
|
* - GPIO_MUX_10
|
|
|
|
* - GPIO_MUX_11
|
|
|
|
* - GPIO_MUX_12
|
|
|
|
* - GPIO_MUX_13
|
|
|
|
* - GPIO_MUX_14
|
|
|
|
* - GPIO_MUX_15
|
|
|
|
* @retval none
|
|
|
|
*/
|
|
|
|
void gpio_pin_mux_config(gpio_type *gpio_x, gpio_pins_source_type gpio_pin_source, gpio_mux_sel_type gpio_mux)
|
|
|
|
{
|
|
|
|
uint32_t temp = 0x00;
|
|
|
|
uint32_t temp_2 = 0x00;
|
|
|
|
|
|
|
|
temp = ((uint32_t)(gpio_mux) << ((uint32_t)((uint32_t)gpio_pin_source & (uint32_t)0x07) * 4));
|
|
|
|
if(gpio_pin_source >> 0x03)
|
|
|
|
{
|
|
|
|
gpio_x->muxh &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)gpio_pin_source & (uint32_t)0x07) * 4));
|
|
|
|
temp_2 = gpio_x->muxh | temp;
|
|
|
|
gpio_x->muxh = temp_2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gpio_x->muxl &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)gpio_pin_source & (uint32_t)0x07) * 4));
|
|
|
|
temp_2 = gpio_x->muxl | temp;
|
|
|
|
gpio_x->muxl = temp_2;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @}
|
|
|
|
*/
|