| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- /*****************************************************************************
- * Copyright (C) 2020, Huada Semiconductor Co., Ltd. All rights reserved.
- *
- * This software component is licensed by HDSC under BSD 3-Clause license
- * (the "License"); You may not use this file except in compliance with the
- * License. You may obtain a copy of the License at:
- * opensource.org/licenses/BSD-3-Clause
- */
- /******************************************************************************/
- /** \file hc32f460_gpio.h
- **
- ** A detailed description is available at
- ** @link GpioGroup Gpio description @endlink
- **
- ** - 2018-10-12 CDT First version for Device Driver Library of Gpio.
- **
- ******************************************************************************/
- #ifndef __HC32F460_GPIO_H__
- #define __HC32F460_GPIO_H__
- /*******************************************************************************
- * Include files
- ******************************************************************************/
- #include "hc32_common.h"
- #include "ddl_config.h"
- #if (DDL_GPIO_ENABLE == DDL_ON)
- /* C binding of definitions if building with C++ compiler */
- #ifdef __cplusplus
- extern "C"
- {
- #endif
- /**
- *******************************************************************************
- ** \defgroup GpioGroup General Purpose Input/Output(GPIO)
- **
- ******************************************************************************/
- //@{
- /*******************************************************************************
- * Global type definitions ('typedef')
- ******************************************************************************/
- /**
- *******************************************************************************
- ** \brief GPIO Configuration Mode enumeration
- **
- ******************************************************************************/
- typedef enum en_pin_mode
- {
- Pin_Mode_In = 0, ///< GPIO Input mode
- Pin_Mode_Out = 1, ///< GPIO Output mode
- Pin_Mode_Ana = 2, ///< GPIO Analog mode
- }en_pin_mode_t;
- /**
- *******************************************************************************
- ** \brief GPIO Drive Capacity enumeration
- **
- ******************************************************************************/
- typedef enum en_pin_drv
- {
- Pin_Drv_L = 0, ///< Low Drive Capacity
- Pin_Drv_M = 1, ///< Middle Drive Capacity
- Pin_Drv_H = 2, ///< High Drive Capacity
- }en_pin_drv_t;
- /**
- *******************************************************************************
- ** \brief GPIO Output Type enumeration
- ******************************************************************************/
- typedef enum en_pin_o_type
- {
- Pin_OType_Cmos = 0, ///< CMOS
- Pin_OType_Od = 1, ///< Open Drain
- }en_pin_o_type_t;
- typedef enum en_debug_port
- {
- TCK_SWCLK = 1 << 0, ///< TCK or SWCLK
- TMS_SWDIO = 1 << 1, ///< TMS or SWDIO
- TDO_SWO = 1 << 2, ///< TOD or SWD
- TDI = 1 << 3, ///< TDI
- TRST = 1 << 4, ///< TRest
- ALL_DBG_PIN = 0x1Fu ///< All above
- }en_debug_port_t;
- /**
- *******************************************************************************
- ** \brief GPIO Port Index enumeration
- ******************************************************************************/
- typedef enum en_port
- {
- PortA = 0, ///< port group A
- PortB = 1, ///< port group B
- PortC = 2, ///< port group C
- PortD = 3, ///< port group D
- PortE = 4, ///< port group E
- PortH = 5, ///< port group H
- }en_port_t;
- /**
- *******************************************************************************
- ** \brief GPIO Pin Index enumeration
- ******************************************************************************/
- typedef enum en_pin
- {
- Pin00 = (1 << 0), ///< Pin index 00 of each port group
- Pin01 = (1 << 1), ///< Pin index 01 of each port group
- Pin02 = (1 << 2), ///< Pin index 02 of each port group
- Pin03 = (1 << 3), ///< Pin index 03 of each port group
- Pin04 = (1 << 4), ///< Pin index 04 of each port group
- Pin05 = (1 << 5), ///< Pin index 05 of each port group
- Pin06 = (1 << 6), ///< Pin index 06 of each port group
- Pin07 = (1 << 7), ///< Pin index 07 of each port group
- Pin08 = (1 << 8), ///< Pin index 08 of each port group
- Pin09 = (1 << 9), ///< Pin index 09 of each port group
- Pin10 = (1 << 10), ///< Pin index 10 of each port group
- Pin11 = (1 << 11), ///< Pin index 11 of each port group
- Pin12 = (1 << 12), ///< Pin index 12 of each port group
- Pin13 = (1 << 13), ///< Pin index 13 of each port group
- Pin14 = (1 << 14), ///< Pin index 14 of each port group
- Pin15 = (1 << 15), ///< Pin index 15 of each port group
- PinAll= 0xFFFF, ///< All pins selected
- }en_pin_t;
- /**
- *******************************************************************************
- ** \brief GPIO Pin read wait cycle enumeration
- ******************************************************************************/
- typedef enum en_read_wait
- {
- WaitCycle0 = 0, ///< no wait cycle, operation freq. lower than 42MHz
- WaitCycle1 = 1, ///< one wait cycle, operation freq. @[42~84)MHz
- WaitCycle2 = 2, ///< two wait cycles, operation freq. @[84~126)MHz
- WaitCycle3 = 3, ///< three wait cycles, operation freq. @[126~200)MHz
- }en_read_wait_t;
- /**
- *******************************************************************************
- ** \brief GPIO Function enumeration
- ******************************************************************************/
- typedef enum en_port_func
- {
- Func_Gpio = 0u, ///< function set to gpio
- Func_Fcmref = 1u, ///< function set to fcm reference
- Func_Rtcout = 1u, ///< function set to rtc output
- Func_Vcout = 1u, ///< function set to vc output
- Func_Adtrg = 1u, ///< function set to adc trigger
- Func_Mclkout = 1u, ///< function set to mclk output
- Func_Tim4 = 2u, ///< function set to timer4
- Func_Tim6 = 3u, ///< function set to timer6
- Func_Tima0 = 4u, ///< function set to timerA
- Func_Tima1 = 5u, ///< function set to timerA
- Func_Tima2 = 6u, ///< function set to timerA
- Func_Emb = 6u, ///< function set to emb
- Func_Usart_Ck = 7u, ///< function set to usart clk
- Func_Spi_Nss = 7u, ///< function set to spi nss
- Func_Qspi = 7u, ///< function set to qspi
- Func_Key = 8u, ///< function set to key
- Func_Sdio = 9u, ///< function set to sdio
- Func_I2s = 10u, ///< function set to i2s
- Func_UsbF = 10u, ///< function set to usb full speed
- Func_Evnpt = 14u, ///< function set to event port
- Func_Eventout = 15u, ///< function set to event out
- Func_Usart1_Tx = 32u, ///< function set to usart tx of ch.1
- Func_Usart3_Tx = 32u, ///< function set to usart tx of ch.3
- Func_Usart1_Rx = 33u, ///< function set to usart rx of ch.1
- Func_Usart3_Rx = 33u, ///< function set to usart rx of ch.3
- Func_Usart1_Rts = 34u, ///< function set to usart rts of ch.1
- Func_Usart3_Rts = 34u, ///< function set to usart rts of ch.3
- Func_Usart1_Cts = 35u, ///< function set to usart cts of ch.1
- Func_Usart3_Cts = 35u, ///< function set to usart cts of ch.3
- Func_Usart2_Tx = 36u, ///< function set to usart tx of ch.2
- Func_Usart4_Tx = 36u, ///< function set to usart tx of ch.4
- Func_Usart2_Rx = 37u, ///< function set to usart rx of ch.2
- Func_Usart4_Rx = 37u, ///< function set to usart rx of ch.4
- Func_Usart2_Rts = 38u, ///< function set to usart rts of ch.2
- Func_Usart4_Rts = 38u, ///< function set to usart rts of ch.4
- Func_Usart2_Cts = 39u, ///< function set to usart cts of ch.2
- Func_Usart4_Cts = 39u, ///< function set to usart cts of ch.4
- Func_Spi1_Mosi = 40u, ///< function set to spi mosi of ch.1
- Func_Spi3_Mosi = 40u, ///< function set to spi mosi of ch.3
- Func_Spi1_Miso = 41u, ///< function set to spi miso of ch.1
- Func_Spi3_Miso = 41u, ///< function set to spi miso of ch.3
- Func_Spi1_Nss0 = 42u, ///< function set to spi nss0 of ch.1
- Func_Spi3_Nss0 = 42u, ///< function set to spi nss0 of ch.3
- Func_Spi1_Sck = 43u, ///< function set to spi sck of ch.1
- Func_Spi3_Sck = 43u, ///< function set to spi sck of ch.3
- Func_Spi2_Mosi = 44u, ///< function set to spi mosi of ch.2
- Func_Spi4_Mosi = 44u, ///< function set to spi mosi of ch.2
- Func_Spi2_Miso = 45u, ///< function set to spi miso of ch.4
- Func_Spi4_Miso = 45u, ///< function set to spi miso of ch.4
- Func_Spi2_Nss0 = 46u, ///< function set to spi nss0 of ch.2
- Func_Spi4_Nss0 = 46u, ///< function set to spi nss0 of ch.4
- Func_Spi2_Sck = 47u, ///< function set to spi sck of ch.2
- Func_Spi4_Sck = 47u, ///< function set to spi sck of ch.4
- Func_I2c1_Sda = 48u, ///< function set to i2c sda of ch.1
- Func_I2c3_Sda = 48u, ///< function set to i2c sda of ch.3
- Func_I2c1_Scl = 49u, ///< function set to i2c scl of ch.1
- Func_I2c3_Scl = 49u, ///< function set to i2c scl of ch.3
- Func_I2c2_Sda = 50u, ///< function set to i2c sda of ch.2
- Func_Can1_Tx = 50u, ///< function set to can tx of ch.1
- Func_I2c2_Scl = 51u, ///< function set to i2c scl of ch.2
- Func_Can1_Rx = 51u, ///< function set to can rx of ch.1
- Func_I2s1_Sd = 52u, ///< function set to i2s sd of ch.1
- Func_I2s3_Sd = 52u, ///< function set to i2s sd of ch.3
- Func_I2s1_Sdin = 53u, ///< function set to i2s sdin of ch.1
- Func_I2s3_Sdin = 53u, ///< function set to i2s sdin of ch.3
- Func_I2s1_Ws = 54u, ///< function set to i2s ws of ch.1
- Func_I2s3_Ws = 54u, ///< function set to i2s ws of ch.3
- Func_I2s1_Ck = 55u, ///< function set to i2s ck of ch.1
- Func_I2s3_Ck = 55u, ///< function set to i2s ck of ch.3
- Func_I2s2_Sd = 56u, ///< function set to i2s sd of ch.2
- Func_I2s4_Sd = 56u, ///< function set to i2s sd of ch.4
- Func_I2s2_Sdin = 57u, ///< function set to i2s sdin of ch.2
- Func_I2s4_Sdin = 57u, ///< function set to i2s sdin of ch.4
- Func_I2s2_Ws = 58u, ///< function set to i2s ws of ch.2
- Func_I2s4_Ws = 58u, ///< function set to i2s ws of ch.4
- Func_I2s2_Ck = 59u, ///< function set to i2s ck of ch.2
- Func_I2s4_Ck = 59u, ///< function set to i2s ck of ch.4
- }en_port_func_t;
- /**
- *******************************************************************************
- ** \brief GPIO init structure definition
- ******************************************************************************/
- typedef struct stc_port_init
- {
- en_pin_mode_t enPinMode; ///< Set pin mode @ref en_pin_mode_t
- en_functional_state_t enLatch; ///< Pin output latch enable
- en_functional_state_t enExInt; ///< External int enable
- en_functional_state_t enInvert; ///< Pin input/output invert enable
- en_functional_state_t enPullUp; ///< Internal pull-up resistor enable
- en_pin_drv_t enPinDrv; ///< Drive capacity setting @ref en_pin_drv_t
- en_pin_o_type_t enPinOType; ///< Output mode setting @ref en_pin_o_type_t
- en_functional_state_t enPinSubFunc; ///< Pin sub-function enable
- }stc_port_init_t;
- /**
- *******************************************************************************
- ** \brief GPIO public setting structure definition
- ******************************************************************************/
- typedef struct stc_port_pub_set
- {
- en_port_func_t enSubFuncSel; ///< Sub-function setting @ref en_port_func_t
- en_read_wait_t enReadWait; ///< Read wait cycle setting @ref en_read_wait_t
- }stc_port_pub_set_t;
- /*******************************************************************************
- * Global pre-processor symbols/macros ('#define')
- ******************************************************************************/
- /*******************************************************************************
- * Global variable definitions ('extern')
- ******************************************************************************/
- /*******************************************************************************
- Global function prototypes (definition in C source)
- ******************************************************************************/
- extern en_result_t PORT_Init(en_port_t enPort, uint16_t u16Pin, \
- const stc_port_init_t *pstcPortInit);
- extern en_result_t PORT_DeInit(void);
- extern void PORT_Unlock(void);
- extern void PORT_Lock(void);
- extern en_result_t PORT_DebugPortSetting(uint8_t u8DebugPort, en_functional_state_t enFunc);
- extern en_result_t PORT_PubSetting(const stc_port_pub_set_t *pstcPortPubSet);
- extern uint16_t PORT_GetData(en_port_t enPort);
- extern en_flag_status_t PORT_GetBit(en_port_t enPort, en_pin_t enPin);
- extern en_result_t PORT_SetPortData(en_port_t enPort, uint16_t u16Pin);
- extern en_result_t PORT_ResetPortData(en_port_t enPort, uint16_t u16Pin);
- extern en_result_t PORT_OE(en_port_t enPort, uint16_t u16Pin, en_functional_state_t enNewState);
- extern en_result_t PORT_SetBits(en_port_t enPort, uint16_t u16Pin);
- extern en_result_t PORT_ResetBits(en_port_t enPort, uint16_t u16Pin);
- extern en_result_t PORT_Toggle(en_port_t enPort, uint16_t u16Pin);
- extern en_result_t PORT_SetFunc(en_port_t enPort, uint16_t u16Pin, \
- en_port_func_t enFuncSel, en_functional_state_t enSubFunc);
- extern en_result_t PORT_SetSubFunc(en_port_func_t enFuncSel);
- //@} // GpioGroup
- #ifdef __cplusplus
- }
- #endif
- #endif /* DDL_GPIO_ENABLE */
- #endif /* __HC32F460_GPIO_H__ */
- /*******************************************************************************
- * EOF (not truncated)
- ******************************************************************************/
|