Newer
Older
mbed-os / targets / TARGET_TOSHIBA / TARGET_TMPM4NR / Periph_driver / src / txz_gpio.c
@Jay Sridharan Jay Sridharan on 31 Dec 2022 85 KB Merge upstream changes into mbed-ce (#117)
/**
 *******************************************************************************
 * @file    txz_gpio.c
 * @brief   This file provides API functions for GPIO driver.
 * @version V1.0.0
 *
 * DO NOT USE THIS SOFTWARE WITHOUT THE SOFTWARE LICENSE AGREEMENT.
 *
 * Copyright(C) TOSHIBA ELECTRONIC DEVICES & STORAGE CORPORATION 2021
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************
 */

#ifdef __cplusplus
extern "C" {
#endif

/*------------------------------------------------------------------------------*/
/*  Includes                                                                    */
/*------------------------------------------------------------------------------*/
#include "txz_gpio.h"

#if defined(__GPIO_H)
/**
 *  @addtogroup Periph_Driver
 *  @{
 */

/**
 *  @addtogroup GPIO
 *  @{
 */

/*------------------------------------------------------------------------------*/
/*  Macro Definition                                                            */
/*------------------------------------------------------------------------------*/
/**
 *  @defgroup GPIO_Private_define GPIO Private Define
 *  @{
 */
/**
 *  @name  Parameter Result
 *  @brief Whether the parameter is specified or not.
 *  @{
 */
#define PARAM_OK    ((int32_t)1)    /*!< Parameter is valid(specified).         */
#define PARAM_NG    ((int32_t)0)    /*!< Parameter is invalid(not specified).   */
/**
 *  @}
 */ /* End of name Parameter Result */

/**
 *  @name  Bit Operation Macro
 *  @brief Whether the parameter is specified or not.
 *  @{
 */
#define PORT_BASE (0x400E0000UL) /*!< Port Register Base Adress */
#define BITBAND_PORT_OFFSET (0x0000100UL) /*!< Port Register Offset Value */
#define BITBAND_PORT_BASE(gr) (PORT_BASE + (uint32_t)((BITBAND_PORT_OFFSET) * (uint32_t)(gr)) ) /*!<  Operational target Port Adress */
#define BITBAND_PORT_MODE_BASE(base, pinmode) ((uint32_t)(base) + (uint32_t)(pinmode) )  /*!< Operational target Control Register Adress */
#define BITBAND_PORT_SET(base, bitnum) (*((__IO uint32_t *)(base)) |= (uint32_t)(0x0000001UL<< (bitnum))) /*!< Target Pin Bit set */
#define BITBAND_PORT_CLR(base, bitnum) (*((__IO uint32_t *)(base)) &= ~((uint32_t)(0x0000001UL<< (bitnum)))) /*!< Target Pin Bit clear */
#define BITBAND_PORT_READ(val, base, bitnum) ((val) = ((*((__IO uint32_t *)(base)) & (uint32_t)(0x0000001UL<< (bitnum))) >> (bitnum))) /*!< Target Pin Bit read */
/**
 *  @}
 */ /* End of Bit Operation Macro */
/**
 *  @}
 */ /* End of group GPIO_Private_typedef */

/*------------------------------------------------------------------------------*/
/*  Enumerated Type Definition                                                  */
/*------------------------------------------------------------------------------*/
/**
 *  @defgroup GPIO_Private_define GPIO Private Define
 *  @{
 */

/* no define */

/**
 *  @}
 */ /* End of group GPIO_Private_define */
/*------------------------------------------------------------------------------*/
/*  Structure Definition                                                        */
/*------------------------------------------------------------------------------*/
/**
 *  @defgroup GPIO_Private_typedef GPIO Private Typedef
 *  @{
 */

/* no define */

/**
 *  @}
 */ /* End of group GPIO_Private_typedef */
/*------------------------------------------------------------------------------*/
/*  Private Function                                                            */
/*------------------------------------------------------------------------------*/
/**
 *  @defgroup GPIO_Private_fuctions GPIO Private Fuctions
 *  @{
 */

static uint8_t change_mode_to_num(uint32_t mode);
static uint8_t change_func_to_num(uint32_t func);
static int32_t check_param_pin_exist(_gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode);
static int32_t check_param_func_pin_exist(_gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t func);

static uint8_t change_mode_to_num(uint32_t mode)
{
    uint8_t retVal = 0;

    if (mode == GPIO_Mode_DATA)     {
        retVal = GPIO_ModeNum_DATA;
    } else if (mode == GPIO_Mode_CR)  {
        retVal = GPIO_ModeNum_CR;
    } else if (mode == GPIO_Mode_FR1) {
        retVal = GPIO_ModeNum_FR1;
    } else if (mode == GPIO_Mode_FR2) {
        retVal = GPIO_ModeNum_FR2;
    } else if (mode == GPIO_Mode_FR3) {
        retVal = GPIO_ModeNum_FR3;
    } else if (mode == GPIO_Mode_FR4) {
        retVal = GPIO_ModeNum_FR4;
    } else if (mode == GPIO_Mode_FR5) {
        retVal = GPIO_ModeNum_FR5;
    } else if (mode == GPIO_Mode_FR6) {
        retVal = GPIO_ModeNum_FR6;
    } else if (mode == GPIO_Mode_FR7) {
        retVal = GPIO_ModeNum_FR7;
    } else if (mode == GPIO_Mode_FR8) {
        retVal = GPIO_ModeNum_FR8;
    } else if (mode == GPIO_Mode_OD)  {
        retVal = GPIO_ModeNum_OD;
    } else if (mode == GPIO_Mode_PUP) {
        retVal = GPIO_ModeNum_PUP;
    } else if (mode == GPIO_Mode_PDN) {
        retVal = GPIO_ModeNum_PDN;
    } else if (mode == GPIO_Mode_IE)  {
        retVal = GPIO_ModeNum_IE;
    } else {
        retVal = GPIO_ModeNum_Max;
    }

    return retVal;
}

static uint8_t change_func_to_num(uint32_t func)
{
    uint8_t retVal = 0;

    if (func == GPIO_FR_1)     {
        retVal = GPIO_ModeNum_FR1;
    } else if (func == GPIO_FR_2) {
        retVal = GPIO_ModeNum_FR2;
    } else if (func == GPIO_FR_3) {
        retVal = GPIO_ModeNum_FR3;
    } else if (func == GPIO_FR_4) {
        retVal = GPIO_ModeNum_FR4;
    } else if (func == GPIO_FR_5) {
        retVal = GPIO_ModeNum_FR5;
    } else if (func == GPIO_FR_6) {
        retVal = GPIO_ModeNum_FR6;
    } else if (func == GPIO_FR_7) {
        retVal = GPIO_ModeNum_FR7;
    } else if (func == GPIO_FR_8) {
        retVal = GPIO_ModeNum_FR8;
    } else if (func == GPIO_FR_NA) {
        retVal = GPIO_ModeNum_CR;
    } else if (func == 0)         {
        retVal = GPIO_ModeNum_CR;
    } else {
        retVal = GPIO_ModeNum_Max;
    }

    return retVal;
}

/*--------------------------------------------------*/
/*!
  * @fn     static int32_t check_param_pin_exist(gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode)
  * @brief  Check the Pin Exist.
  * @param[in] p_obj :GPIO object.
  * @param[in] group :GPIO Port Group.  : Use @ref gpio_gr_t
  * @param[in] num   :GPIO Port Number. : Use @ref gpio_num_t
  * @param[in] mode  :GPIO Port Mode. : Use @ref gpio_mode_t
  * @retval PARAM_OK :Valid
  * @retval PARAM_NG :Invalid
  */
/*--------------------------------------------------*/
static int32_t check_param_pin_exist(_gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode)
{
    int32_t result = PARAM_NG;
    uint8_t chgmode;
    uint16_t tmp;

    chgmode = change_mode_to_num(mode);
    if ((chgmode < GPIO_ModeNum_Max) && (group < GPIO_GROUP_Max) && (num < GPIO_PORT_Max)) {
        tmp = (PinExistTbl[group][num] >> chgmode) & 0x01;
        result = PARAM_OK;
        if (tmp == 0) {
            result = PARAM_NG;
        }
    } else {
        result = PARAM_NG;
    }

    return (result);
}
static int32_t check_param_func_pin_exist(_gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t func)
{
    int32_t result = PARAM_NG;
    uint8_t chgfunc;
    uint16_t tmp;

    chgfunc = change_func_to_num(func);
    /* param check skip if func is INPUT or OUTPUT */
    if (chgfunc == GPIO_ModeNum_CR) {
        return (PARAM_OK);
    }
    if ((chgfunc < GPIO_ModeNum_Max) && (group < GPIO_GROUP_Max) && (num < GPIO_PORT_Max)) {
        tmp = (PinExistTbl[group][num] >> chgfunc) & 0x01;
        result = PARAM_OK;
        if (tmp == 0) {
            result = PARAM_NG;
        }
    } else {
        result = PARAM_NG;
    }

    return (result);
}
/**
 *  @}
 */ /* End of group GPIO_Private_functions */



/*------------------------------------------------------------------------------*/
/*  Public Function                                                             */
/*------------------------------------------------------------------------------*/
/**
 *  @addtogroup GPIO_Exported_functions
 *  @{
 */
/*--------------------------------------------------*/
/*!
  * @fn     TXZ_Result gpio_init(gpio_t *p_obj, uint32_t group)
  * @brief     Initialize the GPIO object.
  * @param[in] p_obj :GPIO object.
  * @param[in] group :GPIO Port Group.  : Use @ref gpio_gr_t
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note      When p_obj is NULL, "Failure" is returned.
  * @note      An initial value of default is set at the
               reset status value. If needed, please
               rewrite and use an initial value.
  * @attention This function is not available in interrupt.
  */
/*--------------------------------------------------*/
TXZ_Result _gpio_init(_gpio_t *p_obj, uint32_t group)
{
    TXZ_Result result = TXZ_SUCCESS;

    /* Check the NULL of address. */
    if ((void *)(p_obj) == (void *)0) {
        result = TXZ_ERROR;
    } else {
        switch (group) {
            case GPIO_PORT_A:
                /* PA Clock Enable */
                PORT_CLOCK_ENABLE_PORTA(TSB_CG_FSYSMENB_IPMENB02);
                INIT_GPIO_PORT_A_DATA(p_obj->p_pa_instance->DATA);
                INIT_GPIO_PORT_A_CR(p_obj->p_pa_instance->CR);
                INIT_GPIO_PORT_A_FR1(p_obj->p_pa_instance->FR1);
                INIT_GPIO_PORT_A_FR2(p_obj->p_pa_instance->FR2);
                INIT_GPIO_PORT_A_FR3(p_obj->p_pa_instance->FR3);
                INIT_GPIO_PORT_A_FR4(p_obj->p_pa_instance->FR4);
                INIT_GPIO_PORT_A_FR5(p_obj->p_pa_instance->FR5);
                INIT_GPIO_PORT_A_FR6(p_obj->p_pa_instance->FR6);
                INIT_GPIO_PORT_A_FR7(p_obj->p_pa_instance->FR7);
                INIT_GPIO_PORT_A_FR8(p_obj->p_pa_instance->FR8);
                INIT_GPIO_PORT_A_OD(p_obj->p_pa_instance->OD);
                INIT_GPIO_PORT_A_PUP(p_obj->p_pa_instance->PUP);
                INIT_GPIO_PORT_A_PDN(p_obj->p_pa_instance->PDN);
                INIT_GPIO_PORT_A_IE(p_obj->p_pa_instance->IE);
                break;
            case GPIO_PORT_B:
                /* PB Clock Enable */
                PORT_CLOCK_ENABLE_PORTB(TSB_CG_FSYSMENB_IPMENB03);
                INIT_GPIO_PORT_B_DATA(p_obj->p_pb_instance->DATA);
                INIT_GPIO_PORT_B_CR(p_obj->p_pb_instance->CR);
                INIT_GPIO_PORT_B_FR1(p_obj->p_pb_instance->FR1);
                INIT_GPIO_PORT_B_FR2(p_obj->p_pb_instance->FR2);
                INIT_GPIO_PORT_B_FR3(p_obj->p_pb_instance->FR3);
                INIT_GPIO_PORT_B_FR4(p_obj->p_pb_instance->FR4);
                INIT_GPIO_PORT_B_FR5(p_obj->p_pb_instance->FR5);
                INIT_GPIO_PORT_B_FR6(p_obj->p_pb_instance->FR6);
                INIT_GPIO_PORT_B_FR7(p_obj->p_pb_instance->FR7);
                INIT_GPIO_PORT_B_FR8(p_obj->p_pb_instance->FR8);
                INIT_GPIO_PORT_B_OD(p_obj->p_pb_instance->OD);
                INIT_GPIO_PORT_B_PUP(p_obj->p_pb_instance->PUP);
                INIT_GPIO_PORT_B_PDN(p_obj->p_pb_instance->PDN);
                INIT_GPIO_PORT_B_IE(p_obj->p_pb_instance->IE);
                break;
            case GPIO_PORT_C:
                /* PC Clock Enable */
                PORT_CLOCK_ENABLE_PORTC(TSB_CG_FSYSMENB_IPMENB04);
                INIT_GPIO_PORT_C_DATA(p_obj->p_pc_instance->DATA);
                INIT_GPIO_PORT_C_CR(p_obj->p_pc_instance->CR);
                INIT_GPIO_PORT_C_FR1(p_obj->p_pc_instance->FR1);
                INIT_GPIO_PORT_C_FR2(p_obj->p_pc_instance->FR2);
                INIT_GPIO_PORT_C_FR3(p_obj->p_pc_instance->FR3);
                INIT_GPIO_PORT_C_FR4(p_obj->p_pc_instance->FR4);
                INIT_GPIO_PORT_C_FR5(p_obj->p_pc_instance->FR5);
                INIT_GPIO_PORT_C_FR6(p_obj->p_pc_instance->FR6);
                INIT_GPIO_PORT_C_FR7(p_obj->p_pc_instance->FR7);
                INIT_GPIO_PORT_C_FR8(p_obj->p_pc_instance->FR8);
                INIT_GPIO_PORT_C_OD(p_obj->p_pc_instance->OD);
                INIT_GPIO_PORT_C_PUP(p_obj->p_pc_instance->PUP);
                INIT_GPIO_PORT_C_PDN(p_obj->p_pc_instance->PDN);
                INIT_GPIO_PORT_C_IE(p_obj->p_pc_instance->IE);
                break;
            case GPIO_PORT_D:
                /* PD Clock Enable */
                PORT_CLOCK_ENABLE_PORTD(TSB_CG_FSYSMENB_IPMENB05);
                INIT_GPIO_PORT_D_DATA(p_obj->p_pd_instance->DATA);
                INIT_GPIO_PORT_D_CR(p_obj->p_pd_instance->CR);
                INIT_GPIO_PORT_D_FR1(p_obj->p_pd_instance->FR1);
                INIT_GPIO_PORT_D_FR2(p_obj->p_pd_instance->FR2);
                INIT_GPIO_PORT_D_FR3(p_obj->p_pd_instance->FR3);
                INIT_GPIO_PORT_D_FR4(p_obj->p_pd_instance->FR4);
                INIT_GPIO_PORT_D_FR5(p_obj->p_pd_instance->FR5);
                INIT_GPIO_PORT_D_FR6(p_obj->p_pd_instance->FR6);
                INIT_GPIO_PORT_D_FR7(p_obj->p_pd_instance->FR7);
                INIT_GPIO_PORT_D_FR8(p_obj->p_pd_instance->FR8);
                INIT_GPIO_PORT_D_OD(p_obj->p_pd_instance->OD);
                INIT_GPIO_PORT_D_PUP(p_obj->p_pd_instance->PUP);
                INIT_GPIO_PORT_D_PDN(p_obj->p_pd_instance->PDN);
                INIT_GPIO_PORT_D_IE(p_obj->p_pd_instance->IE);
                break;
            case GPIO_PORT_E:
                /* PE Clock Enable */
                PORT_CLOCK_ENABLE_PORTE(TSB_CG_FSYSMENB_IPMENB06);
                INIT_GPIO_PORT_E_DATA(p_obj->p_pe_instance->DATA);
                INIT_GPIO_PORT_E_CR(p_obj->p_pe_instance->CR);
                INIT_GPIO_PORT_E_FR1(p_obj->p_pe_instance->FR1);
                INIT_GPIO_PORT_E_FR2(p_obj->p_pe_instance->FR2);
                INIT_GPIO_PORT_E_FR3(p_obj->p_pe_instance->FR3);
                INIT_GPIO_PORT_E_FR4(p_obj->p_pe_instance->FR4);
                INIT_GPIO_PORT_E_FR5(p_obj->p_pe_instance->FR5);
                INIT_GPIO_PORT_E_FR6(p_obj->p_pe_instance->FR6);
                INIT_GPIO_PORT_E_FR7(p_obj->p_pe_instance->FR7);
                INIT_GPIO_PORT_E_FR8(p_obj->p_pe_instance->FR8);
                INIT_GPIO_PORT_E_OD(p_obj->p_pe_instance->OD);
                INIT_GPIO_PORT_E_PUP(p_obj->p_pe_instance->PUP);
                INIT_GPIO_PORT_E_PDN(p_obj->p_pe_instance->PDN);
                INIT_GPIO_PORT_E_IE(p_obj->p_pe_instance->IE);
                break;
            case GPIO_PORT_F:
                /* PF Clock Enable */
                PORT_CLOCK_ENABLE_PORTF(TSB_CG_FSYSMENB_IPMENB07);
                INIT_GPIO_PORT_F_DATA(p_obj->p_pf_instance->DATA);
                INIT_GPIO_PORT_F_CR(p_obj->p_pf_instance->CR);
                INIT_GPIO_PORT_F_FR1(p_obj->p_pf_instance->FR1);
                INIT_GPIO_PORT_F_FR2(p_obj->p_pf_instance->FR2);
                INIT_GPIO_PORT_F_FR3(p_obj->p_pf_instance->FR3);
                INIT_GPIO_PORT_F_FR4(p_obj->p_pf_instance->FR4);
                INIT_GPIO_PORT_F_FR5(p_obj->p_pf_instance->FR5);
                INIT_GPIO_PORT_F_FR6(p_obj->p_pf_instance->FR6);
                INIT_GPIO_PORT_F_FR7(p_obj->p_pf_instance->FR7);
                INIT_GPIO_PORT_F_FR8(p_obj->p_pf_instance->FR8);
                INIT_GPIO_PORT_F_OD(p_obj->p_pf_instance->OD);
                INIT_GPIO_PORT_F_PUP(p_obj->p_pf_instance->PUP);
                INIT_GPIO_PORT_F_PDN(p_obj->p_pf_instance->PDN);
                INIT_GPIO_PORT_F_IE(p_obj->p_pf_instance->IE);
                break;
            case GPIO_PORT_G:
                /* PG Clock Enable */
                PORT_CLOCK_ENABLE_PORTG(TSB_CG_FSYSMENB_IPMENB08);
                INIT_GPIO_PORT_G_DATA(p_obj->p_pg_instance->DATA);
                INIT_GPIO_PORT_G_CR(p_obj->p_pg_instance->CR);
                INIT_GPIO_PORT_G_FR1(p_obj->p_pg_instance->FR1);
                INIT_GPIO_PORT_G_FR2(p_obj->p_pg_instance->FR2);
                INIT_GPIO_PORT_G_FR3(p_obj->p_pg_instance->FR3);
                INIT_GPIO_PORT_G_FR4(p_obj->p_pg_instance->FR4);
                INIT_GPIO_PORT_G_FR6(p_obj->p_pg_instance->FR6);
                INIT_GPIO_PORT_G_FR5(p_obj->p_pg_instance->FR5);
                INIT_GPIO_PORT_G_FR7(p_obj->p_pg_instance->FR7);
                INIT_GPIO_PORT_G_FR8(p_obj->p_pg_instance->FR8);
                INIT_GPIO_PORT_G_OD(p_obj->p_pg_instance->OD);
                INIT_GPIO_PORT_G_PUP(p_obj->p_pg_instance->PUP);
                INIT_GPIO_PORT_G_PDN(p_obj->p_pg_instance->PDN);
                INIT_GPIO_PORT_G_IE(p_obj->p_pg_instance->IE);
                break;
            case GPIO_PORT_H:
                /* PH Clock Enable */
                PORT_CLOCK_ENABLE_PORTH(TSB_CG_FSYSMENB_IPMENB09);
                INIT_GPIO_PORT_H_DATA(p_obj->p_ph_instance->DATA);
                INIT_GPIO_PORT_H_CR(p_obj->p_ph_instance->CR);
                INIT_GPIO_PORT_H_FR1(p_obj->p_ph_instance->FR1);
                INIT_GPIO_PORT_H_FR2(p_obj->p_ph_instance->FR2);
                INIT_GPIO_PORT_H_FR3(p_obj->p_ph_instance->FR3);
                INIT_GPIO_PORT_H_FR4(p_obj->p_ph_instance->FR4);
                INIT_GPIO_PORT_H_FR5(p_obj->p_ph_instance->FR5);
                INIT_GPIO_PORT_H_FR6(p_obj->p_ph_instance->FR6);
                INIT_GPIO_PORT_H_FR7(p_obj->p_ph_instance->FR7);
                INIT_GPIO_PORT_H_FR8(p_obj->p_ph_instance->FR8);
                INIT_GPIO_PORT_H_OD(p_obj->p_ph_instance->OD);
                INIT_GPIO_PORT_H_PUP(p_obj->p_ph_instance->PUP);
                INIT_GPIO_PORT_H_PDN(p_obj->p_ph_instance->PDN);
                INIT_GPIO_PORT_H_IE(p_obj->p_ph_instance->IE);
                break;
            case GPIO_PORT_J:
                /* PJ Clock Enable */
                PORT_CLOCK_ENABLE_PORTJ(TSB_CG_FSYSMENB_IPMENB10);
                INIT_GPIO_PORT_J_DATA(p_obj->p_pj_instance->DATA);
                INIT_GPIO_PORT_J_CR(p_obj->p_pj_instance->CR);
                INIT_GPIO_PORT_J_FR1(p_obj->p_pj_instance->FR1);
                INIT_GPIO_PORT_J_FR2(p_obj->p_pj_instance->FR2);
                INIT_GPIO_PORT_J_FR3(p_obj->p_pj_instance->FR3);
                INIT_GPIO_PORT_J_FR4(p_obj->p_pj_instance->FR4);
                INIT_GPIO_PORT_J_FR5(p_obj->p_pj_instance->FR5);
                INIT_GPIO_PORT_J_FR6(p_obj->p_pj_instance->FR6);
                INIT_GPIO_PORT_J_FR7(p_obj->p_pj_instance->FR7);
                INIT_GPIO_PORT_J_FR8(p_obj->p_pj_instance->FR8);
                INIT_GPIO_PORT_J_OD(p_obj->p_pj_instance->OD);
                INIT_GPIO_PORT_J_PUP(p_obj->p_pj_instance->PUP);
                INIT_GPIO_PORT_J_PDN(p_obj->p_pj_instance->PDN);
                INIT_GPIO_PORT_J_IE(p_obj->p_pj_instance->IE);
                break;
            case GPIO_PORT_K:
                /* PK Clock Enable */
                PORT_CLOCK_ENABLE_PORTK(TSB_CG_FSYSMENB_IPMENB11);
                INIT_GPIO_PORT_K_DATA(p_obj->p_pk_instance->DATA);
                INIT_GPIO_PORT_K_CR(p_obj->p_pk_instance->CR);
                INIT_GPIO_PORT_K_FR1(p_obj->p_pk_instance->FR1);
                INIT_GPIO_PORT_K_FR2(p_obj->p_pk_instance->FR2);
                INIT_GPIO_PORT_K_FR3(p_obj->p_pk_instance->FR3);
                INIT_GPIO_PORT_K_FR4(p_obj->p_pk_instance->FR4);
                INIT_GPIO_PORT_K_FR5(p_obj->p_pk_instance->FR5);
                INIT_GPIO_PORT_K_FR6(p_obj->p_pk_instance->FR6);
                INIT_GPIO_PORT_K_FR7(p_obj->p_pk_instance->FR7);
                INIT_GPIO_PORT_K_FR8(p_obj->p_pk_instance->FR8);
                INIT_GPIO_PORT_K_OD(p_obj->p_pk_instance->OD);
                INIT_GPIO_PORT_K_PUP(p_obj->p_pk_instance->PUP);
                INIT_GPIO_PORT_K_PDN(p_obj->p_pk_instance->PDN);
                INIT_GPIO_PORT_K_IE(p_obj->p_pk_instance->IE);
                break;
            case GPIO_PORT_L:
                /* PL Clock Enable */
                PORT_CLOCK_ENABLE_PORTL(TSB_CG_FSYSMENB_IPMENB12);
                INIT_GPIO_PORT_L_DATA(p_obj->p_pl_instance->DATA);
                INIT_GPIO_PORT_L_CR(p_obj->p_pl_instance->CR);
                INIT_GPIO_PORT_L_FR1(p_obj->p_pl_instance->FR1);
                INIT_GPIO_PORT_L_FR2(p_obj->p_pl_instance->FR2);
                INIT_GPIO_PORT_L_FR3(p_obj->p_pl_instance->FR3);
                INIT_GPIO_PORT_L_FR4(p_obj->p_pl_instance->FR4);
                INIT_GPIO_PORT_L_FR5(p_obj->p_pl_instance->FR5);
                INIT_GPIO_PORT_L_FR6(p_obj->p_pl_instance->FR6);
                INIT_GPIO_PORT_L_FR7(p_obj->p_pl_instance->FR7);
                INIT_GPIO_PORT_L_FR8(p_obj->p_pl_instance->FR8);
                INIT_GPIO_PORT_L_OD(p_obj->p_pl_instance->OD);
                INIT_GPIO_PORT_L_PUP(p_obj->p_pl_instance->PUP);
                INIT_GPIO_PORT_L_PDN(p_obj->p_pl_instance->PDN);
                INIT_GPIO_PORT_L_IE(p_obj->p_pl_instance->IE);
                break;
            case GPIO_PORT_M:
                /* PM Clock Enable */
                PORT_CLOCK_ENABLE_PORTM(TSB_CG_FSYSMENB_IPMENB13);
                INIT_GPIO_PORT_M_DATA(p_obj->p_pm_instance->DATA);
                INIT_GPIO_PORT_M_CR(p_obj->p_pm_instance->CR);
                INIT_GPIO_PORT_M_FR1(p_obj->p_pm_instance->FR1);
                INIT_GPIO_PORT_M_FR2(p_obj->p_pm_instance->FR2);
                INIT_GPIO_PORT_M_FR3(p_obj->p_pm_instance->FR3);
                INIT_GPIO_PORT_M_FR4(p_obj->p_pm_instance->FR4);
                INIT_GPIO_PORT_M_FR5(p_obj->p_pm_instance->FR5);
                INIT_GPIO_PORT_M_FR6(p_obj->p_pm_instance->FR6);
                INIT_GPIO_PORT_M_FR7(p_obj->p_pm_instance->FR7);
                INIT_GPIO_PORT_M_FR8(p_obj->p_pm_instance->FR8);
                INIT_GPIO_PORT_M_OD(p_obj->p_pm_instance->OD);
                INIT_GPIO_PORT_M_PUP(p_obj->p_pm_instance->PUP);
                INIT_GPIO_PORT_M_PDN(p_obj->p_pm_instance->PDN);
                INIT_GPIO_PORT_M_IE(p_obj->p_pm_instance->IE);
                break;
            case GPIO_PORT_N:
                /* PN Clock Enable */
                PORT_CLOCK_ENABLE_PORTN(TSB_CG_FSYSMENB_IPMENB14);
                INIT_GPIO_PORT_N_DATA(p_obj->p_pn_instance->DATA);
                INIT_GPIO_PORT_N_CR(p_obj->p_pn_instance->CR);
                INIT_GPIO_PORT_N_FR1(p_obj->p_pn_instance->FR1);
                INIT_GPIO_PORT_N_FR2(p_obj->p_pn_instance->FR2);
                INIT_GPIO_PORT_N_FR3(p_obj->p_pn_instance->FR3);
                INIT_GPIO_PORT_N_FR4(p_obj->p_pn_instance->FR4);
                INIT_GPIO_PORT_N_FR5(p_obj->p_pn_instance->FR5);
                INIT_GPIO_PORT_N_FR6(p_obj->p_pn_instance->FR6);
                INIT_GPIO_PORT_N_FR7(p_obj->p_pn_instance->FR7);
                INIT_GPIO_PORT_N_FR8(p_obj->p_pn_instance->FR8);
                INIT_GPIO_PORT_N_OD(p_obj->p_pn_instance->OD);
                INIT_GPIO_PORT_N_PUP(p_obj->p_pn_instance->PUP);
                INIT_GPIO_PORT_N_PDN(p_obj->p_pn_instance->PDN);
                INIT_GPIO_PORT_N_IE(p_obj->p_pn_instance->IE);
                break;
            case GPIO_PORT_P:
                /* PP Clock Enable */
                PORT_CLOCK_ENABLE_PORTP(TSB_CG_FSYSMENB_IPMENB15);
                INIT_GPIO_PORT_P_DATA(p_obj->p_pp_instance->DATA);
                INIT_GPIO_PORT_P_CR(p_obj->p_pp_instance->CR);
                INIT_GPIO_PORT_P_FR1(p_obj->p_pp_instance->FR1);
                INIT_GPIO_PORT_P_FR2(p_obj->p_pp_instance->FR2);
                INIT_GPIO_PORT_P_FR3(p_obj->p_pp_instance->FR3);
                INIT_GPIO_PORT_P_FR4(p_obj->p_pp_instance->FR4);
                INIT_GPIO_PORT_P_FR5(p_obj->p_pp_instance->FR5);
                INIT_GPIO_PORT_P_FR6(p_obj->p_pp_instance->FR6);
                INIT_GPIO_PORT_P_FR7(p_obj->p_pp_instance->FR7);
                INIT_GPIO_PORT_P_FR8(p_obj->p_pp_instance->FR8);
                INIT_GPIO_PORT_P_OD(p_obj->p_pp_instance->OD);
                INIT_GPIO_PORT_P_PUP(p_obj->p_pp_instance->PUP);
                INIT_GPIO_PORT_P_PDN(p_obj->p_pp_instance->PDN);
                INIT_GPIO_PORT_P_IE(p_obj->p_pp_instance->IE);
                break;
            case GPIO_PORT_R:
                /* PR Clock Enable */
                PORT_CLOCK_ENABLE_PORTR(TSB_CG_FSYSMENB_IPMENB16);
                INIT_GPIO_PORT_R_DATA(p_obj->p_pr_instance->DATA);
                INIT_GPIO_PORT_R_CR(p_obj->p_pr_instance->CR);
                INIT_GPIO_PORT_R_FR1(p_obj->p_pr_instance->FR1);
                INIT_GPIO_PORT_R_FR2(p_obj->p_pr_instance->FR2);
                INIT_GPIO_PORT_R_FR3(p_obj->p_pr_instance->FR3);
                INIT_GPIO_PORT_R_FR4(p_obj->p_pr_instance->FR4);
                INIT_GPIO_PORT_R_FR5(p_obj->p_pr_instance->FR5);
                INIT_GPIO_PORT_R_FR6(p_obj->p_pr_instance->FR6);
                INIT_GPIO_PORT_R_FR7(p_obj->p_pr_instance->FR7);
                INIT_GPIO_PORT_R_FR8(p_obj->p_pr_instance->FR8);
                INIT_GPIO_PORT_R_OD(p_obj->p_pr_instance->OD);
                INIT_GPIO_PORT_R_PUP(p_obj->p_pr_instance->PUP);
                INIT_GPIO_PORT_R_PDN(p_obj->p_pr_instance->PDN);
                INIT_GPIO_PORT_R_IE(p_obj->p_pr_instance->IE);
                break;
            case GPIO_PORT_T:
                /* PT Clock Enable */
                PORT_CLOCK_ENABLE_PORTT(TSB_CG_FSYSMENB_IPMENB17);
                INIT_GPIO_PORT_T_DATA(p_obj->p_pt_instance->DATA);
                INIT_GPIO_PORT_T_CR(p_obj->p_pt_instance->CR);
                INIT_GPIO_PORT_T_FR1(p_obj->p_pt_instance->FR1);
                INIT_GPIO_PORT_T_FR2(p_obj->p_pt_instance->FR2);
                INIT_GPIO_PORT_T_FR3(p_obj->p_pt_instance->FR3);
                INIT_GPIO_PORT_T_FR4(p_obj->p_pt_instance->FR4);
                INIT_GPIO_PORT_T_FR5(p_obj->p_pt_instance->FR5);
                INIT_GPIO_PORT_T_FR6(p_obj->p_pt_instance->FR6);
                INIT_GPIO_PORT_T_FR7(p_obj->p_pt_instance->FR7);
                INIT_GPIO_PORT_T_FR8(p_obj->p_pt_instance->FR8);
                INIT_GPIO_PORT_T_OD(p_obj->p_pt_instance->OD);
                INIT_GPIO_PORT_T_PUP(p_obj->p_pt_instance->PUP);
                INIT_GPIO_PORT_T_PDN(p_obj->p_pt_instance->PDN);
                INIT_GPIO_PORT_T_IE(p_obj->p_pt_instance->IE);
                break;
            case GPIO_PORT_U:
                /* PU Clock Enable */
                PORT_CLOCK_ENABLE_PORTU(TSB_CG_FSYSMENB_IPMENB18);
                INIT_GPIO_PORT_U_DATA(p_obj->p_pu_instance->DATA);
                INIT_GPIO_PORT_U_CR(p_obj->p_pu_instance->CR);
                INIT_GPIO_PORT_U_FR1(p_obj->p_pu_instance->FR1);
                INIT_GPIO_PORT_U_FR2(p_obj->p_pu_instance->FR2);
                INIT_GPIO_PORT_U_FR3(p_obj->p_pu_instance->FR3);
                INIT_GPIO_PORT_U_FR4(p_obj->p_pu_instance->FR4);
                INIT_GPIO_PORT_U_FR5(p_obj->p_pu_instance->FR5);
                INIT_GPIO_PORT_U_FR6(p_obj->p_pu_instance->FR6);
                INIT_GPIO_PORT_U_FR7(p_obj->p_pu_instance->FR7);
                INIT_GPIO_PORT_U_FR8(p_obj->p_pu_instance->FR8);
                INIT_GPIO_PORT_U_OD(p_obj->p_pu_instance->OD);
                INIT_GPIO_PORT_U_PUP(p_obj->p_pu_instance->PUP);
                INIT_GPIO_PORT_U_PDN(p_obj->p_pu_instance->PDN);
                INIT_GPIO_PORT_U_IE(p_obj->p_pu_instance->IE);
                break;
            case GPIO_PORT_V:
                /* PV Clock Enable */
                PORT_CLOCK_ENABLE_PORTV(TSB_CG_FSYSMENB_IPMENB19);
                INIT_GPIO_PORT_V_DATA(p_obj->p_pv_instance->DATA);
                INIT_GPIO_PORT_V_CR(p_obj->p_pv_instance->CR);
                INIT_GPIO_PORT_V_FR1(p_obj->p_pv_instance->FR1);
                INIT_GPIO_PORT_V_FR2(p_obj->p_pv_instance->FR2);
                INIT_GPIO_PORT_V_FR3(p_obj->p_pv_instance->FR3);
                INIT_GPIO_PORT_V_FR4(p_obj->p_pv_instance->FR4);
                INIT_GPIO_PORT_V_FR5(p_obj->p_pv_instance->FR5);
                INIT_GPIO_PORT_V_FR6(p_obj->p_pv_instance->FR6);
                INIT_GPIO_PORT_V_FR7(p_obj->p_pv_instance->FR7);
                INIT_GPIO_PORT_V_FR8(p_obj->p_pv_instance->FR8);
                INIT_GPIO_PORT_V_OD(p_obj->p_pv_instance->OD);
                INIT_GPIO_PORT_V_PUP(p_obj->p_pv_instance->PUP);
                INIT_GPIO_PORT_V_PDN(p_obj->p_pv_instance->PDN);
                INIT_GPIO_PORT_V_IE(p_obj->p_pv_instance->IE);
                break;
            case GPIO_PORT_W:
                /* PW Clock Enable */
                PORT_CLOCK_ENABLE_PORTW(TSB_CG_FSYSMENB_IPMENB20);
                INIT_GPIO_PORT_W_DATA(p_obj->p_pw_instance->DATA);
                INIT_GPIO_PORT_W_CR(p_obj->p_pw_instance->CR);
                INIT_GPIO_PORT_W_FR1(p_obj->p_pw_instance->FR1);
                INIT_GPIO_PORT_W_FR2(p_obj->p_pw_instance->FR2);
                INIT_GPIO_PORT_W_FR3(p_obj->p_pw_instance->FR3);
                INIT_GPIO_PORT_W_FR4(p_obj->p_pw_instance->FR4);
                INIT_GPIO_PORT_W_FR5(p_obj->p_pw_instance->FR5);
                INIT_GPIO_PORT_W_FR6(p_obj->p_pw_instance->FR6);
                INIT_GPIO_PORT_W_FR7(p_obj->p_pw_instance->FR7);
                INIT_GPIO_PORT_W_FR8(p_obj->p_pw_instance->FR8);
                INIT_GPIO_PORT_W_OD(p_obj->p_pw_instance->OD);
                INIT_GPIO_PORT_W_PUP(p_obj->p_pw_instance->PUP);
                INIT_GPIO_PORT_W_PDN(p_obj->p_pw_instance->PDN);
                INIT_GPIO_PORT_W_IE(p_obj->p_pw_instance->IE);
                break;
            case GPIO_PORT_Y:
                /* PY Clock Enable */
                PORT_CLOCK_ENABLE_PORTY(TSB_CG_FSYSMENB_IPMENB21);
                INIT_GPIO_PORT_Y_DATA(p_obj->p_py_instance->DATA);
                INIT_GPIO_PORT_Y_CR(p_obj->p_py_instance->CR);
                INIT_GPIO_PORT_Y_FR1(p_obj->p_py_instance->FR1);
                INIT_GPIO_PORT_Y_FR2(p_obj->p_py_instance->FR2);
                INIT_GPIO_PORT_Y_FR3(p_obj->p_py_instance->FR3);
                INIT_GPIO_PORT_Y_FR4(p_obj->p_py_instance->FR4);
                INIT_GPIO_PORT_Y_FR5(p_obj->p_py_instance->FR5);
                INIT_GPIO_PORT_Y_FR6(p_obj->p_py_instance->FR6);
                INIT_GPIO_PORT_Y_FR7(p_obj->p_py_instance->FR7);
                INIT_GPIO_PORT_Y_FR8(p_obj->p_py_instance->FR8);
                INIT_GPIO_PORT_Y_OD(p_obj->p_py_instance->OD);
                INIT_GPIO_PORT_Y_PUP(p_obj->p_py_instance->PUP);
                INIT_GPIO_PORT_Y_PDN(p_obj->p_py_instance->PDN);
                INIT_GPIO_PORT_Y_IE(p_obj->p_py_instance->IE);
                break;
            default:
                result = TXZ_ERROR;
                return (result);
        }
    }

    return (result);
}

/*--------------------------------------------------*/
/*!
  * @fn     TXZ_Result gpio_deinit(gpio_t *p_obj, uint32_t group)
  * @brief     Release the GPIO object.
  * @param     p_obj :GPIO object.
  * @param     group  :GPIO Port Group.: Use @ref gpio_gr_t
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note      When p_obj is NULL, "Failure" is returned.
  * @attention This function is not available in interrupt.
  */
/*--------------------------------------------------*/
TXZ_Result gpio_deinit(_gpio_t *p_obj, uint32_t group)
{
    TXZ_Result result = TXZ_SUCCESS;

    /* Check the NULL of address. */
    if ((void *)(p_obj) == (void *)0) {
        result = TXZ_ERROR;
    } else {
        /* Disable the selected GPIO peripheral  */
        switch (group) {
            case GPIO_PORT_A:
                INIT_GPIO_PORT_A_DATA(p_obj->p_pa_instance->DATA);
                INIT_GPIO_PORT_A_CR(p_obj->p_pa_instance->CR);
                INIT_GPIO_PORT_A_FR1(p_obj->p_pa_instance->FR1);
                INIT_GPIO_PORT_A_FR2(p_obj->p_pa_instance->FR2);
                INIT_GPIO_PORT_A_FR3(p_obj->p_pa_instance->FR3);
                INIT_GPIO_PORT_A_FR4(p_obj->p_pa_instance->FR4);
                INIT_GPIO_PORT_A_FR5(p_obj->p_pa_instance->FR5);
                INIT_GPIO_PORT_A_FR6(p_obj->p_pa_instance->FR6);
                INIT_GPIO_PORT_A_FR7(p_obj->p_pa_instance->FR7);
                INIT_GPIO_PORT_A_FR8(p_obj->p_pa_instance->FR8);
                INIT_GPIO_PORT_A_OD(p_obj->p_pa_instance->OD);
                INIT_GPIO_PORT_A_PUP(p_obj->p_pa_instance->PUP);
                INIT_GPIO_PORT_A_PDN(p_obj->p_pa_instance->PDN);
                INIT_GPIO_PORT_A_IE(p_obj->p_pa_instance->IE);
                /* PA Clock Disable */
                PORT_CLOCK_DISABLE_PORTA(TSB_CG_FSYSMENB_IPMENB02);
                break;
            case GPIO_PORT_B:
                INIT_GPIO_PORT_B_DATA(p_obj->p_pb_instance->DATA);
                INIT_GPIO_PORT_B_CR(p_obj->p_pb_instance->CR);
                INIT_GPIO_PORT_B_FR1(p_obj->p_pb_instance->FR1);
                INIT_GPIO_PORT_B_FR2(p_obj->p_pb_instance->FR2);
                INIT_GPIO_PORT_B_FR3(p_obj->p_pb_instance->FR3);
                INIT_GPIO_PORT_B_FR4(p_obj->p_pb_instance->FR4);
                INIT_GPIO_PORT_B_FR5(p_obj->p_pb_instance->FR5);
                INIT_GPIO_PORT_B_FR6(p_obj->p_pb_instance->FR6);
                INIT_GPIO_PORT_B_FR7(p_obj->p_pb_instance->FR7);
                INIT_GPIO_PORT_B_FR8(p_obj->p_pb_instance->FR8);
                INIT_GPIO_PORT_B_OD(p_obj->p_pb_instance->OD);
                INIT_GPIO_PORT_B_PUP(p_obj->p_pb_instance->PUP);
                INIT_GPIO_PORT_B_PDN(p_obj->p_pb_instance->PDN);
                INIT_GPIO_PORT_B_IE(p_obj->p_pb_instance->IE);
                /* PB Clock Disable */
                PORT_CLOCK_DISABLE_PORTB(TSB_CG_FSYSMENB_IPMENB03);
                break;
            case GPIO_PORT_C:
                INIT_GPIO_PORT_C_DATA(p_obj->p_pc_instance->DATA);
                INIT_GPIO_PORT_C_CR(p_obj->p_pc_instance->CR);
                INIT_GPIO_PORT_C_FR1(p_obj->p_pc_instance->FR1);
                INIT_GPIO_PORT_C_FR2(p_obj->p_pc_instance->FR2);
                INIT_GPIO_PORT_C_FR3(p_obj->p_pc_instance->FR3);
                INIT_GPIO_PORT_C_FR4(p_obj->p_pc_instance->FR4);
                INIT_GPIO_PORT_C_FR5(p_obj->p_pc_instance->FR5);
                INIT_GPIO_PORT_C_FR6(p_obj->p_pc_instance->FR6);
                INIT_GPIO_PORT_C_FR7(p_obj->p_pc_instance->FR7);
                INIT_GPIO_PORT_C_FR8(p_obj->p_pc_instance->FR8);
                INIT_GPIO_PORT_C_OD(p_obj->p_pc_instance->OD);
                INIT_GPIO_PORT_C_PUP(p_obj->p_pc_instance->PUP);
                INIT_GPIO_PORT_C_PDN(p_obj->p_pc_instance->PDN);
                INIT_GPIO_PORT_C_IE(p_obj->p_pc_instance->IE);
                /* PC Clock Disable */
                PORT_CLOCK_DISABLE_PORTC(TSB_CG_FSYSMENB_IPMENB04);
                break;
            case GPIO_PORT_D:
                INIT_GPIO_PORT_D_DATA(p_obj->p_pd_instance->DATA);
                INIT_GPIO_PORT_D_CR(p_obj->p_pd_instance->CR);
                INIT_GPIO_PORT_D_FR1(p_obj->p_pd_instance->FR1);
                INIT_GPIO_PORT_D_FR2(p_obj->p_pd_instance->FR2);
                INIT_GPIO_PORT_D_FR3(p_obj->p_pd_instance->FR3);
                INIT_GPIO_PORT_D_FR4(p_obj->p_pd_instance->FR4);
                INIT_GPIO_PORT_D_FR5(p_obj->p_pd_instance->FR5);
                INIT_GPIO_PORT_D_FR6(p_obj->p_pd_instance->FR6);
                INIT_GPIO_PORT_D_FR7(p_obj->p_pd_instance->FR7);
                INIT_GPIO_PORT_D_FR8(p_obj->p_pd_instance->FR8);
                INIT_GPIO_PORT_D_OD(p_obj->p_pd_instance->OD);
                INIT_GPIO_PORT_D_PUP(p_obj->p_pd_instance->PUP);
                INIT_GPIO_PORT_D_PDN(p_obj->p_pd_instance->PDN);
                INIT_GPIO_PORT_D_IE(p_obj->p_pd_instance->IE);
                /* PD Clock Disable */
                PORT_CLOCK_DISABLE_PORTD(TSB_CG_FSYSMENB_IPMENB05);
                break;
            case GPIO_PORT_E:
                INIT_GPIO_PORT_E_DATA(p_obj->p_pe_instance->DATA);
                INIT_GPIO_PORT_E_CR(p_obj->p_pe_instance->CR);
                INIT_GPIO_PORT_E_FR1(p_obj->p_pe_instance->FR1);
                INIT_GPIO_PORT_E_FR2(p_obj->p_pe_instance->FR2);
                INIT_GPIO_PORT_E_FR3(p_obj->p_pe_instance->FR3);
                INIT_GPIO_PORT_E_FR4(p_obj->p_pe_instance->FR4);
                INIT_GPIO_PORT_E_FR5(p_obj->p_pe_instance->FR5);
                INIT_GPIO_PORT_E_FR6(p_obj->p_pe_instance->FR6);
                INIT_GPIO_PORT_E_FR7(p_obj->p_pe_instance->FR7);
                INIT_GPIO_PORT_E_FR8(p_obj->p_pe_instance->FR8);
                INIT_GPIO_PORT_E_OD(p_obj->p_pe_instance->OD);
                INIT_GPIO_PORT_E_PUP(p_obj->p_pe_instance->PUP);
                INIT_GPIO_PORT_E_PDN(p_obj->p_pe_instance->PDN);
                INIT_GPIO_PORT_E_IE(p_obj->p_pe_instance->IE);
                /* PE Clock Disable */
                PORT_CLOCK_DISABLE_PORTE(TSB_CG_FSYSMENB_IPMENB06);
                break;
            case GPIO_PORT_F:
                INIT_GPIO_PORT_F_DATA(p_obj->p_pf_instance->DATA);
                INIT_GPIO_PORT_F_CR(p_obj->p_pf_instance->CR);
                INIT_GPIO_PORT_F_FR1(p_obj->p_pf_instance->FR1);
                INIT_GPIO_PORT_F_FR2(p_obj->p_pf_instance->FR2);
                INIT_GPIO_PORT_F_FR3(p_obj->p_pf_instance->FR3);
                INIT_GPIO_PORT_F_FR4(p_obj->p_pf_instance->FR4);
                INIT_GPIO_PORT_F_FR5(p_obj->p_pf_instance->FR5);
                INIT_GPIO_PORT_F_FR6(p_obj->p_pf_instance->FR6);
                INIT_GPIO_PORT_F_FR7(p_obj->p_pf_instance->FR7);
                INIT_GPIO_PORT_F_FR8(p_obj->p_pf_instance->FR8);
                INIT_GPIO_PORT_F_OD(p_obj->p_pf_instance->OD);
                INIT_GPIO_PORT_F_PUP(p_obj->p_pf_instance->PUP);
                INIT_GPIO_PORT_F_PDN(p_obj->p_pf_instance->PDN);
                INIT_GPIO_PORT_F_IE(p_obj->p_pf_instance->IE);
                /* PF Clock Disable */
                PORT_CLOCK_DISABLE_PORTF(TSB_CG_FSYSMENB_IPMENB07);
                break;
            case GPIO_PORT_G:
                INIT_GPIO_PORT_G_DATA(p_obj->p_pg_instance->DATA);
                INIT_GPIO_PORT_G_CR(p_obj->p_pg_instance->CR);
                INIT_GPIO_PORT_G_FR1(p_obj->p_pg_instance->FR1);
                INIT_GPIO_PORT_G_FR2(p_obj->p_pg_instance->FR2);
                INIT_GPIO_PORT_G_FR3(p_obj->p_pg_instance->FR3);
                INIT_GPIO_PORT_G_FR4(p_obj->p_pg_instance->FR4);
                INIT_GPIO_PORT_G_FR5(p_obj->p_pg_instance->FR5);
                INIT_GPIO_PORT_G_FR6(p_obj->p_pg_instance->FR6);
                INIT_GPIO_PORT_G_FR7(p_obj->p_pg_instance->FR7);
                INIT_GPIO_PORT_G_FR8(p_obj->p_pg_instance->FR8);
                INIT_GPIO_PORT_G_OD(p_obj->p_pg_instance->OD);
                INIT_GPIO_PORT_G_PUP(p_obj->p_pg_instance->PUP);
                INIT_GPIO_PORT_G_PDN(p_obj->p_pg_instance->PDN);
                INIT_GPIO_PORT_G_IE(p_obj->p_pg_instance->IE);
                /* PG Clock Disable */
                PORT_CLOCK_DISABLE_PORTG(TSB_CG_FSYSMENB_IPMENB08);
                break;
            case GPIO_PORT_H:
                INIT_GPIO_PORT_H_DATA(p_obj->p_ph_instance->DATA);
                INIT_GPIO_PORT_H_CR(p_obj->p_ph_instance->CR);
                INIT_GPIO_PORT_H_FR1(p_obj->p_ph_instance->FR1);
                INIT_GPIO_PORT_H_FR2(p_obj->p_ph_instance->FR2);
                INIT_GPIO_PORT_H_FR3(p_obj->p_ph_instance->FR3);
                INIT_GPIO_PORT_H_FR4(p_obj->p_ph_instance->FR4);
                INIT_GPIO_PORT_H_FR5(p_obj->p_ph_instance->FR5);
                INIT_GPIO_PORT_H_FR6(p_obj->p_ph_instance->FR6);
                INIT_GPIO_PORT_H_FR7(p_obj->p_ph_instance->FR7);
                INIT_GPIO_PORT_H_FR8(p_obj->p_ph_instance->FR8);
                INIT_GPIO_PORT_H_OD(p_obj->p_ph_instance->OD);
                INIT_GPIO_PORT_H_PUP(p_obj->p_ph_instance->PUP);
                INIT_GPIO_PORT_H_PDN(p_obj->p_ph_instance->PDN);
                INIT_GPIO_PORT_H_IE(p_obj->p_ph_instance->IE);
                /* PH Clock Disable */
                PORT_CLOCK_DISABLE_PORTH(TSB_CG_FSYSMENB_IPMENB09);
                break;
            case GPIO_PORT_J:
                INIT_GPIO_PORT_J_DATA(p_obj->p_pj_instance->DATA);
                INIT_GPIO_PORT_J_CR(p_obj->p_pj_instance->CR);
                INIT_GPIO_PORT_J_FR1(p_obj->p_pj_instance->FR1);
                INIT_GPIO_PORT_J_FR2(p_obj->p_pj_instance->FR2);
                INIT_GPIO_PORT_J_FR3(p_obj->p_pj_instance->FR3);
                INIT_GPIO_PORT_J_FR4(p_obj->p_pj_instance->FR4);
                INIT_GPIO_PORT_J_FR5(p_obj->p_pj_instance->FR5);
                INIT_GPIO_PORT_J_FR6(p_obj->p_pj_instance->FR6);
                INIT_GPIO_PORT_J_FR7(p_obj->p_pj_instance->FR7);
                INIT_GPIO_PORT_J_FR8(p_obj->p_pj_instance->FR8);
                INIT_GPIO_PORT_J_OD(p_obj->p_pj_instance->OD);
                INIT_GPIO_PORT_J_PUP(p_obj->p_pj_instance->PUP);
                INIT_GPIO_PORT_J_PDN(p_obj->p_pj_instance->PDN);
                INIT_GPIO_PORT_J_IE(p_obj->p_pj_instance->IE);
                /* PJ Clock Disable */
                PORT_CLOCK_DISABLE_PORTJ(TSB_CG_FSYSMENB_IPMENB10);
                break;
            case GPIO_PORT_K:
                INIT_GPIO_PORT_K_DATA(p_obj->p_pk_instance->DATA);
                INIT_GPIO_PORT_K_CR(p_obj->p_pk_instance->CR);
                INIT_GPIO_PORT_K_FR1(p_obj->p_pk_instance->FR1);
                INIT_GPIO_PORT_K_FR2(p_obj->p_pk_instance->FR2);
                INIT_GPIO_PORT_K_FR3(p_obj->p_pk_instance->FR3);
                INIT_GPIO_PORT_K_FR4(p_obj->p_pk_instance->FR4);
                INIT_GPIO_PORT_K_FR5(p_obj->p_pk_instance->FR5);
                INIT_GPIO_PORT_K_FR6(p_obj->p_pk_instance->FR6);
                INIT_GPIO_PORT_K_FR7(p_obj->p_pk_instance->FR7);
                INIT_GPIO_PORT_K_FR8(p_obj->p_pk_instance->FR8);
                INIT_GPIO_PORT_K_OD(p_obj->p_pk_instance->OD);
                INIT_GPIO_PORT_K_PUP(p_obj->p_pk_instance->PUP);
                INIT_GPIO_PORT_K_PDN(p_obj->p_pk_instance->PDN);
                INIT_GPIO_PORT_K_IE(p_obj->p_pk_instance->IE);
                /* PK Clock Disable */
                PORT_CLOCK_DISABLE_PORTK(TSB_CG_FSYSMENB_IPMENB11);
                break;
            case GPIO_PORT_L:
                INIT_GPIO_PORT_L_DATA(p_obj->p_pl_instance->DATA);
                INIT_GPIO_PORT_L_CR(p_obj->p_pl_instance->CR);
                INIT_GPIO_PORT_L_FR1(p_obj->p_pl_instance->FR1);
                INIT_GPIO_PORT_L_FR2(p_obj->p_pl_instance->FR2);
                INIT_GPIO_PORT_L_FR3(p_obj->p_pl_instance->FR3);
                INIT_GPIO_PORT_L_FR4(p_obj->p_pl_instance->FR4);
                INIT_GPIO_PORT_L_FR5(p_obj->p_pl_instance->FR5);
                INIT_GPIO_PORT_L_FR6(p_obj->p_pl_instance->FR6);
                INIT_GPIO_PORT_L_FR7(p_obj->p_pl_instance->FR7);
                INIT_GPIO_PORT_L_FR8(p_obj->p_pl_instance->FR8);
                INIT_GPIO_PORT_L_OD(p_obj->p_pl_instance->OD);
                INIT_GPIO_PORT_L_PUP(p_obj->p_pl_instance->PUP);
                INIT_GPIO_PORT_L_PDN(p_obj->p_pl_instance->PDN);
                INIT_GPIO_PORT_L_IE(p_obj->p_pl_instance->IE);
                /* PL Clock Disable */
                PORT_CLOCK_DISABLE_PORTL(TSB_CG_FSYSMENB_IPMENB12);
                break;
            case GPIO_PORT_M:
                INIT_GPIO_PORT_M_DATA(p_obj->p_pm_instance->DATA);
                INIT_GPIO_PORT_M_CR(p_obj->p_pm_instance->CR);
                INIT_GPIO_PORT_M_FR1(p_obj->p_pm_instance->FR1);
                INIT_GPIO_PORT_M_FR2(p_obj->p_pm_instance->FR2);
                INIT_GPIO_PORT_M_FR3(p_obj->p_pm_instance->FR3);
                INIT_GPIO_PORT_M_FR4(p_obj->p_pm_instance->FR4);
                INIT_GPIO_PORT_M_FR5(p_obj->p_pm_instance->FR5);
                INIT_GPIO_PORT_M_FR6(p_obj->p_pm_instance->FR6);
                INIT_GPIO_PORT_M_FR7(p_obj->p_pm_instance->FR7);
                INIT_GPIO_PORT_M_FR8(p_obj->p_pm_instance->FR8);
                INIT_GPIO_PORT_M_OD(p_obj->p_pm_instance->OD);
                INIT_GPIO_PORT_M_PUP(p_obj->p_pm_instance->PUP);
                INIT_GPIO_PORT_M_PDN(p_obj->p_pm_instance->PDN);
                INIT_GPIO_PORT_M_IE(p_obj->p_pm_instance->IE);
                /* PM Clock Disable */
                PORT_CLOCK_DISABLE_PORTM(TSB_CG_FSYSMENB_IPMENB13);
                break;
            case GPIO_PORT_N:
                INIT_GPIO_PORT_N_DATA(p_obj->p_pn_instance->DATA);
                INIT_GPIO_PORT_N_CR(p_obj->p_pn_instance->CR);
                INIT_GPIO_PORT_N_FR1(p_obj->p_pn_instance->FR1);
                INIT_GPIO_PORT_N_FR2(p_obj->p_pn_instance->FR2);
                INIT_GPIO_PORT_N_FR3(p_obj->p_pn_instance->FR3);
                INIT_GPIO_PORT_N_FR4(p_obj->p_pn_instance->FR4);
                INIT_GPIO_PORT_N_FR5(p_obj->p_pn_instance->FR5);
                INIT_GPIO_PORT_N_FR6(p_obj->p_pn_instance->FR6);
                INIT_GPIO_PORT_N_FR7(p_obj->p_pn_instance->FR7);
                INIT_GPIO_PORT_N_FR8(p_obj->p_pn_instance->FR8);
                INIT_GPIO_PORT_N_OD(p_obj->p_pn_instance->OD);
                INIT_GPIO_PORT_N_PUP(p_obj->p_pn_instance->PUP);
                INIT_GPIO_PORT_N_PDN(p_obj->p_pn_instance->PDN);
                INIT_GPIO_PORT_N_IE(p_obj->p_pn_instance->IE);
                /* PN Clock Disable */
                PORT_CLOCK_DISABLE_PORTN(TSB_CG_FSYSMENB_IPMENB14);
                break;
            case GPIO_PORT_P:
                INIT_GPIO_PORT_P_DATA(p_obj->p_pp_instance->DATA);
                INIT_GPIO_PORT_P_CR(p_obj->p_pp_instance->CR);
                INIT_GPIO_PORT_P_FR1(p_obj->p_pp_instance->FR1);
                INIT_GPIO_PORT_P_FR2(p_obj->p_pp_instance->FR2);
                INIT_GPIO_PORT_P_FR3(p_obj->p_pp_instance->FR3);
                INIT_GPIO_PORT_P_FR4(p_obj->p_pp_instance->FR4);
                INIT_GPIO_PORT_P_FR5(p_obj->p_pp_instance->FR5);
                INIT_GPIO_PORT_P_FR6(p_obj->p_pp_instance->FR6);
                INIT_GPIO_PORT_P_FR7(p_obj->p_pp_instance->FR7);
                INIT_GPIO_PORT_P_FR8(p_obj->p_pp_instance->FR8);
                INIT_GPIO_PORT_P_OD(p_obj->p_pp_instance->OD);
                INIT_GPIO_PORT_P_PUP(p_obj->p_pp_instance->PUP);
                INIT_GPIO_PORT_P_PDN(p_obj->p_pp_instance->PDN);
                INIT_GPIO_PORT_P_IE(p_obj->p_pp_instance->IE);
                /* PP Clock Disable */
                PORT_CLOCK_DISABLE_PORTP(TSB_CG_FSYSMENB_IPMENB15);
                break;
            case GPIO_PORT_R:
                INIT_GPIO_PORT_R_DATA(p_obj->p_pr_instance->DATA);
                INIT_GPIO_PORT_R_CR(p_obj->p_pr_instance->CR);
                INIT_GPIO_PORT_R_FR1(p_obj->p_pr_instance->FR1);
                INIT_GPIO_PORT_R_FR2(p_obj->p_pr_instance->FR2);
                INIT_GPIO_PORT_R_FR3(p_obj->p_pr_instance->FR3);
                INIT_GPIO_PORT_R_FR4(p_obj->p_pr_instance->FR4);
                INIT_GPIO_PORT_R_FR5(p_obj->p_pr_instance->FR5);
                INIT_GPIO_PORT_R_FR6(p_obj->p_pr_instance->FR6);
                INIT_GPIO_PORT_R_FR7(p_obj->p_pr_instance->FR7);
                INIT_GPIO_PORT_R_FR8(p_obj->p_pr_instance->FR8);
                INIT_GPIO_PORT_R_OD(p_obj->p_pr_instance->OD);
                INIT_GPIO_PORT_R_PUP(p_obj->p_pr_instance->PUP);
                INIT_GPIO_PORT_R_PDN(p_obj->p_pr_instance->PDN);
                INIT_GPIO_PORT_R_IE(p_obj->p_pr_instance->IE);
                /* PR Clock Disable */
                PORT_CLOCK_DISABLE_PORTR(TSB_CG_FSYSMENB_IPMENB16);
                break;
            case GPIO_PORT_T:
                INIT_GPIO_PORT_T_DATA(p_obj->p_pt_instance->DATA);
                INIT_GPIO_PORT_T_CR(p_obj->p_pt_instance->CR);
                INIT_GPIO_PORT_T_FR1(p_obj->p_pt_instance->FR1);
                INIT_GPIO_PORT_T_FR2(p_obj->p_pt_instance->FR2);
                INIT_GPIO_PORT_T_FR3(p_obj->p_pt_instance->FR3);
                INIT_GPIO_PORT_T_FR4(p_obj->p_pt_instance->FR4);
                INIT_GPIO_PORT_T_FR5(p_obj->p_pt_instance->FR5);
                INIT_GPIO_PORT_T_FR6(p_obj->p_pt_instance->FR6);
                INIT_GPIO_PORT_T_FR7(p_obj->p_pt_instance->FR7);
                INIT_GPIO_PORT_T_FR8(p_obj->p_pt_instance->FR8);
                INIT_GPIO_PORT_T_OD(p_obj->p_pt_instance->OD);
                INIT_GPIO_PORT_T_PUP(p_obj->p_pt_instance->PUP);
                INIT_GPIO_PORT_T_PDN(p_obj->p_pt_instance->PDN);
                INIT_GPIO_PORT_T_IE(p_obj->p_pt_instance->IE);
                /* PT Clock Disable */
                PORT_CLOCK_DISABLE_PORTT(TSB_CG_FSYSMENB_IPMENB17);
                break;
            case GPIO_PORT_U:
                INIT_GPIO_PORT_U_DATA(p_obj->p_pu_instance->DATA);
                INIT_GPIO_PORT_U_CR(p_obj->p_pu_instance->CR);
                INIT_GPIO_PORT_U_FR1(p_obj->p_pu_instance->FR1);
                INIT_GPIO_PORT_U_FR2(p_obj->p_pu_instance->FR2);
                INIT_GPIO_PORT_U_FR3(p_obj->p_pu_instance->FR3);
                INIT_GPIO_PORT_U_FR4(p_obj->p_pu_instance->FR4);
                INIT_GPIO_PORT_U_FR5(p_obj->p_pu_instance->FR5);
                INIT_GPIO_PORT_U_FR6(p_obj->p_pu_instance->FR6);
                INIT_GPIO_PORT_U_FR7(p_obj->p_pu_instance->FR7);
                INIT_GPIO_PORT_U_FR8(p_obj->p_pu_instance->FR8);
                INIT_GPIO_PORT_U_OD(p_obj->p_pu_instance->OD);
                INIT_GPIO_PORT_U_PUP(p_obj->p_pu_instance->PUP);
                INIT_GPIO_PORT_U_PDN(p_obj->p_pu_instance->PDN);
                INIT_GPIO_PORT_U_IE(p_obj->p_pu_instance->IE);
                /* PU Clock Disable */
                PORT_CLOCK_DISABLE_PORTU(TSB_CG_FSYSMENB_IPMENB18);
                break;
            case GPIO_PORT_V:
                INIT_GPIO_PORT_V_DATA(p_obj->p_pv_instance->DATA);
                INIT_GPIO_PORT_V_CR(p_obj->p_pv_instance->CR);
                INIT_GPIO_PORT_V_FR1(p_obj->p_pv_instance->FR1);
                INIT_GPIO_PORT_V_FR2(p_obj->p_pv_instance->FR2);
                INIT_GPIO_PORT_V_FR3(p_obj->p_pv_instance->FR3);
                INIT_GPIO_PORT_V_FR4(p_obj->p_pv_instance->FR4);
                INIT_GPIO_PORT_V_FR5(p_obj->p_pv_instance->FR5);
                INIT_GPIO_PORT_V_FR6(p_obj->p_pv_instance->FR6);
                INIT_GPIO_PORT_V_FR7(p_obj->p_pv_instance->FR7);
                INIT_GPIO_PORT_V_FR8(p_obj->p_pv_instance->FR8);
                INIT_GPIO_PORT_V_OD(p_obj->p_pv_instance->OD);
                INIT_GPIO_PORT_V_PUP(p_obj->p_pv_instance->PUP);
                INIT_GPIO_PORT_V_PDN(p_obj->p_pv_instance->PDN);
                INIT_GPIO_PORT_V_IE(p_obj->p_pv_instance->IE);
                /* PV Clock Disable */
                PORT_CLOCK_DISABLE_PORTV(TSB_CG_FSYSMENB_IPMENB19);
                break;
            case GPIO_PORT_W:
                INIT_GPIO_PORT_W_DATA(p_obj->p_pw_instance->DATA);
                INIT_GPIO_PORT_W_CR(p_obj->p_pw_instance->CR);
                INIT_GPIO_PORT_W_FR1(p_obj->p_pw_instance->FR1);
                INIT_GPIO_PORT_W_FR2(p_obj->p_pw_instance->FR2);
                INIT_GPIO_PORT_W_FR3(p_obj->p_pw_instance->FR3);
                INIT_GPIO_PORT_W_FR4(p_obj->p_pw_instance->FR4);
                INIT_GPIO_PORT_W_FR5(p_obj->p_pw_instance->FR5);
                INIT_GPIO_PORT_W_FR6(p_obj->p_pw_instance->FR6);
                INIT_GPIO_PORT_W_FR7(p_obj->p_pw_instance->FR7);
                INIT_GPIO_PORT_W_FR8(p_obj->p_pw_instance->FR8);
                INIT_GPIO_PORT_W_OD(p_obj->p_pw_instance->OD);
                INIT_GPIO_PORT_W_PUP(p_obj->p_pw_instance->PUP);
                INIT_GPIO_PORT_W_PDN(p_obj->p_pw_instance->PDN);
                INIT_GPIO_PORT_W_IE(p_obj->p_pw_instance->IE);
                /* PW Clock Disable */
                PORT_CLOCK_DISABLE_PORTW(TSB_CG_FSYSMENB_IPMENB20);
                break;
            case GPIO_PORT_Y:
                INIT_GPIO_PORT_Y_DATA(p_obj->p_py_instance->DATA);
                INIT_GPIO_PORT_Y_CR(p_obj->p_py_instance->CR);
                INIT_GPIO_PORT_Y_FR1(p_obj->p_py_instance->FR1);
                INIT_GPIO_PORT_Y_FR2(p_obj->p_py_instance->FR2);
                INIT_GPIO_PORT_Y_FR3(p_obj->p_py_instance->FR3);
                INIT_GPIO_PORT_Y_FR4(p_obj->p_py_instance->FR4);
                INIT_GPIO_PORT_Y_FR5(p_obj->p_py_instance->FR5);
                INIT_GPIO_PORT_Y_FR6(p_obj->p_py_instance->FR6);
                INIT_GPIO_PORT_Y_FR7(p_obj->p_py_instance->FR7);
                INIT_GPIO_PORT_Y_FR8(p_obj->p_py_instance->FR8);
                INIT_GPIO_PORT_Y_OD(p_obj->p_py_instance->OD);
                INIT_GPIO_PORT_Y_PUP(p_obj->p_py_instance->PUP);
                INIT_GPIO_PORT_Y_PDN(p_obj->p_py_instance->PDN);
                INIT_GPIO_PORT_Y_IE(p_obj->p_py_instance->IE);
                /* PY Clock Disable */
                PORT_CLOCK_DISABLE_PORTY(TSB_CG_FSYSMENB_IPMENB21);
                break;
            default:
                result = TXZ_ERROR;
                return (result);
        }
    }

    return (result);
}

/*--------------------------------------------------*/
/*!
  * @fn     TXZ_Result gpio_write_mode(gpio_t *p_obj, uint32_t group, uint32_t mode, uint32_t val)
  * @brief  Port Mode Write
  * @param[in] p_obj :GPIO object.
  * @param[in] group :GPIO Port Group. : Use @ref gpio_gr_t
  * @param[in] mode  :GPIO Port Mode. : Use @ref gpio_num_t
  * @param[in] val   :value
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note   When p_obj is NULL, no processing.
  */
/*--------------------------------------------------*/
TXZ_Result gpio_write_mode(_gpio_t *p_obj, uint32_t group, uint32_t mode, uint32_t val)
{
    TXZ_Result result = TXZ_SUCCESS;
    int32_t i;
    int32_t param_result = PARAM_NG;

    /* Check the parameters, the NULL of address */
    for (i = GPIO_PORT_0; i < GPIO_PORT_Max; i++) {
        param_result = check_param_pin_exist(p_obj, group, (uint32_t)i, mode);
        if (param_result == PARAM_OK) {
            break;
        } else {
            result = TXZ_ERROR;
        }
    }
    if (((void *)(p_obj) == (void *)0) || (param_result == PARAM_NG)) {
        result = TXZ_ERROR;
    } else {
        switch (group) {
            case GPIO_PORT_A:
                WRITE_PORT(mode, p_obj->p_pa_instance, val, PinExistTbl[GPIO_PORT_A][i]);
                break;
            case GPIO_PORT_B:
                WRITE_PORT(mode, p_obj->p_pb_instance, val, PinExistTbl[GPIO_PORT_B][i]);
                break;
            case GPIO_PORT_C:
                WRITE_PORT(mode, p_obj->p_pc_instance, val, PinExistTbl[GPIO_PORT_C][i]);
                break;
            case GPIO_PORT_D:
                WRITE_PORT(mode, p_obj->p_pd_instance, val, PinExistTbl[GPIO_PORT_D][i]);
                break;
            case GPIO_PORT_E:
                WRITE_PORT(mode, p_obj->p_pe_instance, val, PinExistTbl[GPIO_PORT_E][i]);
                break;
            case GPIO_PORT_F:
                WRITE_PORT(mode, p_obj->p_pf_instance, val, PinExistTbl[GPIO_PORT_F][i]);
                break;
            case GPIO_PORT_G:
                WRITE_PORT(mode, p_obj->p_pg_instance, val, PinExistTbl[GPIO_PORT_G][i]);
                break;
            case GPIO_PORT_H:
                WRITE_PORT(mode, p_obj->p_ph_instance, val, PinExistTbl[GPIO_PORT_H][i]);
                break;
            case GPIO_PORT_J:
                WRITE_PORT(mode, p_obj->p_pj_instance, val, PinExistTbl[GPIO_PORT_J][i]);
                break;
            case GPIO_PORT_K:
                WRITE_PORT(mode, p_obj->p_pk_instance, val, PinExistTbl[GPIO_PORT_K][i]);
                break;
            case GPIO_PORT_L:
                WRITE_PORT(mode, p_obj->p_pl_instance, val, PinExistTbl[GPIO_PORT_L][i]);
                break;
            case GPIO_PORT_M:
                WRITE_PORT(mode, p_obj->p_pm_instance, val, PinExistTbl[GPIO_PORT_M][i]);
                break;
            case GPIO_PORT_N:
                WRITE_PORT(mode, p_obj->p_pn_instance, val, PinExistTbl[GPIO_PORT_N][i]);
                break;
            case GPIO_PORT_P:
                WRITE_PORT(mode, p_obj->p_pp_instance, val, PinExistTbl[GPIO_PORT_P][i]);
                break;
            case GPIO_PORT_R:
                WRITE_PORT(mode, p_obj->p_pr_instance, val, PinExistTbl[GPIO_PORT_R][i]);
                break;
            case GPIO_PORT_T:
                WRITE_PORT(mode, p_obj->p_pt_instance, val, PinExistTbl[GPIO_PORT_T][i]);
                break;
            case GPIO_PORT_U:
                WRITE_PORT(mode, p_obj->p_pu_instance, val, PinExistTbl[GPIO_PORT_U][i]);
                break;
            case GPIO_PORT_V:
                WRITE_PORT(mode, p_obj->p_pv_instance, val, PinExistTbl[GPIO_PORT_V][i]);
                break;
            case GPIO_PORT_W:
                WRITE_PORT(mode, p_obj->p_pw_instance, val, PinExistTbl[GPIO_PORT_W][i]);
                break;
            case GPIO_PORT_Y:
                WRITE_PORT(mode, p_obj->p_py_instance, val, PinExistTbl[GPIO_PORT_Y][i]);
                break;
            default:
                result = TXZ_ERROR;
                return (result);
        }
    }

    return (result);
}

/*--------------------------------------------------*/
/*!
  * @fn     TXZ_Result gpio_read_mode(gpio_t *p_obj, uint32_t group, uint32_t mode, uint32_t *val)
  * @brief  Port Mode Read
  * @param[in]  p_obj :GPIO object.
  * @param[in]  group :GPIO Port Group.  : Use @ref gpio_gr_t
  * @param[in]  mode  :GPIO Port Mode. : Use @ref gpio_num_t
  * @param[out] val   :Store of value
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note   When p_obj is NULL, no processing.
  */
/*--------------------------------------------------*/
TXZ_Result gpio_read_mode(_gpio_t *p_obj, uint32_t group, uint32_t mode, uint32_t *val)
{
    TXZ_Result result = TXZ_SUCCESS;
    int32_t param_result = PARAM_NG;
    int32_t i;

    /* Check the parameters, the NULL of address */
    for (i = GPIO_PORT_0; i < GPIO_PORT_Max; i++) {
        param_result = check_param_pin_exist(p_obj, group, (uint32_t)i, mode);
        if (param_result == PARAM_OK) {
            break;
        } else {
            result = TXZ_ERROR;
        }
    }
    if (((void *)(p_obj) == (void *)0) || (param_result == PARAM_NG)) {
        result = TXZ_ERROR;
    } else {
        switch (group) {
            case GPIO_PORT_A:
                READ_PORT(mode, p_obj->p_pa_instance, val, PinExistTbl[GPIO_PORT_A][i]);
                break;
            case GPIO_PORT_B:
                READ_PORT(mode, p_obj->p_pb_instance, val, PinExistTbl[GPIO_PORT_B][i]);
                break;
            case GPIO_PORT_C:
                READ_PORT(mode, p_obj->p_pc_instance, val, PinExistTbl[GPIO_PORT_C][i]);
                break;
            case GPIO_PORT_D:
                READ_PORT(mode, p_obj->p_pd_instance, val, PinExistTbl[GPIO_PORT_D][i]);
                break;
            case GPIO_PORT_E:
                READ_PORT(mode, p_obj->p_pe_instance, val, PinExistTbl[GPIO_PORT_E][i]);
                break;
            case GPIO_PORT_F:
                READ_PORT(mode, p_obj->p_pf_instance, val, PinExistTbl[GPIO_PORT_F][i]);
                break;
            case GPIO_PORT_G:
                READ_PORT(mode, p_obj->p_pg_instance, val, PinExistTbl[GPIO_PORT_G][i]);
                break;
            case GPIO_PORT_H:
                READ_PORT(mode, p_obj->p_ph_instance, val, PinExistTbl[GPIO_PORT_H][i]);
                break;
            case GPIO_PORT_J:
                READ_PORT(mode, p_obj->p_pj_instance, val, PinExistTbl[GPIO_PORT_J][i]);
                break;
            case GPIO_PORT_K:
                READ_PORT(mode, p_obj->p_pk_instance, val, PinExistTbl[GPIO_PORT_K][i]);
                break;
            case GPIO_PORT_L:
                READ_PORT(mode, p_obj->p_pl_instance, val, PinExistTbl[GPIO_PORT_L][i]);
                break;
            case GPIO_PORT_M:
                READ_PORT(mode, p_obj->p_pm_instance, val, PinExistTbl[GPIO_PORT_M][i]);
                break;
            case GPIO_PORT_N:
                READ_PORT(mode, p_obj->p_pn_instance, val, PinExistTbl[GPIO_PORT_N][i]);
                break;
            case GPIO_PORT_P:
                READ_PORT(mode, p_obj->p_pp_instance, val, PinExistTbl[GPIO_PORT_P][i]);
                break;
            case GPIO_PORT_R:
                READ_PORT(mode, p_obj->p_pr_instance, val, PinExistTbl[GPIO_PORT_R][i]);
                break;
            case GPIO_PORT_T:
                READ_PORT(mode, p_obj->p_pt_instance, val, PinExistTbl[GPIO_PORT_T][i]);
                break;
            case GPIO_PORT_U:
                READ_PORT(mode, p_obj->p_pu_instance, val, PinExistTbl[GPIO_PORT_U][i]);
                break;
            case GPIO_PORT_V:
                READ_PORT(mode, p_obj->p_pv_instance, val, PinExistTbl[GPIO_PORT_V][i]);
                break;
            case GPIO_PORT_W:
                READ_PORT(mode, p_obj->p_pw_instance, val, PinExistTbl[GPIO_PORT_W][i]);
                break;
            case GPIO_PORT_Y:
                READ_PORT(mode, p_obj->p_py_instance, val, PinExistTbl[GPIO_PORT_Y][i]);
                break;
            default:
                result = TXZ_ERROR;
                break;
        }
    }

    return result;
}

/*--------------------------------------------------*/
/**
  * @brief  Port Function switching
  * @param  p_obj  :GPIO object.
  * @param  group  :GPIO Port Group.  : Use @ref gpio_gr_t
  * @param  num    :GPIO Port Number. : Use @ref gpio_num_t
  * @param  func   :GPIO Portxx Func. : Use @ref gpio_pa0_func_t - @ref gpio_pl4_func_t
  * @param  inout  :GPIO Input/Output.: Use @ref gpio_pininout_t
  * @retval GPIO_RESULT_SUCCESS :Success.
  * @retval GPIO_RESULT_FAILURE :Failure.
  * @note   When p_obj is NULL, no processing.
  */
/*--------------------------------------------------*/
TXZ_Result gpio_func(_gpio_t *p_obj, gpio_gr_t group, gpio_num_t num, uint32_t func, gpio_pininout_t inout)
{
    TXZ_Result result = TXZ_SUCCESS;
    uint32_t port_base;
    uint32_t mode_base;
    int32_t param_result = PARAM_NG;

    /* Check the parameters, the NULL of address */
    param_result = check_param_func_pin_exist(p_obj, group, num, func);
    if (((void *)(p_obj) == (void *)0) || (param_result == PARAM_NG)) {
        result = TXZ_ERROR;
    } else {
        switch (group) {
            case GPIO_PORT_A:
                port_base = (uint32_t)p_obj->p_pa_instance;
                break;
            case GPIO_PORT_B:
                port_base = (uint32_t)p_obj->p_pb_instance;
                break;
            case GPIO_PORT_C:
                port_base = (uint32_t)p_obj->p_pc_instance;
                break;
            case GPIO_PORT_D:
                port_base = (uint32_t)p_obj->p_pd_instance;
                break;
            case GPIO_PORT_E:
                port_base = (uint32_t)p_obj->p_pe_instance;
                break;
            case GPIO_PORT_F:
                port_base = (uint32_t)p_obj->p_pf_instance;
                break;
            case GPIO_PORT_G:
                port_base = (uint32_t)p_obj->p_pg_instance;
                break;
            case GPIO_PORT_H:
                port_base = (uint32_t)p_obj->p_ph_instance;
                break;
            case GPIO_PORT_J:
                port_base = (uint32_t)p_obj->p_pj_instance;
                break;
            case GPIO_PORT_K:
                port_base = (uint32_t)p_obj->p_pk_instance;
                break;
            case GPIO_PORT_L:
                port_base = (uint32_t)p_obj->p_pl_instance;
                break;
            case GPIO_PORT_M:
                port_base = (uint32_t)p_obj->p_pm_instance;
                break;
            case GPIO_PORT_N:
                port_base = (uint32_t)p_obj->p_pn_instance;
                break;
            case GPIO_PORT_P:
                port_base = (uint32_t)p_obj->p_pp_instance;
                break;
            case GPIO_PORT_R:
                port_base = (uint32_t)p_obj->p_pr_instance;
                break;
            case GPIO_PORT_T:
                port_base = (uint32_t)p_obj->p_pt_instance;
                break;
            case GPIO_PORT_U:
                port_base = (uint32_t)p_obj->p_pu_instance;
                break;
            case GPIO_PORT_V:
                port_base = (uint32_t)p_obj->p_pv_instance;
                break;
            case GPIO_PORT_W:
                port_base = (uint32_t)p_obj->p_pw_instance;
                break;
            case GPIO_PORT_Y:
                port_base = (uint32_t)p_obj->p_py_instance;
                break;
            default:
                result = TXZ_ERROR;
                break;
        }
        if (result == TXZ_ERROR) {
            return (result);
        }

        /* Initialization PxFR OFF */
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR1);
        BITBAND_PORT_CLR(mode_base, num);
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR2);
        BITBAND_PORT_CLR(mode_base, num);
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR3);
        BITBAND_PORT_CLR(mode_base, num);
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR4);
        BITBAND_PORT_CLR(mode_base, num);
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR5);
        BITBAND_PORT_CLR(mode_base, num);
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR6);
        BITBAND_PORT_CLR(mode_base, num);
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR7);
        BITBAND_PORT_CLR(mode_base, num);
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR8);
        BITBAND_PORT_CLR(mode_base, num);

        /* Initialize Input/Output */
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
        BITBAND_PORT_CLR(mode_base, num);
        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
        BITBAND_PORT_CLR(mode_base, num);

        switch (func) {
            case 0:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            case GPIO_FR_1:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR1);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR1);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR1);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            case GPIO_FR_2:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR2);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR2);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR2);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            case GPIO_FR_3:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR3);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR3);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR3);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            case GPIO_FR_4:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR4);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR4);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR4);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            case GPIO_FR_5:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR5);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR5);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR5);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                }
                break;
            case GPIO_FR_6:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR6);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR6);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR6);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            case GPIO_FR_7:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR7);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR7);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR7);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            case GPIO_FR_8:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR8);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR8);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_FR8);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            case GPIO_FR_NA:
                if (inout == GPIO_PIN_OUTPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_CLR(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_INPUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_CLR(mode_base, num);
                } else if (inout == GPIO_PIN_INOUT) {
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_IE);
                    BITBAND_PORT_SET(mode_base, num);
                    mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_CR);
                    BITBAND_PORT_SET(mode_base, num);
                } else if (inout == GPIO_PIN_NOTINOUT) {
                    /* No Process */
                }
                break;
            default:
                result = TXZ_ERROR;
                return (result);
        }
    }

    return (result);
}

