Esempio n. 1
0
/**
  * @brief  Initializes the camera.
  * @param  uint32_t Resolution : camera sensor requested resolution (x, y) : standard resolution
  *         naming QQVGA, QVGA, VGA ...
  *
  * @retval Camera status
  */
uint8_t BSP_CAMERA_Init(uint32_t Resolution)
{ 
  DCMI_HandleTypeDef *phdcmi;
  uint8_t status = CAMERA_ERROR;

  /* Get the DCMI handle structure */
  phdcmi = &hDcmiEval;

  /*** Configures the DCMI to interface with the camera module ***/
  /* DCMI configuration */
  phdcmi->Init.CaptureRate      = DCMI_CR_ALL_FRAME;
  phdcmi->Init.HSPolarity       = DCMI_HSPOLARITY_HIGH;
  phdcmi->Init.SynchroMode      = DCMI_SYNCHRO_HARDWARE;
  phdcmi->Init.VSPolarity       = DCMI_VSPOLARITY_HIGH;
  phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
  phdcmi->Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;
  phdcmi->Instance              = DCMI;

  /* Configure IO functionalities for CAMERA detect pin */
  BSP_IO_Init(); 
  
  /* Apply Camera Module hardware reset */
  BSP_CAMERA_HwReset();

  /* Check if the CAMERA Module is plugged on board */
  if(BSP_IO_ReadPin(CAM_PLUG_PIN) == BSP_IO_PIN_SET)
  {
    status = CAMERA_NOT_DETECTED;
    return status; /* Exit with error */
  }

  /* Read ID of Camera module via I2C */
  if (s5k5cag_ReadID(CAMERA_I2C_ADDRESS) == S5K5CAG_ID)
  {
    /* Initialize the camera driver structure */
    camera_drv = &s5k5cag_drv;
    CameraHwAddress = CAMERA_I2C_ADDRESS;

    /* DCMI Initialization */
    BSP_CAMERA_MspInit(&hDcmiEval, NULL);
    HAL_DCMI_Init(phdcmi);

    /* Camera Module Initialization via I2C to the wanted 'Resolution' */
    camera_drv->Init(CameraHwAddress, Resolution);

    CameraCurrentResolution = Resolution;

    /* Return CAMERA_OK status */
    status = CAMERA_OK;
  }
  else
  {
    /* Return CAMERA_NOT_SUPPORTED status */
	status = CAMERA_NOT_SUPPORTED;
  }

  return status;
}
/**
 * @brief  Detects if SD card is correctly plugged in the memory slot or not.
 * @param  SdCard: SD card to be used, that should be SD_CARD1 or SD_CARD2 
 * @retval Returns if SD is detected or not
 */
uint8_t BSP_SD_IsDetectedEx(uint32_t SdCard)
{
  __IO uint8_t status = SD_PRESENT;
  
  if(SdCard == SD_CARD1)
  {
    /* Check SD card detect pin */
    if((BSP_IO_ReadPin(SD1_DETECT_PIN)&SD1_DETECT_PIN) != SD1_DETECT_PIN)
    {
      if (UseExtiModeDetection)
      {
        BSP_IO_ConfigPin(SD1_DETECT_PIN, IO_MODE_IT_RISING_EDGE_PU);
      }
    }
    else
    {
      status = SD_NOT_PRESENT;
      if (UseExtiModeDetection)
      {
        BSP_IO_ConfigPin(SD1_DETECT_PIN, IO_MODE_IT_FALLING_EDGE_PU);
      }
    }
  }
  else
  {
    /* Check SD card detect pin */
    if((BSP_IO_ReadPin(SD2_DETECT_PIN)&SD2_DETECT_PIN) != SD2_DETECT_PIN)
    {
      if (UseExtiModeDetection)
      {
        BSP_IO_ConfigPin(SD2_DETECT_PIN, IO_MODE_IT_RISING_EDGE_PU);
      }
    }
    else
    {
      status = SD_NOT_PRESENT;
      if (UseExtiModeDetection)
      {
        BSP_IO_ConfigPin(SD2_DETECT_PIN, IO_MODE_IT_FALLING_EDGE_PU);
      }
    }    
  }
  return status;
}
/**
 * @brief  Detects if SD card is correctly plugged in the memory slot or not.
 * @param  None
 * @retval Returns if SD is detected or not
 */
