/********************************************************************************
 * @file    GPIO_InputOutpt.c
 * @author  SOC AE Team
 * @version V1.1
 * @date    2025-06-27
 * @brief   配置GPIO的输入和输出功能，其中：
 *              PA10的输出与PA8的输入一致；
 *              PA11的输出跟随PA9的翻转而翻转；
 *
 *******************************************************************************/

#include "sc32_conf.h"
#include "Function_Init.h"

void GPIO_InOut_Function(void)
{
  GPIO_InitTypeDef GPIO_InitStruct; //定义GPIO初始化结构体变量
  FlagStatus GPIO_Flag = SET;
  
  printf(" GPIO测试！\r\n ");
  
  /* PA10、PA11设置为推挽输出 */
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT_PP;
  GPIO_Init(GPIOA, &GPIO_InitStruct);
  
  /* PA8、PA9设置为上拉输入 */
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_PU;
  GPIO_Init(GPIOA, &GPIO_InitStruct);
	
    /* PB12设置为浮空输入 */
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_HI;
    GPIO_Init(GPIOB, &GPIO_InitStruct);
  while(1)
  {
    /* PA10的输出与PA8的输入一致 */
    if(GPIO_ReadDataBit(GPIOA, GPIO_Pin_8) == Bit_SET)
    {
      GPIO_SetBits(GPIOA, GPIO_Pin_10);
    }
    else
    {
      GPIO_ResetBits(GPIOA, GPIO_Pin_10);
    }

    /* PA11的输出跟随PA9的翻转而翻转 */
    if((PA_BIT(9) == 0) && (GPIO_Flag == SET))
    {
      /* PA9由高变低 */
      GPIO_Flag = RESET;
      PA_OT(11);
    }
    if((PA_BIT(9) == 1) && (GPIO_Flag == RESET))
    {
      /* PA9由低变高 */
      GPIO_Flag = SET;
      PA_OT(11);
    }
  }
}
