/** * @brief Initializes and Configures the IO_Expander Touch Panel Functionality * and configures all STM32F429I_DISCO necessary * hardware (GPIOs, APB clocks ..). * @param None * @retval IOE_OK if all initializations done correctly. Other value if error. */ uint8_t IOE_Config(void) { /* Configure the needed pins */ IOE_GPIO_Config(); /* I2C initialization */ IOE_I2C_Config(); /* Read IO Expander ID */ if(IOE_IsOperational()) { return IOE_NOT_OPERATIONAL; } /* Generate IO Expander Software reset */ IOE_Reset(); /* IO Expander configuration */ /* Touch Panel controller and ADC configuration */ IOE_FnctCmd(IOE_ADC_FCT, ENABLE); IOE_TP_Config(); /* Configuration is OK */ return IOE_OK; }
/** * @brief Initialize and Configures the IO_Expanders Functionalities * (Touch Screen ..) and configures all STM32100E-EVAL necessary * hardware (GPIOs, APB clocks ..). * @param None * @retval IOE_OK if all initializations done correctly. Other value if error. */ uint8_t IOE_Config(void) { IOE_StructInit(); IOE_Init(); /* Read IO Expander 1 ID */ if(IOE_IsOperational(IOE_1_ADDR)) { return IOE1_NOT_OPERATIONAL; } /* Generate IOExpander Software reset */ IOE_Reset(IOE_1_ADDR); /* ---------------------- IO Expander configuration --------------------- */ /* Enable the GPIO, Touch Screen and ADC functionalities */ IOE_FnctCmd(IOE_1_ADDR, IOE_ADC_FCT | IOE_IO_FCT , ENABLE); /* Touch Screen controller configuration */ IOE_TS_Config(); /* Temperature Sensor configuration */ IOE_TempSens_Config(); /* Configuration is OK */ return IOE_OK; }
/** * @brief Configures and enables the Temperature sensor module. * @param None * @retval IOE_OK if all initializations are OK. Other value if error. */ uint8_t IOE_TempSens_Config(void) { /* Enable Temperature Sensor Fct */ IOE_FnctCmd(IOE_1_ADDR, (IOE_TEMPSENS_FCT | IOE_ADC_FCT), ENABLE); /* Enable the TEMPSENS module */ I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_TEMP_CTRL, 0x01); /* Acquire data enable */ I2C_WriteDeviceRegister(IOE_1_ADDR, IOE_REG_TEMP_CTRL, 0x3); /* All configuration done */ return IOE_OK; }
/** * @brief Configures the touch Panel Controller (Single point detection) * @param None * @retval IOE_OK if all initializations are OK. Other value if error. */ uint8_t IOE_TP_Config(void) { /* Enable touch Panel functionality */ IOE_FnctCmd(IOE_TP_FCT, ENABLE); /* Select Sample Time, bit number and ADC Reference */ I2C_WriteDeviceRegister(IOE_REG_ADC_CTRL1, 0x49); /* Wait for ~20 ms */ _delay_(2); /* Select the ADC clock speed: 3.25 MHz */ I2C_WriteDeviceRegister(IOE_REG_ADC_CTRL2, 0x01); /* Select TSC pins in non default mode */ IOE_IOAFConfig((uint8_t)TOUCH_IO_ALL, DISABLE); /* Select 2 nF filter capacitor */ I2C_WriteDeviceRegister(IOE_REG_TP_CFG, 0x9A); /* Select single point reading */ I2C_WriteDeviceRegister(IOE_REG_FIFO_TH, 0x01); /* Write 0x01 to clear the FIFO memory content. */ I2C_WriteDeviceRegister(IOE_REG_FIFO_STA, 0x01); /* Write 0x00 to put the FIFO back into operation mode */ I2C_WriteDeviceRegister(IOE_REG_FIFO_STA, 0x00); /* set the data format for Z value: 7 fractional part and 1 whole part */ I2C_WriteDeviceRegister(IOE_REG_TP_FRACT_XYZ, 0x01); /* set the driving capability of the device for TSC pins: 50mA */ I2C_WriteDeviceRegister(IOE_REG_TP_I_DRIVE, 0x01); /* Use no tracking index, touch-panel controller operation mode (XYZ) and enable the TSC */ I2C_WriteDeviceRegister(IOE_REG_TP_CTRL, 0x03); /* Clear all the status pending bits */ I2C_WriteDeviceRegister(IOE_REG_INT_STA, 0xFF); /* Initialize the TS structure to their default values */ TP_State.TouchDetected = TP_State.X = TP_State.Y = TP_State.Z = 0; /* All configuration done */ return IOE_OK; }
/** * @brief Initializes the IO Expander registers. * @param None * @retval - 0: if all initializations are OK. */ uint32_t GL_TSC_Interface_Init(void) { #if TOUCH_SCREEN_CAPABILITY /* Configure the needed pins */ TSC_GPIO_Configuration(); /* Read IO Expander 1 ID */ if(IOE_IsOperational(pTscHwParam.TSC_DeviceRegister)) { return 1; } /* Generate IOExpander Software reset */ IOE_Reset(pTscHwParam.TSC_DeviceRegister); /* Disable all the Functionnalities */ IOE_FnctCmd(pTscHwParam.TSC_DeviceRegister, IOE_IO_FCT | IOE_TEMPSENS_FCT | IOE_TS_FCT | IOE_ADC_FCT, DISABLE); #endif return 0; /* Configuration is OK */ }
/** * @brief Initializes and Configures the two IO_Expanders Functionalities * (IOs, Touch Screen ..) and configures all STM3210C-EVAL necessary * hardware (GPIOs, APB clocks ..). * @param None * @retval IOE_OK if all initializations done correctly. Other value if error. */ uint8_t IOE_Config(void) { /* Configure the needed pins */ IOE_GPIO_Config(); /* Configure the I2C peripheral */ IOE_I2C_Config(); /* Read IO Expander 1 ID */ if(IOE_IsOperational(IOE_1_ADDR)) { return IOE1_NOT_OPERATIONAL; } if(IOE_IsOperational(IOE_2_ADDR)) { return IOE2_NOT_OPERATIONAL; } /* Generate IOExpander Software reset */ IOE_Reset(IOE_1_ADDR); IOE_Reset(IOE_2_ADDR); /* ---------------------- IO Expander 1 configuration --------------------- */ /* Enable the GPIO, Touch Screen and ADC functionalities */ IOE_FnctCmd(IOE_1_ADDR, IOE_IO_FCT | IOE_TS_FCT | IOE_ADC_FCT, ENABLE); /* Configure the VBAT pin in output mode pin*/ IOE_IOPinConfig(IOE_1_ADDR, VBAT_DIV_PIN , Direction_OUT); /* ENABLE the alternate function for IN1 pin */ IOE_IOAFConfig(IOE_1_ADDR, VBAT_DIV_PIN, ENABLE); /* Apply the default state for the out pins */ IOE_WriteIOPin(VBAT_DIV_PIN, BitReset); /* Configure the MEMS interrupt pins in Input mode */ IOE_IOPinConfig(IOE_2_ADDR, (uint32_t)(MEMS_INT1_PIN | MEMS_INT2_PIN), Direction_IN); /* ENABLE the alternate function for the Joystick pins */ IOE_IOAFConfig(IOE_2_ADDR, (uint32_t)(MEMS_INT1_PIN | MEMS_INT2_PIN), ENABLE); /* Configure the IOs to detect Falling and Rising Edges */ IOE_IOEdgeConfig(IOE_2_ADDR, (uint32_t)(MEMS_INT1_PIN | MEMS_INT2_PIN), (uint32_t)(EDGE_FALLING | EDGE_RISING)); /* Touch Screen controller configuration */ IOE_TS_Config(); /* ------------------------------------------------------------------------ */ /* ---------------------- IO Expander 2 configuration --------------------- */ /* Enable the GPIO, Temperature Sensor and ADC functionalities */ IOE_FnctCmd(IOE_2_ADDR, IOE_IO_FCT | IOE_TEMPSENS_FCT | IOE_ADC_FCT, ENABLE); /* Configure the Audio Codec Reset pin in output mode pin*/ IOE_IOPinConfig(IOE_2_ADDR, (uint32_t)(AUDIO_RESET_PIN), Direction_OUT); IOE_IOPinConfig(IOE_2_ADDR, (uint32_t)(MII_INT_PIN), Direction_IN); /* ENABLE the alternate function for IN1 pin */ IOE_IOAFConfig(IOE_2_ADDR, (uint32_t)(AUDIO_RESET_PIN | MII_INT_PIN), ENABLE); /* Apply the default state for the out pins */ IOE_WriteIOPin(AUDIO_RESET_PIN, BitReset); IOE_WriteIOPin(MII_INT_PIN, BitReset); /* Configure the Joystick pins in Input mode */ IOE_IOPinConfig(IOE_2_ADDR, JOY_IO_PINS , Direction_IN); /* ENABLE the alternate function for the Joystick pins */ IOE_IOAFConfig(IOE_2_ADDR, JOY_IO_PINS, ENABLE); /* Configure the IOs to detect Falling and Rising Edges */ IOE_IOEdgeConfig(IOE_2_ADDR, JOY_IO_PINS, (uint8_t)(EDGE_FALLING | EDGE_RISING)); /* Temperature Sensor module configuration */ IOE_TempSens_Config(); /* ------------------------------------------------------------------------ */ /* Configuration is OK */ return IOE_OK; }