/* Copyright Statement:
 *
 * This software/firmware and related documentation ("AutoChips Software") are
 * protected under relevant copyright laws. The information contained herein is
 * confidential and proprietary to AutoChips Inc. and/or its licensors. Without
 * the prior written permission of AutoChips inc. and/or its licensors, any
 * reproduction, modification, use or disclosure of AutoChips Software, and
 * information contained herein, in whole or in part, shall be strictly
 * prohibited.
 *
 * AutoChips Inc. (C) 2024. All rights reserved.
 *
 * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
 * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")
 * RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
 * ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL
 * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
 * NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH
 * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
 * INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES
 * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
 * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
 * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS
 * SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE
 * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
 * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S
 * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE
 * RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE
 * AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
 * CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.
 */
/******************************************************************************
 * @version: V3.1.0  AC7840x  Demo
 ******************************************************************************/

#include "gpio_sample.h"
#include "port_hw.h"
#include "gpio_hw.h"
#include "osif.h"


/*!
 * @brief NMI_Handler
 *        NMI中断回调函数
 * @param[in]  none
 *
 * @return none
 */
void NMI_Handler(void)
{
    printf("this is a nmi interrupt \r\n");
    while((GPIO_DRV_ReadPins(GPIOD)& (1<<3))==0);
}

/*!
 * @brief GPIOA_handler
 *        GPIOA中断回调函数
 * @param[in]  none
 *
 * @return none
 */
void GPIOA_handler(uint32_t instance, uint32_t status, void *userData)
{
    printf("\r\n");
    for(int i=0; i<3; i++)
    {
        printf("this is a gpioA interrupt %d \r\n",i);

    }
}
/*!
 * @brief GPIOA_handler
 *        GPIOA中断回调函数
 * @param[in]  none
 *
 * @return none
 */
void GPIOE_handler(uint32_t instance, uint32_t status, void *userData)
{
    printf("\r\n");
    for(int i=0; i<3; i++)
    {
        printf("this is a gpioE interrupt %d \r\n",i);

    }
}
/*!
 * @brief GPIOC_handler
 *        GPIOC中断回调函数
 * @param[in]  none
 *
 * @return none
 */
void GPIOC_handler(uint32_t instance, uint32_t status, void *userData)
{
    printf("\r\n");
    for(int i=0; i<3; i++)
    {
        printf("this is a gpio interrupt %d \r\n",i);

    }
}
/*!
 * @brief GPIO_Init
 *        gpio引脚功能配置
 * @param[in]  none
 *
 * @return none
 */
void GPIO_Init(void)
{

    GPIO_DRV_SetMuxModeSel(PORTD,3,PORT_MUX_ALT7); //NMI引脚
    GPIO_DRV_SetPullSel(PORTD,3,PORT_INTERNAL_PULL_UP_ENABLED); //上拉

#ifdef AC7840_BOARD_V0
    GPIO_DRV_SetMuxModeSel(PORTC,12,PORT_MUX_AS_GPIO);
    GPIO_DRV_SetPullSel(PORTC,12,PORT_INTERNAL_PULL_UP_ENABLED);
    PORT_SetPinIntSel(PORTC,12,PORT_INT_FALLING_EDGE);
    GPIO_DRV_SetPinDirection(GPIOC,12,GPIO_INPUT_DIRECTION);

    GPIO_DRV_SetMuxModeSel(PORTC,13,PORT_MUX_AS_GPIO);
    GPIO_DRV_SetPullSel(PORTC,13,PORT_INTERNAL_PULL_UP_ENABLED);
    PORT_SetPinIntSel(PORTC,13,PORT_INT_FALLING_EDGE);
    GPIO_DRV_SetPinDirection(GPIOC,13,GPIO_INPUT_DIRECTION);
    GPIO_DRV_InstallCallback(2,GPIOC_handler,0);

    NVIC_SetPriority(PORTC_IRQn, 2);

#else
    GPIO_DRV_SetMuxModeSel(PORTA,6,PORT_MUX_AS_GPIO);
    GPIO_DRV_SetPullSel(PORTA,6,PORT_INTERNAL_PULL_UP_ENABLED);
    PORT_SetPinIntSel(PORTA,6,PORT_INT_FALLING_EDGE);
    GPIO_DRV_SetPinDirection(GPIOA,6,GPIO_INPUT_DIRECTION);

    GPIO_DRV_SetMuxModeSel(PORTE,7,PORT_MUX_AS_GPIO);
    GPIO_DRV_SetPullSel(PORTE,7,PORT_INTERNAL_PULL_UP_ENABLED);
    PORT_SetPinIntSel(PORTE,7,PORT_INT_FALLING_EDGE);
    GPIO_DRV_SetPinDirection(GPIOE,7,GPIO_INPUT_DIRECTION);

    GPIO_DRV_InstallCallback(0,GPIOA_handler,0);
    GPIO_DRV_InstallCallback(4,GPIOE_handler,0);

    NVIC_SetPriority(PORTA_IRQn, 2);
    NVIC_SetPriority(PORTC_IRQn, 3);
#endif
}