uint8_t BSP_SD_IsDetected(void)
{
  __IO uint8_t status = SD_PRESENT;

  /* Check SD card detect pin */
  if(BSP_IO_ReadPin(SD_DETECT_PIN))
  {
    status = SD_NOT_PRESENT;
  }
  
  return status;
}
/**
  * @brief  Configures Interrupt mode for SD detection pin.
  * @param  None
  * @retval IO_OK: if all initializations are OK. Other value if error.
  */
uint8_t BSP_SD_ITConfig(void)
{
  /* Check SD card detect pin */
  if (BSP_IO_ReadPin(SD_DETECT_PIN) != SD_DETECT_PIN)
  {
    return BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_RISING_EDGE_PU);
  }
  else
  {
    return BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_FALLING_EDGE_PU);
  }
}
/**
  * @brief  Initializes the camera.
  * @param  Camera: Pointer to the camera configuration structure
  * @retval Camera status
  */
uint8_t BSP_CAMERA_Init(uint32_t Resolution)
{ 
  DCMI_HandleTypeDef *phdcmi;
  
  uint8_t ret = CAMERA_ERROR;
  
  /* Get the DCMI handle structure */
  phdcmi = &hdcmi_eval;
  
  /*** Configures the DCMI to interface with the camera module ***/
  /* DCMI configuration */
  phdcmi->Init.CaptureRate      = DCMI_CR_ALL_FRAME;  
  phdcmi->Init.HSPolarity       = DCMI_HSPOLARITY_LOW;
  phdcmi->Init.SynchroMode      = DCMI_SYNCHRO_HARDWARE;
  phdcmi->Init.VSPolarity       = DCMI_VSPOLARITY_LOW;
  phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
  phdcmi->Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;
  phdcmi->Instance              = DCMI;  

  /* Configure IO functionalities for camera detect pin */
  BSP_IO_Init(); 
  
  /* Set the camera STANDBY pin */
  BSP_IO_ConfigPin(XSDN_PIN, IO_MODE_OUTPUT);
  BSP_IO_WritePin(XSDN_PIN, SET);
  
  /* Check if the camera is plugged */
  if(BSP_IO_ReadPin(CAM_PLUG_PIN))
  {
    return CAMERA_ERROR;
  }
  
  /* DCMI Initialization */
  DCMI_MspInit();  
  HAL_DCMI_Init(phdcmi);
  
  if(ov2640_ReadID(CAMERA_I2C_ADDRESS) == OV2640_ID)
  { 
    /* Initialize the camera driver structure */
    camera_drv = &ov2640_drv;     
    
    /* Camera Init */   
    camera_drv->Init(CAMERA_I2C_ADDRESS, Resolution);
    
    /* Return CAMERA_OK status */
    ret = CAMERA_OK;
  } 
  
  current_resolution = Resolution;
  
  return ret;
}
/**
 * @brief  Detects if SD card is correctly plugged in the memory slot or not.
 * @retval Returns if SD is detected or not
 */
uint8_t BSP_SD_IsDetected(void)
{
  __IO uint8_t status = SD_PRESENT;
  
  /* Check SD card detect pin */
  if((BSP_IO_ReadPin(SD_DETECT_PIN)&SD_DETECT_PIN) != SD_DETECT_PIN)
  {
     if (UseExtiModeDetection)
      BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_RISING_EDGE_PU);

  }
  else
  {
    status = SD_NOT_PRESENT;
    if (UseExtiModeDetection)
      BSP_IO_ConfigPin(SD_DETECT_PIN, IO_MODE_IT_FALLING_EDGE_PU);
  }

  return status;
}
Esempio n. 7
0
/**
  * @brief  Returns the current joystick status.
  * @param  None
  * @retval Code of the joystick key pressed
  *          This code can be one of the following values:
  *            @arg  JOY_NONE
  *            @arg  JOY_SEL
  *            @arg  JOY_DOWN
  *            @arg  JOY_LEFT
  *            @arg  JOY_RIGHT
  *            @arg  JOY_UP
  */
