/** * @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; }
/** * @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; }
/** * @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; } } }