/*--------------------------------------------------*/
/**
  * @brief  Set Pull up mode
  * @param  p_obj  :GPIO object.
  * @param  group  :GPIO Port Group.  : Use @ref gpio_gr_t
  * @param  num    :GPIO Port Number. : Use @ref gpio_num_t
  * @param  val    :GPIO Pin Reset/Set. : Use @ref gpio_pinstate_t
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note   When p_obj is NULL, no processing.
  */
/*--------------------------------------------------*/
TXZ_Result gpio_SetPullUp(_gpio_t *p_obj, gpio_gr_t group, gpio_num_t num, gpio_pinstate_t val)
{
    TXZ_Result result = TXZ_SUCCESS;
    uint32_t port_base;
    uint32_t mode_base;

    if ((void *)(p_obj) == (void *)0) {
        result = TXZ_ERROR;
    } else if (check_param_pin_exist(p_obj, group, num, GPIO_Mode_PUP) == PARAM_NG) {
        result = TXZ_ERROR;
    } else {
        port_base = BITBAND_PORT_BASE(group);

        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_PUP);
        if (val == GPIO_PIN_SET) {
            BITBAND_PORT_SET(mode_base, num);
        } else if (val == GPIO_PIN_RESET) {
            BITBAND_PORT_CLR(mode_base, num);
        } else {
            result = TXZ_ERROR;
        }
    }

    return result;
}

