MindSDK_MM32F3270/device/drivers/hal_gpio.h
Yilin Sun 6a70c509d4 Initial MM32F3270 SDK.
Signed-off-by: Yilin Sun <imi415@imi.moe>
2023-03-27 17:11:47 +08:00

219 lines
6.6 KiB
C

/*
* Copyright 2021 MindMotion Microelectronics Co., Ltd.
* All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __HAL_GPIO_H__
#define __HAL_GPIO_H__
#include "hal_common.h"
/*!
* @addtogroup GPIO
* @{
*/
/*!
* @addtogroup GPIO_PIN
* @brief GPIO pin mask codes.
* @{
*/
#define GPIO_PIN_0 (0x0001u) /*!< Pin 0 selected. */
#define GPIO_PIN_1 (0x0002u) /*!< Pin 1 selected. */
#define GPIO_PIN_2 (0x0004u) /*!< Pin 2 selected. */
#define GPIO_PIN_3 (0x0008u) /*!< Pin 3 selected. */
#define GPIO_PIN_4 (0x0010u) /*!< Pin 4 selected. */
#define GPIO_PIN_5 (0x0020u) /*!< Pin 5 selected. */
#define GPIO_PIN_6 (0x0040u) /*!< Pin 6 selected. */
#define GPIO_PIN_7 (0x0080u) /*!< Pin 7 selected. */
#define GPIO_PIN_8 (0x0100u) /*!< Pin 8 selected. */
#define GPIO_PIN_9 (0x0200u) /*!< Pin 9 selected. */
#define GPIO_PIN_10 (0x0400u) /*!< Pin 10 selected. */
#define GPIO_PIN_11 (0x0800u) /*!< Pin 11 selected. */
#define GPIO_PIN_12 (0x1000u) /*!< Pin 12 selected. */
#define GPIO_PIN_13 (0x2000u) /*!< Pin 13 selected. */
#define GPIO_PIN_14 (0x4000u) /*!< Pin 14 selected. */
#define GPIO_PIN_15 (0x8000u) /*!< Pin 15 selected. */
#define GPIO_PINS_ALL (0xFFFFu) /*!< All pins selected. */
/*!
* @}
*/
/*!
* @addtogroup GPIO_AF
* @brief GPIO pin alternative function.
* @{
*/
#define GPIO_AF_0 (0x00u) /*!< Alternative function 0. */
#define GPIO_AF_1 (0x01u) /*!< Alternative function 1. */
#define GPIO_AF_2 (0x02u) /*!< Alternative function 2. */
#define GPIO_AF_3 (0x03u) /*!< Alternative function 3. */
#define GPIO_AF_4 (0x04u) /*!< Alternative function 4. */
#define GPIO_AF_5 (0x05u) /*!< Alternative function 5. */
#define GPIO_AF_6 (0x06u) /*!< Alternative function 6. */
#define GPIO_AF_7 (0x07u) /*!< Alternative function 7. */
#define GPIO_AF_8 (0x08u) /*!< Alternative function 8. */
#define GPIO_AF_9 (0x09u) /*!< Alternative function 9. */
#define GPIO_AF_10 (0x0Au) /*!< Alternative function 10. */
#define GPIO_AF_11 (0x0Bu) /*!< Alternative function 11. */
#define GPIO_AF_12 (0x0Cu) /*!< Alternative function 12. */
#define GPIO_AF_13 (0x0Du) /*!< Alternative function 13. */
#define GPIO_AF_14 (0x0Eu) /*!< Alternative function 14. */
#define GPIO_AF_15 (0x0Fu) /*!< Alternative function 15. */
/*!
* @}
*/
/*!
* @brief GPIO maximum speed type.
*/
typedef enum
{
GPIO_Speed_10MHz = 1u, /*!< Maximum speed is 10MHz. */
GPIO_Speed_20MHz = 2u, /*!< Maximum speed is 20MHz. */
GPIO_Speed_50MHz = 3u, /*!< Maximum speed is 50MHz. */
} GPIO_Speed_Type;
/*!
* @brief Port input / output mode.
*/
typedef enum
{
GPIO_PinMode_In_Analog = 0x00u, /*!< Analog input. */
GPIO_PinMode_In_Floating = 0x04u, /*!< Floating input. */
GPIO_PinMode_In_PullDown = 0x28u, /*!< Pull down input. */
GPIO_PinMode_In_PullUp = 0x48u, /*!< Pull up input. */
GPIO_PinMode_Out_OpenDrain = 0x14u, /*!< Universal open drain output. */
GPIO_PinMode_Out_PushPull = 0x10u, /*!< Universal push-pull output. */
GPIO_PinMode_AF_OpenDrain = 0x1Cu, /*!< Multiplex open drain output. */
GPIO_PinMode_AF_PushPull = 0x18u, /*!< Multiplexed push-pull output. */
} GPIO_PinMode_Type;
/*!
* @brief This type of structure instance is used to keep the settings when calling the @ref GPIO_Init() to initialize the GPIO module.
*/
typedef struct
{
uint16_t Pins; /*!< GPIO operating pins. */
GPIO_Speed_Type Speed; /*!< GPIO pin speed mode. */
GPIO_PinMode_Type PinMode; /*!< GPIO pin input / output functional mode. */
} GPIO_Init_Type;
/*!
* @brief Initialize the GPIO module.
*
* @param GPIOx GPIO instance.
* @param init Pointer to the initialization structure. See to @ref GPIO_Init_Type.
* @return None.
*/
void GPIO_Init(GPIO_Type * GPIOx, GPIO_Init_Type * init);
/*!
* @brief Set the specified data port bit.
*
* @param GPIOx GPIO instance.
* @param pins GPIO operating pins. See to @ref GPIO_PIN.
* @return None.
*/
void GPIO_SetBits(GPIO_Type * GPIOx, uint16_t pins);
/*!
* @brief Clear the specified data port bit.
*
* @param GPIOx GPIO instance.
* @param pins GPIO operating pins. See to @ref GPIO_PIN.
* @return None.
*/
void GPIO_ClearBits(GPIO_Type * GPIOx, uint16_t pins);
/*!
* @brief Writes 0 or 1 to the specified bit.
*
* @param GPIOx GPIO instance.
* @param pins GPIO operating pins. See to @ref GPIO_PIN.
* @param val Decide whether to set or clear.
* @return None.
*/
void GPIO_WriteBit(GPIO_Type * GPIOx, uint16_t pins, uint16_t val);
/*!
* @brief Write 0 or 1 for multiple I/O ports.
*
* @param GPIOx GPIO instance.
* @param val Decide whether to set or clear.
* @return None.
*/
void GPIO_WriteBits(GPIO_Type * GPIOx, uint16_t val);
/*!
* @brief Keep the set I/O configuration can not be changed.
*
* @param GPIOx GPIO instance.
* @param pins GPIO operating pins. See to @ref GPIO_PIN.
* @param enable_lock enable 'true' to enable the lock, 'false' to disable the lock.
* @return None.
*/
void GPIO_PinLock(GPIO_Type * GPIOx, uint16_t pins, bool enable_lock);
/*!
* @brief Lock the corresponding bit of the select port configuration register.
*
* @param GPIOx GPIO instance.
* @param pins GPIO operating pins. See to @ref GPIO_PIN.
* @return None.
*/
void GPIO_PinLockConf(GPIO_Type * GPIOx, uint16_t pins);
/*!
* @brief Read the value once entered before by the specified pin.
*
* @param GPIOx GPIO instance.
* @param pins GPIO operating pins. See to @ref GPIO_PIN.
* @return Status of a pin's logic level, 0 for low level or 1 for high level.
*/
bool GPIO_ReadInDataBit(GPIO_Type * GPIOx, uint16_t pins);
/*!
* @brief Read the value previously output by the specified pin.
*
* @param GPIOx GPIO instance.
* @param pins GPIO operating pins. See to @ref GPIO_PIN.
* @return Status of a pin's logic level, 0 for low level or 1 for high level.
*/
bool GPIO_ReadOutDataBit(GPIO_Type * GPIOx, uint16_t pins);
/*!
* @brief Read the specified GPIO port input.
*
* @param GPIOx GPIO instance.
* @return A hexadecimal number.
*/
uint16_t GPIO_ReadInData(GPIO_Type * GPIOx);
/*!
* @brief Read the specified GPIO port output.
*
* @param GPIOx GPIO instance.
* @return A hexadecimal number.
*/
uint16_t GPIO_ReadOutData(GPIO_Type * GPIOx);
/*!
* @brief Pin alternate function configuration of GPIO.
*
* @param GPIOx GPIO instance.
* @param pins GPIO operating pins. See to @ref GPIO_PIN.
* @param alternate_function Reuse the unified I/O port, but the function is different.
* @return None.
*/
void GPIO_PinAFConf(GPIO_Type* GPIOx, uint16_t pins, uint8_t alternate_function);
/*!
* @}
*/
#endif /* __HAL_GPIO_H__ */