static HAL_StatusTypeDef I2Cx_ReadMultiple()

in AZ3166/src/libraries/AudioV2/src/stm32412g_discovery.c [151:295]


static HAL_StatusTypeDef I2Cx_ReadMultiple( I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg,
                                            uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length );
static HAL_StatusTypeDef I2Cx_WriteMultiple( I2C_HandleTypeDef *i2c_handler, uint8_t Addr, uint16_t Reg,
                                             uint16_t MemAddSize, uint8_t *Buffer, uint16_t Length );
//static HAL_StatusTypeDef I2Cx_IsDeviceReady( I2C_HandleTypeDef *i2c_handler, uint16_t DevAddress, uint32_t Trials );
static void I2Cx_Error( I2C_HandleTypeDef *i2c_handler, uint8_t Addr );

static void FMC_BANK1_WriteData( uint16_t Data );
static void FMC_BANK1_WriteReg( uint8_t Reg );
static uint16_t FMC_BANK1_ReadData( void );
static void FMC_BANK1_Init( void );
static void FMC_BANK1_MspInit( void );

/* LCD IO functions */
void LCD_IO_Init( void );
void LCD_IO_WriteData( uint16_t RegValue );
void LCD_IO_WriteReg( uint8_t Reg );
void LCD_IO_WriteMultipleData( uint16_t *pData, uint32_t Size );
uint16_t LCD_IO_ReadData( void );
void LCD_IO_Delay( uint32_t Delay );

/* AUDIO IO functions */
void AUDIO_IO_Init( void );
void AUDIO_IO_DeInit( void );
void AUDIO_IO_Write( uint8_t Addr, uint16_t Reg, uint16_t Value );
uint16_t AUDIO_IO_Read( uint8_t Addr, uint16_t Reg );
void AUDIO_IO_Delay( uint32_t Delay );

/* I2C EEPROM IO function */
void EEPROM_IO_Init( void );
HAL_StatusTypeDef EEPROM_IO_WriteData( uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize );
HAL_StatusTypeDef EEPROM_IO_ReadData( uint16_t DevAddress, uint16_t MemAddress, uint8_t* pBuffer, uint32_t BufferSize );
HAL_StatusTypeDef EEPROM_IO_IsDeviceReady( uint16_t DevAddress, uint32_t Trials );

/* TouchScreen (TS) IO functions */
void TS_IO_Init( void );
void TS_IO_Write( uint8_t Addr, uint8_t Reg, uint8_t Value );
uint8_t TS_IO_Read( uint8_t Addr, uint8_t Reg );
uint16_t TS_IO_ReadMultiple( uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length );
void TS_IO_WriteMultiple( uint8_t Addr, uint8_t Reg, uint8_t *Buffer, uint16_t Length );
void TS_IO_Delay( uint32_t Delay );

/**
 * @}
 */

/** @defgroup STM32412G_DISCOVERY_LOW_LEVEL_Private_Functions STM32412G Discovery Low Level Private Functions
 * @{
 */

/*******************************************************************************
 BUS OPERATIONS
 *******************************************************************************/

/******************************* I2C Routines *********************************/
/**
 * @brief  Initializes I2C MSP.
 * @param  i2c_handler : I2C handler
 */
static void I2Cx_MspInit( I2C_HandleTypeDef *i2c_handler )
{
    GPIO_InitTypeDef gpio_init_structure;

    if ( i2c_handler == (I2C_HandleTypeDef*) (&hI2cAudioHandler) )
         {
        /* AUDIO I2C MSP init */

        /*** Configure the GPIOs ***/
        /* Enable GPIO clock */
        DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_CLK_ENABLE()
        ;

        /* Configure I2C Tx as alternate function */
        gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SCL_PIN;
        gpio_init_structure.Mode = GPIO_MODE_AF_OD;
        gpio_init_structure.Pull = GPIO_NOPULL;
        gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
        gpio_init_structure.Alternate = DISCOVERY_AUDIO_I2Cx_SCL_SDA_AF;
        HAL_GPIO_Init( DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure );

        /* Configure I2C Rx as alternate function */
        gpio_init_structure.Pin = DISCOVERY_AUDIO_I2Cx_SDA_PIN;
        HAL_GPIO_Init( DISCOVERY_AUDIO_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure );

        /*** Configure the I2C peripheral ***/
        /* Enable I2C clock */
        DISCOVERY_AUDIO_I2Cx_CLK_ENABLE()
        ;

        /* Force the I2C peripheral clock reset */
        DISCOVERY_AUDIO_I2Cx_FORCE_RESET();

        /* Release the I2C peripheral clock reset */
        DISCOVERY_AUDIO_I2Cx_RELEASE_RESET();

        /* Enable and set I2Cx Interrupt to a lower priority */
        HAL_NVIC_SetPriority( DISCOVERY_AUDIO_I2Cx_EV_IRQn, 0x0F, 0x00 );
        HAL_NVIC_EnableIRQ( DISCOVERY_AUDIO_I2Cx_EV_IRQn );

        /* Enable and set I2Cx Interrupt to a lower priority */
        HAL_NVIC_SetPriority( DISCOVERY_AUDIO_I2Cx_ER_IRQn, 0x0F, 0x00 );
        HAL_NVIC_EnableIRQ( DISCOVERY_AUDIO_I2Cx_ER_IRQn );
    }
    else
    {
        /* External and Arduino connector I2C MSP init */

        /*** Configure the GPIOs ***/
        /* Enable GPIO clock */
        DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_CLK_ENABLE()
        ;

        /* Configure I2C Tx as alternate function */
        gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SCL_PIN;
        gpio_init_structure.Mode = GPIO_MODE_AF_OD;
        gpio_init_structure.Pull = GPIO_NOPULL;
        gpio_init_structure.Speed = GPIO_SPEED_FREQ_HIGH;
        gpio_init_structure.Alternate = DISCOVERY_EXT_I2Cx_SCL_AF;
        HAL_GPIO_Init( DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure );

        /* Configure I2C Rx as alternate function */
        gpio_init_structure.Pin = DISCOVERY_EXT_I2Cx_SDA_PIN;
        gpio_init_structure.Alternate = DISCOVERY_EXT_I2Cx_SDA_AF;
        HAL_GPIO_Init( DISCOVERY_EXT_I2Cx_SCL_SDA_GPIO_PORT, &gpio_init_structure );

        /*** Configure the I2C peripheral ***/
        /* Enable I2C clock */
        DISCOVERY_EXT_I2Cx_CLK_ENABLE()
        ;

        /* Force the I2C peripheral clock reset */
        DISCOVERY_EXT_I2Cx_FORCE_RESET();

        /* Release the I2C peripheral clock reset */
        DISCOVERY_EXT_I2Cx_RELEASE_RESET();

        /* Enable and set I2Cx Interrupt to a lower priority */
        HAL_NVIC_SetPriority( DISCOVERY_EXT_I2Cx_EV_IRQn, 0x0F, 0x00 );
        HAL_NVIC_EnableIRQ( DISCOVERY_EXT_I2Cx_EV_IRQn );

        /* Enable and set I2Cx Interrupt to a lower priority */
        HAL_NVIC_SetPriority( DISCOVERY_EXT_I2Cx_ER_IRQn, 0x0F, 0x00 );
        HAL_NVIC_EnableIRQ( DISCOVERY_EXT_I2Cx_ER_IRQn );
    }
}