/*--------------------------------------------------*/
/**
  * @brief  Set Pull down mode
  * @param  p_obj  :GPIO object.
  * @param  group  :GPIO Port Group.  : Use @ref gpio_gr_t
  * @param  num    :GPIO Port Number. : Use @ref gpio_num_t
  * @param  val    :GPIO Pin Reset/Set. : Use @ref gpio_pinstate_t
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note   When p_obj is NULL, no processing.
  */
/*--------------------------------------------------*/
TXZ_Result gpio_SetPullDown(_gpio_t *p_obj, gpio_gr_t group, gpio_num_t num, gpio_pinstate_t val)
{
    TXZ_Result result = TXZ_SUCCESS;
    uint32_t port_base;
    uint32_t mode_base;

    if ((void *)(p_obj) == (void *)0) {
        result = TXZ_ERROR;
    } else if (check_param_pin_exist(p_obj, group, num, GPIO_Mode_PDN) == PARAM_NG) {
        result = TXZ_ERROR;
    } else {
        port_base = BITBAND_PORT_BASE(group);

        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_PDN);
        if (val == GPIO_PIN_SET) {
            BITBAND_PORT_SET(mode_base, num);
        } else if (val == GPIO_PIN_RESET) {
            BITBAND_PORT_CLR(mode_base, num);
        } else {
            result = TXZ_ERROR;
        }
    }

    return result;
}