JOYState_TypeDef BSP_JOY_GetState(void)
{
  uint16_t tmp = 0;   
  
  /* Read the status joystick pins */
  tmp = BSP_IO_ReadPin(JOY_ALL_PINS);
   
  /* Check the pressed keys */  
  if((tmp & JOY_NONE_PIN) == JOY_NONE)
  {
    return(JOYState_TypeDef) JOY_NONE;
  }
  else if(!(tmp & JOY_SEL_PIN))
  {
    return(JOYState_TypeDef) JOY_SEL;
  }
  else if(!(tmp & JOY_DOWN_PIN))
  {
    return(JOYState_TypeDef) JOY_DOWN;
  } 
  else if(!(tmp & JOY_LEFT_PIN))
  {
    return(JOYState_TypeDef) JOY_LEFT;
  }
  else if(!(tmp & JOY_RIGHT_PIN))
  {
    return(JOYState_TypeDef) JOY_RIGHT;
  }
  else if(!(tmp & JOY_UP_PIN))
  {
    return(JOYState_TypeDef) JOY_UP;
  }
  else
  { 
    return(JOYState_TypeDef) JOY_NONE;
  }  
}
/**
  * @brief  Initializes the camera.
  * @param  Camera: Pointer to the camera configuration structure
  * @retval Camera status
  */
uint8_t BSP_CAMERA_Init(uint32_t Resolution)
{ 
  DCMI_HandleTypeDef *phdcmi;
  
  uint8_t ret = CAMERA_ERROR;
  
  /* Get the DCMI handle structure */
  phdcmi = &hDcmiEval;

  /*** Configures the DCMI to interface with the camera module ***/
  /* DCMI configuration */
  phdcmi->Init.CaptureRate      = DCMI_CR_ALL_FRAME;
  phdcmi->Init.HSPolarity       = DCMI_HSPOLARITY_HIGH;
  phdcmi->Init.SynchroMode      = DCMI_SYNCHRO_HARDWARE;
  phdcmi->Init.VSPolarity       = DCMI_VSPOLARITY_HIGH;
  phdcmi->Init.ExtendedDataMode = DCMI_EXTEND_DATA_8B;
  phdcmi->Init.PCKPolarity      = DCMI_PCKPOLARITY_RISING;
  phdcmi->Init.ByteSelectMode   = DCMI_BSM_ALL;
  phdcmi->Init.ByteSelectStart  = DCMI_OEBS_ODD;
  phdcmi->Init.LineSelectMode   = DCMI_LSM_ALL;
  phdcmi->Init.LineSelectStart  = DCMI_OELS_ODD; 
  phdcmi->Instance              = DCMI;

  /* Configure IO functionalities for CAMERA detect pin */
  BSP_IO_Init(); 
  
  /* Apply Camera hardware reset */
  BSP_CAMERA_HwReset();

  /* Check if the CAMERA is plugged */
  if(BSP_IO_ReadPin(CAM_PLUG_PIN))
  {
    return CAMERA_ERROR;
  }

  if (s5k5cag_ReadID(CAMERA_I2C_ADDRESS) == S5K5CAG_ID)
  {
    /* Initialize the camera driver structure */
    camera_drv = &s5k5cag_drv;
    cameraHwAddress = CAMERA_I2C_ADDRESS;

    /* DCMI Initialization */
    BSP_CAMERA_MspInit(&hDcmiEval, NULL);
    HAL_DCMI_Init(phdcmi);

    /* Camera Init */
    camera_drv->Init(cameraHwAddress, Resolution);

    currentResolution = Resolution;

    /* Return CAMERA_OK status */
    ret = CAMERA_OK;
  }
  else
  {
    /* No supported camera sensor found */
    ret = CAMERA_ERROR;
  }
  
  return ret;
}
Esempio n. 9
0
/**
  * @brief  SDRAM Demo
  * @param  None
  * @retval None
  */
