mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-22 17:12:55 +08:00
219 lines
6.6 KiB
C
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__ */
|
|
|