/*--------------------------------------------------*/
/**
  * @brief  Set Open drain mode
  * @param  p_obj  :GPIO object.
  * @param  group  :GPIO Port Group.  : Use @ref gpio_gr_t
  * @param  num    :GPIO Port Number. : Use @ref gpio_num_t
  * @param  val    :GPIO Pin Reset/Set. : Use @ref gpio_pinstate_t
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note   When p_obj is NULL, no processing.
  */
/*--------------------------------------------------*/
TXZ_Result gpio_SetOpenDrain(_gpio_t *p_obj, gpio_gr_t group, gpio_num_t num, gpio_pinstate_t val)
{
    TXZ_Result result = TXZ_SUCCESS;
    uint32_t port_base;
    uint32_t mode_base;

    if ((void *)(p_obj) == (void *)0) {
        result = TXZ_ERROR;
    } else if (check_param_pin_exist(p_obj, group, num, GPIO_Mode_OD) == PARAM_NG) {
        result = TXZ_ERROR;
    } else {
        port_base = BITBAND_PORT_BASE(group);

        mode_base = BITBAND_PORT_MODE_BASE(port_base, GPIO_Mode_OD);
        if (val == GPIO_PIN_SET) {
            BITBAND_PORT_SET(mode_base, num);
        } else if (val == GPIO_PIN_RESET) {
            BITBAND_PORT_CLR(mode_base, num);
        } else {
            result = TXZ_ERROR;
        }
    }

    return result;
}