void IOE_GPIO_demo (void)
{ 
  uint32_t ioe_irq_pending_status, ioe_gpio_status; 
  uint32_t lcd_line = 85;
  uint8_t test_result = IOE_GPIO_TEST_PASSED;
  uint8_t all_test_fail = 1;
  GPIO_PinState mcu_pin_state;

  IOE_GPIO_SetHint();

  /* Enable the Leds */
  BSP_IO_Init();
  BSP_LED_Init(LED1); 
  BSP_LED_Init(LED2); 
  
  BSP_LED_On(LED1); 
  BSP_LED_On(LED2); 
 
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_OFF);

  /* TEST IO_MODE_OUPUT mode */
  /* ---------------------------------- */

  /* SetUp a GPIO to be connected to one of the MFX GPIOS via a wire */
  SetMcuGpioToBeConnectedToMfxGPO();
  test_result = IOE_GPIO_TEST_PASSED;
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_OUTPUT);

  BSP_IO_WritePin(MFX_CONNECTET_PIN, BSP_IO_PIN_RESET);
  HAL_Delay(1);
  mcu_pin_state = HAL_GPIO_ReadPin (MCU_GPIO_PORT, MCU_GPIO_PIN);
  if (mcu_pin_state) 
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  BSP_IO_WritePin(MFX_CONNECTET_PIN, BSP_IO_PIN_SET);
  HAL_Delay(1);
  mcu_pin_state = HAL_GPIO_ReadPin (MCU_GPIO_PORT, MCU_GPIO_PIN);
  if (mcu_pin_state) 
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }

  BSP_IO_WritePin(MFX_CONNECTET_PIN, BSP_IO_PIN_RESET);
  HAL_Delay(1);
  mcu_pin_state = HAL_GPIO_ReadPin (MCU_GPIO_PORT, MCU_GPIO_PIN);
  if (mcu_pin_state) 
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  lcd_line += 15;
  if (test_result) 
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_OUTPUT: FAILED", LEFT_MODE);
  }
  else
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_OUTPUT: PASSED", LEFT_MODE);
    all_test_fail = 0;
  }


  /* TEST IO_MODE_INPUT mode */
  /* ---------------------------------- */

  /* SetUp a GPIO to be connected to one of the MFX GPIOS via a wire */
  SetMcuGpioToBeConnectedToMfxGPI();
  test_result = IOE_GPIO_TEST_PASSED;
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_INPUT);

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  HAL_Delay(1);
  ioe_gpio_status = BSP_IO_ReadPin (MFX_CONNECTET_PIN);
  if (ioe_gpio_status) 
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_SET);
  HAL_Delay(1);
  ioe_gpio_status = BSP_IO_ReadPin (MFX_CONNECTET_PIN);
  if (ioe_gpio_status) 
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  HAL_Delay(1);
  ioe_gpio_status = BSP_IO_ReadPin (MFX_CONNECTET_PIN);
  if (ioe_gpio_status) 
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  lcd_line += 15;
  if (test_result) 
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_INPUT: FAILED", LEFT_MODE);
  }
  else
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_INPUT: PASSED", LEFT_MODE);
    all_test_fail = 0;
  }

  SetMcuGpioToBeConnectedToMfxGPI();
		
  /* TEST IO_MODE_IT_HIGH_LEVEL mode */
  /* ---------------------------------- */
  test_result = IOE_GPIO_TEST_PASSED;
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_OFF);
  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  BSP_IO_ITClear();   

  /* BSP_IO_ConfigPin(MFXIO_PIN_6, IO_MODE_INPUT); */
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_IT_HIGH_LEVEL_PD);
  /* We just want to test the good functioning of pending bit and ack on the IOE */
  HAL_NVIC_DisableIRQ((IRQn_Type)(MFX_IRQOUT_EXTI_IRQn));

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_SET);
  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  HAL_Delay(1);

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  lcd_line += 15;
  if (test_result) 
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_IT_HIGH_LEVEL: FAILED", LEFT_MODE);
  }
  else
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_IT_HIGH_LEVEL: PASSED", LEFT_MODE);
    all_test_fail = 0;
  }


  /* TEST IO_MODE_IT_LOW_LEVEL mode */
  /* ---------------------------------- */
  test_result = IOE_GPIO_TEST_PASSED;
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_OFF);
  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_SET);
  BSP_IO_ITClear();   

  /* BSP_IO_ConfigPin(MFXIO_PIN_6, IO_MODE_INPUT); */
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_IT_LOW_LEVEL_PU);
  /* We just want to test the good functioning of pending bit and ack on the IOE */
  HAL_NVIC_DisableIRQ((IRQn_Type)(MFX_IRQOUT_EXTI_IRQn));

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  HAL_Delay(1);

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  HAL_Delay(1);

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_SET);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  lcd_line += 15;
  if (test_result) 
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_IT_LOW_LEVEL: FAILED", LEFT_MODE);
  }
  else
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_IT_LOW_LEVEL: PASSED", LEFT_MODE);
    all_test_fail = 0;
  }

  /* TEST IO_MODE_IT_RISING_EDGE mode */
  /* ---------------------------------- */
  test_result = IOE_GPIO_TEST_PASSED;
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_OFF);
  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  BSP_IO_ITClear();   

  /* BSP_IO_ConfigPin(MFXIO_PIN_6, IO_MODE_INPUT); */
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_IT_RISING_EDGE_PD);
  /* We just want to test the good functioning of pending bit and ack on the IOE */
  HAL_NVIC_DisableIRQ((IRQn_Type)(MFX_IRQOUT_EXTI_IRQn));

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_SET);
  HAL_Delay(1);
  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  HAL_Delay(1);

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  lcd_line += 15;
  if (test_result) 
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_IT_RISING_EDGE: FAILED", LEFT_MODE);
  }
  else
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_IT_RISING_EDGE: PASSED", LEFT_MODE);
    all_test_fail = 0;
  }

  /* TEST IO_MODE_IT_FALLING_EDGE mode */
  /* ---------------------------------- */
  test_result = IOE_GPIO_TEST_PASSED;
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_OFF);
  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  BSP_IO_ITClear();   

  /* BSP_IO_ConfigPin(MFXIO_PIN_6, IO_MODE_INPUT); */
  BSP_IO_ConfigPin(MFX_CONNECTET_PIN, IO_MODE_IT_FALLING_EDGE_PU);
  /* We just want to test the good functioning of pending bit and ack on the IOE */
  HAL_NVIC_DisableIRQ((IRQn_Type)(MFX_IRQOUT_EXTI_IRQn));

  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_SET);
  HAL_Delay(1);
  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_FAILED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_PASSED;
  }

  HAL_GPIO_WritePin(MCU_GPIO_PORT, MCU_GPIO_PIN, GPIO_PIN_RESET);
  HAL_Delay(1);
  ioe_irq_pending_status = BSP_IO_ITGetStatus(MFX_CONNECTET_PIN);
  if (ioe_irq_pending_status) 
  {
    BSP_IO_ITClear();   
    test_result |= IOE_GPIO_TEST_PASSED;
  }
  else
  {
    test_result |= IOE_GPIO_TEST_FAILED;
  }

  lcd_line += 15;
  if (test_result) 
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_IT_FALLING_EDGE: FAILED", LEFT_MODE);
  }
  else
  {
    BSP_LCD_DisplayStringAt(20, lcd_line, (uint8_t *)"IOE IO_MODE_IT_FALLING_EDGE: PASSED", LEFT_MODE);
    all_test_fail = 0;
  }

  if (all_test_fail) 
  {
    BSP_LCD_DisplayStringAt(20, lcd_line + 20, (uint8_t *)"          all IOE tests FAILED !!!", LEFT_MODE);
    BSP_LCD_DisplayStringAt(15, lcd_line + 40, (uint8_t *)"Are you sure that MCU_PB4 pin is connected ", LEFT_MODE);
    BSP_LCD_DisplayStringAt(15, lcd_line + 55, (uint8_t *)"to TP9 probe with a wire on the board ??", LEFT_MODE);
  }

  /* We just want to test the good functioning of pending bit and ack on the IOE */
  HAL_NVIC_EnableIRQ((IRQn_Type)(MFX_IRQOUT_EXTI_IRQn));
	
  while (1)
  {    
    if(CheckForUserInput() > 0)
    {
      return;
    }
  }
}