/*--------------------------------------------------*/
/*!
  * @fn     TXZ_Result gpio_write_bit(gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode, uint32_t val)
  * @brief  Port Bit Write
  * @param  p_obj  :GPIO object.
  * @param  group  :GPIO Port Group.  : Use @ref gpio_gr_t
  * @param  num    :GPIO Port Number. : Use @ref gpio_num_t
  * @param  mode   :GPIO Port Mode. : Use @ref gpio_mode_t
  * @param  val    :GPIO Pin Reset/Set.
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note   When p_obj is NULL, no processing.
  */
/*--------------------------------------------------*/
TXZ_Result gpio_write_bit(_gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode, uint32_t val)
{
    TXZ_Result result = TXZ_SUCCESS;
    uint32_t base;

    /* Check the parameters */
    if ((void *)(p_obj) == (void *)0) {
        result = TXZ_ERROR;
    } else if (check_param_pin_exist(p_obj, group, num, mode) == PARAM_NG) {
        result = TXZ_ERROR;
    } else {
        base = BITBAND_PORT_BASE(group);
        base = BITBAND_PORT_MODE_BASE(base, mode);
        if (val == GPIO_PIN_SET) {
            BITBAND_PORT_SET(base, num);
        } else if (val == GPIO_PIN_RESET) {
            BITBAND_PORT_CLR(base, num);
        } else {
            result = TXZ_ERROR;
        }
    }

    return (result);
}

/*--------------------------------------------------*/
/*!
  * @fn     TXZ_Result gpio_read_bit(gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode, gpio_pinstate_t *pinstate)
  * @brief  Port Bit Read
  * @param[in]  p_obj  :GPIO object.
  * @param[in]  group  :GPIO Port Group.  : Use @ref gpio_gr_t
  * @param[in]  num    :GPIO Port Number. : Use @ref gpio_num_t
  * @param[in]  mode   :GPIO Port Mode. : Use @ref gpio_mode_t
  * @param[out] *pinstate  : store  Value of GPIO BitPin. : Use @ref gpio_pinstate_t
  * @retval TXZ_SUCCESS :Success.
  * @retval TXZ_ERROR   :Failure.
  * @note   When p_obj is NULL, no processing.: Use @ref gpio_pinstate_t
  */
/*--------------------------------------------------*/
TXZ_Result gpio_read_bit(_gpio_t *p_obj, uint32_t group, uint32_t num, uint32_t mode, gpio_pinstate_t *pinstate)
{
    TXZ_Result result = TXZ_SUCCESS;
    uint32_t base;
    uint32_t val;

    /* Check the parameters */
    if ((void *)(p_obj) == (void *)0) {
        result = TXZ_ERROR;
    } else if (check_param_pin_exist(p_obj, group, num, mode) == PARAM_NG) {
        result = TXZ_ERROR;
    } else {
        base = BITBAND_PORT_BASE(group);
        base = BITBAND_PORT_MODE_BASE(base, mode);
        BITBAND_PORT_READ(val, base, num);
        if (val == GPIO_PIN_RESET) {
            *pinstate = GPIO_PIN_RESET;
        } else if (val == GPIO_PIN_SET) {
            *pinstate = GPIO_PIN_SET;
        } else {
            result = TXZ_ERROR;
        }
    }

    return result;
}

/**
 *  @}
 */ /* End of group GPIO_Exported_functions */

/**
 *  @}
 */ /* End of group GPIO */

/**
 *  @}
 */ /* End of group Periph_Driver */

#endif /* defined(__GPIO_H)  */

#ifdef __cplusplus
}
#endif /* __cplusplus */