ST / BSP_DISCO_F769NI

Dependents:   mbed-os-example-blinky-5 DISCO-F769NI_TOUCHSCREEN_demo_custom_1 Datarecorder2 DISCO-F769NI_TOUCHSCREEN_demo ... more

Committer:
Jerome Coutant
Date:
Fri Feb 10 13:08:21 2017 +0100
Revision:
0:c0f3bbab73d2
Child:
1:3e58f8a39705
STM32Cube_FW_F7_V1.5.1 BSP STM32F769I-Discovery

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jerome Coutant 0:c0f3bbab73d2 1 /**
Jerome Coutant 0:c0f3bbab73d2 2 ******************************************************************************
Jerome Coutant 0:c0f3bbab73d2 3 * @file adv7533.c
Jerome Coutant 0:c0f3bbab73d2 4 * @author MCD Application Team
Jerome Coutant 0:c0f3bbab73d2 5 * @version V1.0.0
Jerome Coutant 0:c0f3bbab73d2 6 * @date 26-August-2016
Jerome Coutant 0:c0f3bbab73d2 7 * @brief This file provides the ADV7533 DSI to HDMI bridge driver
Jerome Coutant 0:c0f3bbab73d2 8 ******************************************************************************
Jerome Coutant 0:c0f3bbab73d2 9 * @attention
Jerome Coutant 0:c0f3bbab73d2 10 *
Jerome Coutant 0:c0f3bbab73d2 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
Jerome Coutant 0:c0f3bbab73d2 12 *
Jerome Coutant 0:c0f3bbab73d2 13 * Redistribution and use in source and binary forms, with or without modification,
Jerome Coutant 0:c0f3bbab73d2 14 * are permitted provided that the following conditions are met:
Jerome Coutant 0:c0f3bbab73d2 15 * 1. Redistributions of source code must retain the above copyright notice,
Jerome Coutant 0:c0f3bbab73d2 16 * this list of conditions and the following disclaimer.
Jerome Coutant 0:c0f3bbab73d2 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
Jerome Coutant 0:c0f3bbab73d2 18 * this list of conditions and the following disclaimer in the documentation
Jerome Coutant 0:c0f3bbab73d2 19 * and/or other materials provided with the distribution.
Jerome Coutant 0:c0f3bbab73d2 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
Jerome Coutant 0:c0f3bbab73d2 21 * may be used to endorse or promote products derived from this software
Jerome Coutant 0:c0f3bbab73d2 22 * without specific prior written permission.
Jerome Coutant 0:c0f3bbab73d2 23 *
Jerome Coutant 0:c0f3bbab73d2 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Jerome Coutant 0:c0f3bbab73d2 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Jerome Coutant 0:c0f3bbab73d2 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Jerome Coutant 0:c0f3bbab73d2 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Jerome Coutant 0:c0f3bbab73d2 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Jerome Coutant 0:c0f3bbab73d2 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Jerome Coutant 0:c0f3bbab73d2 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Jerome Coutant 0:c0f3bbab73d2 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Jerome Coutant 0:c0f3bbab73d2 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Jerome Coutant 0:c0f3bbab73d2 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Jerome Coutant 0:c0f3bbab73d2 34 *
Jerome Coutant 0:c0f3bbab73d2 35 ******************************************************************************
Jerome Coutant 0:c0f3bbab73d2 36 */
Jerome Coutant 0:c0f3bbab73d2 37
Jerome Coutant 0:c0f3bbab73d2 38 /* Includes ------------------------------------------------------------------*/
Jerome Coutant 0:c0f3bbab73d2 39 #include "adv7533.h"
Jerome Coutant 0:c0f3bbab73d2 40
Jerome Coutant 0:c0f3bbab73d2 41 /** @addtogroup BSP
Jerome Coutant 0:c0f3bbab73d2 42 * @{
Jerome Coutant 0:c0f3bbab73d2 43 */
Jerome Coutant 0:c0f3bbab73d2 44
Jerome Coutant 0:c0f3bbab73d2 45 /** @addtogroup Components
Jerome Coutant 0:c0f3bbab73d2 46 * @{
Jerome Coutant 0:c0f3bbab73d2 47 */
Jerome Coutant 0:c0f3bbab73d2 48
Jerome Coutant 0:c0f3bbab73d2 49 /** @defgroup ADV7533 ADV7533
Jerome Coutant 0:c0f3bbab73d2 50 * @brief This file provides a set of functions needed to drive the
Jerome Coutant 0:c0f3bbab73d2 51 * adv7533 DSI-HDMI bridge.
Jerome Coutant 0:c0f3bbab73d2 52 * @{
Jerome Coutant 0:c0f3bbab73d2 53 */
Jerome Coutant 0:c0f3bbab73d2 54
Jerome Coutant 0:c0f3bbab73d2 55 /* Private types -------------------------------------------------------------*/
Jerome Coutant 0:c0f3bbab73d2 56 /* Private variables ---------------------------------------------------------*/
Jerome Coutant 0:c0f3bbab73d2 57 /* Private constants ---------------------------------------------------------*/
Jerome Coutant 0:c0f3bbab73d2 58 /** @defgroup ADV7533_Private_Constants ADV7533 Private Constants
Jerome Coutant 0:c0f3bbab73d2 59 * @{
Jerome Coutant 0:c0f3bbab73d2 60 */
Jerome Coutant 0:c0f3bbab73d2 61
Jerome Coutant 0:c0f3bbab73d2 62 /**
Jerome Coutant 0:c0f3bbab73d2 63 * @}
Jerome Coutant 0:c0f3bbab73d2 64 */
Jerome Coutant 0:c0f3bbab73d2 65
Jerome Coutant 0:c0f3bbab73d2 66 /* Private macros ------------------------------------------------------------*/
Jerome Coutant 0:c0f3bbab73d2 67 /* Private functions ---------------------------------------------------------*/
Jerome Coutant 0:c0f3bbab73d2 68 /** @defgroup ADV7533_Exported_Variables
Jerome Coutant 0:c0f3bbab73d2 69 * @{
Jerome Coutant 0:c0f3bbab73d2 70 */
Jerome Coutant 0:c0f3bbab73d2 71
Jerome Coutant 0:c0f3bbab73d2 72 AUDIO_DrvTypeDef adv7533_drv =
Jerome Coutant 0:c0f3bbab73d2 73 {
Jerome Coutant 0:c0f3bbab73d2 74 adv7533_AudioInit,
Jerome Coutant 0:c0f3bbab73d2 75 adv7533_DeInit,
Jerome Coutant 0:c0f3bbab73d2 76 adv7533_ReadID,
Jerome Coutant 0:c0f3bbab73d2 77
Jerome Coutant 0:c0f3bbab73d2 78 adv7533_Play,
Jerome Coutant 0:c0f3bbab73d2 79 adv7533_Pause,
Jerome Coutant 0:c0f3bbab73d2 80 adv7533_Resume,
Jerome Coutant 0:c0f3bbab73d2 81 adv7533_Stop,
Jerome Coutant 0:c0f3bbab73d2 82
Jerome Coutant 0:c0f3bbab73d2 83 adv7533_SetFrequency,
Jerome Coutant 0:c0f3bbab73d2 84 0, /* adv7533_SetVolume not supported */
Jerome Coutant 0:c0f3bbab73d2 85 adv7533_SetMute,
Jerome Coutant 0:c0f3bbab73d2 86 0, /* adv7533_SetOutputMode not supported */
Jerome Coutant 0:c0f3bbab73d2 87
Jerome Coutant 0:c0f3bbab73d2 88 0 /* adv7533_Reset not supported */
Jerome Coutant 0:c0f3bbab73d2 89 };
Jerome Coutant 0:c0f3bbab73d2 90
Jerome Coutant 0:c0f3bbab73d2 91 /**
Jerome Coutant 0:c0f3bbab73d2 92 * @}
Jerome Coutant 0:c0f3bbab73d2 93 */
Jerome Coutant 0:c0f3bbab73d2 94
Jerome Coutant 0:c0f3bbab73d2 95 /* Exported functions --------------------------------------------------------*/
Jerome Coutant 0:c0f3bbab73d2 96 /** @defgroup ADV7533_Exported_Functions ADV7533 Exported Functions
Jerome Coutant 0:c0f3bbab73d2 97 * @{
Jerome Coutant 0:c0f3bbab73d2 98 */
Jerome Coutant 0:c0f3bbab73d2 99
Jerome Coutant 0:c0f3bbab73d2 100 /**
Jerome Coutant 0:c0f3bbab73d2 101 * @brief Initializes the ADV7533 bridge.
Jerome Coutant 0:c0f3bbab73d2 102 * @param None
Jerome Coutant 0:c0f3bbab73d2 103 * @retval Status
Jerome Coutant 0:c0f3bbab73d2 104 */
Jerome Coutant 0:c0f3bbab73d2 105 uint8_t ADV7533_Init(void)
Jerome Coutant 0:c0f3bbab73d2 106 {
Jerome Coutant 0:c0f3bbab73d2 107 HDMI_IO_Init();
Jerome Coutant 0:c0f3bbab73d2 108
Jerome Coutant 0:c0f3bbab73d2 109 /* Configure the IC2 address for CEC_DSI interface */
Jerome Coutant 0:c0f3bbab73d2 110 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0xE1, ADV7533_CEC_DSI_I2C_ADDR);
Jerome Coutant 0:c0f3bbab73d2 111
Jerome Coutant 0:c0f3bbab73d2 112 return 0;
Jerome Coutant 0:c0f3bbab73d2 113 }
Jerome Coutant 0:c0f3bbab73d2 114
Jerome Coutant 0:c0f3bbab73d2 115 /**
Jerome Coutant 0:c0f3bbab73d2 116 * @brief Power on the ADV7533 bridge.
Jerome Coutant 0:c0f3bbab73d2 117 * @param None
Jerome Coutant 0:c0f3bbab73d2 118 * @retval None
Jerome Coutant 0:c0f3bbab73d2 119 */
Jerome Coutant 0:c0f3bbab73d2 120 void ADV7533_PowerOn(void)
Jerome Coutant 0:c0f3bbab73d2 121 {
Jerome Coutant 0:c0f3bbab73d2 122 uint8_t tmp;
Jerome Coutant 0:c0f3bbab73d2 123
Jerome Coutant 0:c0f3bbab73d2 124 /* Power on */
Jerome Coutant 0:c0f3bbab73d2 125 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0x41);
Jerome Coutant 0:c0f3bbab73d2 126 tmp &= ~0x40;
Jerome Coutant 0:c0f3bbab73d2 127 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0x41, tmp);
Jerome Coutant 0:c0f3bbab73d2 128 }
Jerome Coutant 0:c0f3bbab73d2 129
Jerome Coutant 0:c0f3bbab73d2 130 /**
Jerome Coutant 0:c0f3bbab73d2 131 * @brief Power off the ADV7533 bridge.
Jerome Coutant 0:c0f3bbab73d2 132 * @param None
Jerome Coutant 0:c0f3bbab73d2 133 * @retval None
Jerome Coutant 0:c0f3bbab73d2 134 */
Jerome Coutant 0:c0f3bbab73d2 135 void ADV7533_PowerDown(void)
Jerome Coutant 0:c0f3bbab73d2 136 {
Jerome Coutant 0:c0f3bbab73d2 137 uint8_t tmp;
Jerome Coutant 0:c0f3bbab73d2 138
Jerome Coutant 0:c0f3bbab73d2 139 /* Power down */
Jerome Coutant 0:c0f3bbab73d2 140 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0x41);
Jerome Coutant 0:c0f3bbab73d2 141 tmp |= 0x40;
Jerome Coutant 0:c0f3bbab73d2 142 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0x41, tmp);
Jerome Coutant 0:c0f3bbab73d2 143 }
Jerome Coutant 0:c0f3bbab73d2 144
Jerome Coutant 0:c0f3bbab73d2 145 /**
Jerome Coutant 0:c0f3bbab73d2 146 * @brief Configure the DSI-HDMI ADV7533 bridge for video.
Jerome Coutant 0:c0f3bbab73d2 147 * @param config : pointer to adv7533ConfigTypeDef that contains the
Jerome Coutant 0:c0f3bbab73d2 148 * video configuration parameters
Jerome Coutant 0:c0f3bbab73d2 149 * @retval None
Jerome Coutant 0:c0f3bbab73d2 150 */
Jerome Coutant 0:c0f3bbab73d2 151 void ADV7533_Configure(adv7533ConfigTypeDef * config)
Jerome Coutant 0:c0f3bbab73d2 152 {
Jerome Coutant 0:c0f3bbab73d2 153 uint8_t tmp;
Jerome Coutant 0:c0f3bbab73d2 154
Jerome Coutant 0:c0f3bbab73d2 155 /* Sequence from Section 3 - Quick Start Guide */
Jerome Coutant 0:c0f3bbab73d2 156
Jerome Coutant 0:c0f3bbab73d2 157 /* ADV7533 Power Settings */
Jerome Coutant 0:c0f3bbab73d2 158 /* Power down */
Jerome Coutant 0:c0f3bbab73d2 159 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0x41);
Jerome Coutant 0:c0f3bbab73d2 160 tmp &= ~0x40;
Jerome Coutant 0:c0f3bbab73d2 161 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0x41, tmp);
Jerome Coutant 0:c0f3bbab73d2 162 /* HPD Override */
Jerome Coutant 0:c0f3bbab73d2 163 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0xD6);
Jerome Coutant 0:c0f3bbab73d2 164 tmp |= 0x40;
Jerome Coutant 0:c0f3bbab73d2 165 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0xD6, tmp);
Jerome Coutant 0:c0f3bbab73d2 166 /* Gate DSI LP Oscillator and DSI Bias Clock Powerdown */
Jerome Coutant 0:c0f3bbab73d2 167 tmp = HDMI_IO_Read(ADV7533_CEC_DSI_I2C_ADDR, 0x03);
Jerome Coutant 0:c0f3bbab73d2 168 tmp &= ~0x02;
Jerome Coutant 0:c0f3bbab73d2 169 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x03, tmp);
Jerome Coutant 0:c0f3bbab73d2 170
Jerome Coutant 0:c0f3bbab73d2 171 /* Fixed registers that must be set on power-up */
Jerome Coutant 0:c0f3bbab73d2 172 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0x16);
Jerome Coutant 0:c0f3bbab73d2 173 tmp &= ~0x3E;
Jerome Coutant 0:c0f3bbab73d2 174 tmp |= 0x20;
Jerome Coutant 0:c0f3bbab73d2 175 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0x16, tmp);
Jerome Coutant 0:c0f3bbab73d2 176 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0x9A, 0xE0);
Jerome Coutant 0:c0f3bbab73d2 177 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0xBA);
Jerome Coutant 0:c0f3bbab73d2 178 tmp &= ~0xF8;
Jerome Coutant 0:c0f3bbab73d2 179 tmp |= 0x70;
Jerome Coutant 0:c0f3bbab73d2 180 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0xBA, tmp);
Jerome Coutant 0:c0f3bbab73d2 181 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0xDE, 0x82);
Jerome Coutant 0:c0f3bbab73d2 182
Jerome Coutant 0:c0f3bbab73d2 183 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0xE4);
Jerome Coutant 0:c0f3bbab73d2 184 tmp |= 0x40;
Jerome Coutant 0:c0f3bbab73d2 185 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0xE4, tmp);
Jerome Coutant 0:c0f3bbab73d2 186 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0xE5, 0x80);
Jerome Coutant 0:c0f3bbab73d2 187
Jerome Coutant 0:c0f3bbab73d2 188 tmp = HDMI_IO_Read(ADV7533_CEC_DSI_I2C_ADDR, 0x15);
Jerome Coutant 0:c0f3bbab73d2 189 tmp &= ~0x30;
Jerome Coutant 0:c0f3bbab73d2 190 tmp |= 0x10;
Jerome Coutant 0:c0f3bbab73d2 191 tmp = HDMI_IO_Read(ADV7533_CEC_DSI_I2C_ADDR, 0x17);
Jerome Coutant 0:c0f3bbab73d2 192 tmp &= ~0xF0;
Jerome Coutant 0:c0f3bbab73d2 193 tmp |= 0xD0;
Jerome Coutant 0:c0f3bbab73d2 194 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x17, tmp);
Jerome Coutant 0:c0f3bbab73d2 195 tmp = HDMI_IO_Read(ADV7533_CEC_DSI_I2C_ADDR, 0x24);
Jerome Coutant 0:c0f3bbab73d2 196 tmp &= ~0x10;
Jerome Coutant 0:c0f3bbab73d2 197 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x24, tmp);
Jerome Coutant 0:c0f3bbab73d2 198 tmp = HDMI_IO_Read(ADV7533_CEC_DSI_I2C_ADDR, 0x57);
Jerome Coutant 0:c0f3bbab73d2 199 tmp |= 0x01;
Jerome Coutant 0:c0f3bbab73d2 200 tmp |= 0x10;
Jerome Coutant 0:c0f3bbab73d2 201 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x57, tmp);
Jerome Coutant 0:c0f3bbab73d2 202
Jerome Coutant 0:c0f3bbab73d2 203 /* Configure the number of DSI lanes */
Jerome Coutant 0:c0f3bbab73d2 204 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x1C, (config->DSI_LANES << 4));
Jerome Coutant 0:c0f3bbab73d2 205
Jerome Coutant 0:c0f3bbab73d2 206 /* Setup video output mode */
Jerome Coutant 0:c0f3bbab73d2 207 /* Select HDMI mode */
Jerome Coutant 0:c0f3bbab73d2 208 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0xAF);
Jerome Coutant 0:c0f3bbab73d2 209 tmp |= 0x02;
Jerome Coutant 0:c0f3bbab73d2 210 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0xAF, tmp);
Jerome Coutant 0:c0f3bbab73d2 211 /* HDMI Output Enable */
Jerome Coutant 0:c0f3bbab73d2 212 tmp = HDMI_IO_Read(ADV7533_CEC_DSI_I2C_ADDR, 0x03);
Jerome Coutant 0:c0f3bbab73d2 213 tmp |= 0x80;
Jerome Coutant 0:c0f3bbab73d2 214 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x03, tmp);
Jerome Coutant 0:c0f3bbab73d2 215
Jerome Coutant 0:c0f3bbab73d2 216 /* GC packet enable */
Jerome Coutant 0:c0f3bbab73d2 217 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0x40);
Jerome Coutant 0:c0f3bbab73d2 218 tmp |= 0x80;
Jerome Coutant 0:c0f3bbab73d2 219 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0x40, tmp);
Jerome Coutant 0:c0f3bbab73d2 220 /* Input color depth 24-bit per pixel */
Jerome Coutant 0:c0f3bbab73d2 221 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0x4C);
Jerome Coutant 0:c0f3bbab73d2 222 tmp &= ~0x0F;
Jerome Coutant 0:c0f3bbab73d2 223 tmp |= 0x03;
Jerome Coutant 0:c0f3bbab73d2 224 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0x4C, tmp);
Jerome Coutant 0:c0f3bbab73d2 225 /* Down dither output color depth */
Jerome Coutant 0:c0f3bbab73d2 226 HDMI_IO_Write(ADV7533_MAIN_I2C_ADDR, 0x49, 0xfc);
Jerome Coutant 0:c0f3bbab73d2 227
Jerome Coutant 0:c0f3bbab73d2 228 /* Internal timing disabled */
Jerome Coutant 0:c0f3bbab73d2 229 tmp = HDMI_IO_Read(ADV7533_CEC_DSI_I2C_ADDR, 0x27);
Jerome Coutant 0:c0f3bbab73d2 230 tmp &= ~0x80;
Jerome Coutant 0:c0f3bbab73d2 231 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x27, tmp);
Jerome Coutant 0:c0f3bbab73d2 232 }
Jerome Coutant 0:c0f3bbab73d2 233
Jerome Coutant 0:c0f3bbab73d2 234 /**
Jerome Coutant 0:c0f3bbab73d2 235 * @brief Enable video pattern generation.
Jerome Coutant 0:c0f3bbab73d2 236 * @param None
Jerome Coutant 0:c0f3bbab73d2 237 * @retval None
Jerome Coutant 0:c0f3bbab73d2 238 */
Jerome Coutant 0:c0f3bbab73d2 239 void ADV7533_PatternEnable(void)
Jerome Coutant 0:c0f3bbab73d2 240 {
Jerome Coutant 0:c0f3bbab73d2 241 /* Timing generator enable */
Jerome Coutant 0:c0f3bbab73d2 242 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x55, 0x80); /* Color bar */
Jerome Coutant 0:c0f3bbab73d2 243 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x55, 0xA0); /* Color ramp */
Jerome Coutant 0:c0f3bbab73d2 244
Jerome Coutant 0:c0f3bbab73d2 245 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x03, 0x89);
Jerome Coutant 0:c0f3bbab73d2 246 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0xAF, 0x16);
Jerome Coutant 0:c0f3bbab73d2 247 }
Jerome Coutant 0:c0f3bbab73d2 248
Jerome Coutant 0:c0f3bbab73d2 249 /**
Jerome Coutant 0:c0f3bbab73d2 250 * @brief Disable video pattern generation.
Jerome Coutant 0:c0f3bbab73d2 251 * @param none
Jerome Coutant 0:c0f3bbab73d2 252 * @retval none
Jerome Coutant 0:c0f3bbab73d2 253 */
Jerome Coutant 0:c0f3bbab73d2 254 void ADV7533_PatternDisable(void)
Jerome Coutant 0:c0f3bbab73d2 255 {
Jerome Coutant 0:c0f3bbab73d2 256 /* Timing generator enable */
Jerome Coutant 0:c0f3bbab73d2 257 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x55, 0x00);
Jerome Coutant 0:c0f3bbab73d2 258 }
Jerome Coutant 0:c0f3bbab73d2 259
Jerome Coutant 0:c0f3bbab73d2 260 /**
Jerome Coutant 0:c0f3bbab73d2 261 * @brief Initializes the ADV7533 audio interface.
Jerome Coutant 0:c0f3bbab73d2 262 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 263 * @param OutputDevice: Not used (for compatiblity only).
Jerome Coutant 0:c0f3bbab73d2 264 * @param Volume: Not used (for compatiblity only).
Jerome Coutant 0:c0f3bbab73d2 265 * @param AudioFreq: Audio Frequency
Jerome Coutant 0:c0f3bbab73d2 266 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 267 */
Jerome Coutant 0:c0f3bbab73d2 268 uint32_t adv7533_AudioInit(uint16_t DeviceAddr, uint16_t OutputDevice, uint8_t Volume,uint32_t AudioFreq)
Jerome Coutant 0:c0f3bbab73d2 269 {
Jerome Coutant 0:c0f3bbab73d2 270 uint32_t val = 4096;
Jerome Coutant 0:c0f3bbab73d2 271 uint8_t tmp = 0;
Jerome Coutant 0:c0f3bbab73d2 272
Jerome Coutant 0:c0f3bbab73d2 273 /* Audio data enable*/
Jerome Coutant 0:c0f3bbab73d2 274 tmp = HDMI_IO_Read(ADV7533_CEC_DSI_I2C_ADDR, 0x05);
Jerome Coutant 0:c0f3bbab73d2 275 tmp &= ~0x20;
Jerome Coutant 0:c0f3bbab73d2 276 HDMI_IO_Write(ADV7533_CEC_DSI_I2C_ADDR, 0x05, tmp);
Jerome Coutant 0:c0f3bbab73d2 277
Jerome Coutant 0:c0f3bbab73d2 278 /* HDMI statup */
Jerome Coutant 0:c0f3bbab73d2 279 tmp= (uint8_t)((val & 0xF0000)>>16);
Jerome Coutant 0:c0f3bbab73d2 280 HDMI_IO_Write(DeviceAddr, 0x01, tmp);
Jerome Coutant 0:c0f3bbab73d2 281
Jerome Coutant 0:c0f3bbab73d2 282 tmp= (uint8_t)((val & 0xFF00)>>8);
Jerome Coutant 0:c0f3bbab73d2 283 HDMI_IO_Write(DeviceAddr, 0x02, tmp);
Jerome Coutant 0:c0f3bbab73d2 284
Jerome Coutant 0:c0f3bbab73d2 285 tmp= (uint8_t)((val & 0xFF));
Jerome Coutant 0:c0f3bbab73d2 286 HDMI_IO_Write(DeviceAddr, 0x03, tmp);
Jerome Coutant 0:c0f3bbab73d2 287
Jerome Coutant 0:c0f3bbab73d2 288 /* Enable spdif */
Jerome Coutant 0:c0f3bbab73d2 289 tmp = HDMI_IO_Read(DeviceAddr, 0x0B);
Jerome Coutant 0:c0f3bbab73d2 290 tmp |= 0x80;
Jerome Coutant 0:c0f3bbab73d2 291 HDMI_IO_Write(DeviceAddr, 0x0B, tmp);
Jerome Coutant 0:c0f3bbab73d2 292
Jerome Coutant 0:c0f3bbab73d2 293 /* Enable I2S */
Jerome Coutant 0:c0f3bbab73d2 294 tmp = HDMI_IO_Read(DeviceAddr, 0x0C);
Jerome Coutant 0:c0f3bbab73d2 295 tmp |=0x04;
Jerome Coutant 0:c0f3bbab73d2 296 HDMI_IO_Write(DeviceAddr, 0x0C, tmp);
Jerome Coutant 0:c0f3bbab73d2 297
Jerome Coutant 0:c0f3bbab73d2 298 /* Set audio sampling frequency */
Jerome Coutant 0:c0f3bbab73d2 299 adv7533_SetFrequency(DeviceAddr, AudioFreq);
Jerome Coutant 0:c0f3bbab73d2 300
Jerome Coutant 0:c0f3bbab73d2 301 /* Select SPDIF is 0x10 , I2S=0x00 */
Jerome Coutant 0:c0f3bbab73d2 302 tmp = HDMI_IO_Read(ADV7533_MAIN_I2C_ADDR, 0x0A);
Jerome Coutant 0:c0f3bbab73d2 303 tmp &=~ 0x10;
Jerome Coutant 0:c0f3bbab73d2 304 HDMI_IO_Write(DeviceAddr, 0x0A, tmp);
Jerome Coutant 0:c0f3bbab73d2 305
Jerome Coutant 0:c0f3bbab73d2 306 /* Set v1P2 enable */
Jerome Coutant 0:c0f3bbab73d2 307 tmp = HDMI_IO_Read(DeviceAddr, 0xE4);
Jerome Coutant 0:c0f3bbab73d2 308 tmp |= 0x80;
Jerome Coutant 0:c0f3bbab73d2 309 HDMI_IO_Write(DeviceAddr, 0xE4, tmp);
Jerome Coutant 0:c0f3bbab73d2 310
Jerome Coutant 0:c0f3bbab73d2 311 return 0;
Jerome Coutant 0:c0f3bbab73d2 312 }
Jerome Coutant 0:c0f3bbab73d2 313
Jerome Coutant 0:c0f3bbab73d2 314 /**
Jerome Coutant 0:c0f3bbab73d2 315 * @brief Deinitializes the adv7533
Jerome Coutant 0:c0f3bbab73d2 316 * @param None
Jerome Coutant 0:c0f3bbab73d2 317 * @retval None
Jerome Coutant 0:c0f3bbab73d2 318 */
Jerome Coutant 0:c0f3bbab73d2 319 void adv7533_DeInit(void)
Jerome Coutant 0:c0f3bbab73d2 320 {
Jerome Coutant 0:c0f3bbab73d2 321 /* Deinitialize Audio adv7533 interface */
Jerome Coutant 0:c0f3bbab73d2 322 AUDIO_IO_DeInit();
Jerome Coutant 0:c0f3bbab73d2 323 }
Jerome Coutant 0:c0f3bbab73d2 324
Jerome Coutant 0:c0f3bbab73d2 325 /**
Jerome Coutant 0:c0f3bbab73d2 326 * @brief Get the adv7533 ID.
Jerome Coutant 0:c0f3bbab73d2 327 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 328 * @retval The adv7533 ID
Jerome Coutant 0:c0f3bbab73d2 329 */
Jerome Coutant 0:c0f3bbab73d2 330 uint32_t adv7533_ReadID(uint16_t DeviceAddr)
Jerome Coutant 0:c0f3bbab73d2 331 {
Jerome Coutant 0:c0f3bbab73d2 332 uint32_t tmp = 0;
Jerome Coutant 0:c0f3bbab73d2 333
Jerome Coutant 0:c0f3bbab73d2 334 tmp = HDMI_IO_Read(DeviceAddr, ADV7533_CHIPID_ADDR0);
Jerome Coutant 0:c0f3bbab73d2 335 tmp = (tmp<<8);
Jerome Coutant 0:c0f3bbab73d2 336 tmp |= HDMI_IO_Read(DeviceAddr, ADV7533_CHIPID_ADDR1);
Jerome Coutant 0:c0f3bbab73d2 337
Jerome Coutant 0:c0f3bbab73d2 338 return(tmp);
Jerome Coutant 0:c0f3bbab73d2 339 }
Jerome Coutant 0:c0f3bbab73d2 340
Jerome Coutant 0:c0f3bbab73d2 341 /**
Jerome Coutant 0:c0f3bbab73d2 342 * @brief Pauses playing on the audio hdmi
Jerome Coutant 0:c0f3bbab73d2 343 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 344 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 345 */
Jerome Coutant 0:c0f3bbab73d2 346 uint32_t adv7533_Pause(uint16_t DeviceAddr)
Jerome Coutant 0:c0f3bbab73d2 347 {
Jerome Coutant 0:c0f3bbab73d2 348 return(adv7533_SetMute(DeviceAddr,AUDIO_MUTE_ON));
Jerome Coutant 0:c0f3bbab73d2 349 }
Jerome Coutant 0:c0f3bbab73d2 350
Jerome Coutant 0:c0f3bbab73d2 351 /**
Jerome Coutant 0:c0f3bbab73d2 352 * @brief Resumes playing on the audio hdmi.
Jerome Coutant 0:c0f3bbab73d2 353 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 354 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 355 */
Jerome Coutant 0:c0f3bbab73d2 356 uint32_t adv7533_Resume(uint16_t DeviceAddr)
Jerome Coutant 0:c0f3bbab73d2 357 {
Jerome Coutant 0:c0f3bbab73d2 358 return(adv7533_SetMute(DeviceAddr,AUDIO_MUTE_OFF));
Jerome Coutant 0:c0f3bbab73d2 359 }
Jerome Coutant 0:c0f3bbab73d2 360
Jerome Coutant 0:c0f3bbab73d2 361 /**
Jerome Coutant 0:c0f3bbab73d2 362 * @brief Start the audio hdmi play feature.
Jerome Coutant 0:c0f3bbab73d2 363 * @note For this codec no Play options are required.
Jerome Coutant 0:c0f3bbab73d2 364 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 365 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 366 */
Jerome Coutant 0:c0f3bbab73d2 367 uint32_t adv7533_Play(uint16_t DeviceAddr ,uint16_t* pBuffer ,uint16_t Size)
Jerome Coutant 0:c0f3bbab73d2 368 {
Jerome Coutant 0:c0f3bbab73d2 369 return(adv7533_SetMute(DeviceAddr,AUDIO_MUTE_OFF));
Jerome Coutant 0:c0f3bbab73d2 370 }
Jerome Coutant 0:c0f3bbab73d2 371
Jerome Coutant 0:c0f3bbab73d2 372 /**
Jerome Coutant 0:c0f3bbab73d2 373 * @brief Stop playing on the audio hdmi
Jerome Coutant 0:c0f3bbab73d2 374 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 375 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 376 */
Jerome Coutant 0:c0f3bbab73d2 377 uint32_t adv7533_Stop(uint16_t DeviceAddr,uint32_t cmd)
Jerome Coutant 0:c0f3bbab73d2 378 {
Jerome Coutant 0:c0f3bbab73d2 379 return(adv7533_SetMute(DeviceAddr,AUDIO_MUTE_ON));
Jerome Coutant 0:c0f3bbab73d2 380 }
Jerome Coutant 0:c0f3bbab73d2 381
Jerome Coutant 0:c0f3bbab73d2 382 /**
Jerome Coutant 0:c0f3bbab73d2 383 * @brief Enables or disables the mute feature on the audio hdmi.
Jerome Coutant 0:c0f3bbab73d2 384 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 385 * @param Cmd: AUDIO_MUTE_ON to enable the mute or AUDIO_MUTE_OFF to disable the
Jerome Coutant 0:c0f3bbab73d2 386 * mute mode.
Jerome Coutant 0:c0f3bbab73d2 387 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 388 */
Jerome Coutant 0:c0f3bbab73d2 389 uint32_t adv7533_SetMute(uint16_t DeviceAddr, uint32_t Cmd)
Jerome Coutant 0:c0f3bbab73d2 390 {
Jerome Coutant 0:c0f3bbab73d2 391 uint8_t tmp = 0;
Jerome Coutant 0:c0f3bbab73d2 392
Jerome Coutant 0:c0f3bbab73d2 393 tmp = HDMI_IO_Read(DeviceAddr, 0x0D);
Jerome Coutant 0:c0f3bbab73d2 394 if (Cmd == AUDIO_MUTE_ON)
Jerome Coutant 0:c0f3bbab73d2 395 {
Jerome Coutant 0:c0f3bbab73d2 396 /* enable audio mute*/
Jerome Coutant 0:c0f3bbab73d2 397 tmp |= 0x40;
Jerome Coutant 0:c0f3bbab73d2 398 HDMI_IO_Write(DeviceAddr, 0x0D, tmp);
Jerome Coutant 0:c0f3bbab73d2 399 }
Jerome Coutant 0:c0f3bbab73d2 400 else
Jerome Coutant 0:c0f3bbab73d2 401 {
Jerome Coutant 0:c0f3bbab73d2 402 /*audio mute off disable the mute */
Jerome Coutant 0:c0f3bbab73d2 403 tmp &= ~0x40;
Jerome Coutant 0:c0f3bbab73d2 404 HDMI_IO_Write(DeviceAddr, 0x0D, tmp);
Jerome Coutant 0:c0f3bbab73d2 405 }
Jerome Coutant 0:c0f3bbab73d2 406 return 0;
Jerome Coutant 0:c0f3bbab73d2 407 }
Jerome Coutant 0:c0f3bbab73d2 408
Jerome Coutant 0:c0f3bbab73d2 409 /**
Jerome Coutant 0:c0f3bbab73d2 410 * @brief Sets output mode.
Jerome Coutant 0:c0f3bbab73d2 411 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 412 * @param Output : hdmi output.
Jerome Coutant 0:c0f3bbab73d2 413 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 414 */
Jerome Coutant 0:c0f3bbab73d2 415 uint32_t adv7533_SetOutputMode(uint16_t DeviceAddr, uint8_t Output)
Jerome Coutant 0:c0f3bbab73d2 416 {
Jerome Coutant 0:c0f3bbab73d2 417 return 0;
Jerome Coutant 0:c0f3bbab73d2 418 }
Jerome Coutant 0:c0f3bbab73d2 419
Jerome Coutant 0:c0f3bbab73d2 420 /**
Jerome Coutant 0:c0f3bbab73d2 421 * @brief Sets volumee.
Jerome Coutant 0:c0f3bbab73d2 422 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 423 * @param Volume : volume value.
Jerome Coutant 0:c0f3bbab73d2 424 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 425 */
Jerome Coutant 0:c0f3bbab73d2 426 uint32_t adv7533_SetVolume(uint16_t DeviceAddr, uint8_t Volume)
Jerome Coutant 0:c0f3bbab73d2 427 {
Jerome Coutant 0:c0f3bbab73d2 428 return 0;
Jerome Coutant 0:c0f3bbab73d2 429 }
Jerome Coutant 0:c0f3bbab73d2 430
Jerome Coutant 0:c0f3bbab73d2 431 /**
Jerome Coutant 0:c0f3bbab73d2 432 * @brief Resets adv7533 registers.
Jerome Coutant 0:c0f3bbab73d2 433 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 434 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 435 */
Jerome Coutant 0:c0f3bbab73d2 436 uint32_t adv7533_Reset(uint16_t DeviceAddr)
Jerome Coutant 0:c0f3bbab73d2 437 {
Jerome Coutant 0:c0f3bbab73d2 438 return 0;
Jerome Coutant 0:c0f3bbab73d2 439 }
Jerome Coutant 0:c0f3bbab73d2 440
Jerome Coutant 0:c0f3bbab73d2 441 /**
Jerome Coutant 0:c0f3bbab73d2 442 * @brief Sets new frequency.
Jerome Coutant 0:c0f3bbab73d2 443 * @param DeviceAddr: Device address on communication Bus.
Jerome Coutant 0:c0f3bbab73d2 444 * @param AudioFreq: Audio frequency used to play the audio stream.
Jerome Coutant 0:c0f3bbab73d2 445 * @retval 0 if correct communication, else wrong communication
Jerome Coutant 0:c0f3bbab73d2 446 */
Jerome Coutant 0:c0f3bbab73d2 447 uint32_t adv7533_SetFrequency(uint16_t DeviceAddr, uint32_t AudioFreq)
Jerome Coutant 0:c0f3bbab73d2 448 {
Jerome Coutant 0:c0f3bbab73d2 449 uint8_t tmp = 0;
Jerome Coutant 0:c0f3bbab73d2 450
Jerome Coutant 0:c0f3bbab73d2 451 tmp = HDMI_IO_Read(DeviceAddr, 0x15);
Jerome Coutant 0:c0f3bbab73d2 452 tmp &= (~0xF0);
Jerome Coutant 0:c0f3bbab73d2 453 /* Clock Configurations */
Jerome Coutant 0:c0f3bbab73d2 454 switch (AudioFreq)
Jerome Coutant 0:c0f3bbab73d2 455 {
Jerome Coutant 0:c0f3bbab73d2 456 case AUDIO_FREQUENCY_32K:
Jerome Coutant 0:c0f3bbab73d2 457 /* Sampling Frequency =32 KHZ*/
Jerome Coutant 0:c0f3bbab73d2 458 tmp |= 0x30;
Jerome Coutant 0:c0f3bbab73d2 459 HDMI_IO_Write(DeviceAddr, 0x15, tmp);
Jerome Coutant 0:c0f3bbab73d2 460 break;
Jerome Coutant 0:c0f3bbab73d2 461 case AUDIO_FREQUENCY_44K:
Jerome Coutant 0:c0f3bbab73d2 462 /* Sampling Frequency =44,1 KHZ*/
Jerome Coutant 0:c0f3bbab73d2 463 tmp |= 0x00;
Jerome Coutant 0:c0f3bbab73d2 464 HDMI_IO_Write(DeviceAddr, 0x15, tmp);
Jerome Coutant 0:c0f3bbab73d2 465 break;
Jerome Coutant 0:c0f3bbab73d2 466
Jerome Coutant 0:c0f3bbab73d2 467 case AUDIO_FREQUENCY_48K:
Jerome Coutant 0:c0f3bbab73d2 468 /* Sampling Frequency =48KHZ*/
Jerome Coutant 0:c0f3bbab73d2 469 tmp |= 0x20;
Jerome Coutant 0:c0f3bbab73d2 470 HDMI_IO_Write(DeviceAddr, 0x15, tmp);
Jerome Coutant 0:c0f3bbab73d2 471 break;
Jerome Coutant 0:c0f3bbab73d2 472
Jerome Coutant 0:c0f3bbab73d2 473 case AUDIO_FREQUENCY_96K:
Jerome Coutant 0:c0f3bbab73d2 474 /* Sampling Frequency =96 KHZ*/
Jerome Coutant 0:c0f3bbab73d2 475 tmp |= 0xA0;
Jerome Coutant 0:c0f3bbab73d2 476 HDMI_IO_Write(DeviceAddr, 0x15, tmp);
Jerome Coutant 0:c0f3bbab73d2 477 break;
Jerome Coutant 0:c0f3bbab73d2 478
Jerome Coutant 0:c0f3bbab73d2 479 case AUDIO_FREQUENCY_88K:
Jerome Coutant 0:c0f3bbab73d2 480 /* Sampling Frequency =88,2 KHZ*/
Jerome Coutant 0:c0f3bbab73d2 481 tmp |= 0x80;
Jerome Coutant 0:c0f3bbab73d2 482 HDMI_IO_Write(DeviceAddr, 0x15, tmp);
Jerome Coutant 0:c0f3bbab73d2 483 break;
Jerome Coutant 0:c0f3bbab73d2 484
Jerome Coutant 0:c0f3bbab73d2 485 case AUDIO_FREQUENCY_176K:
Jerome Coutant 0:c0f3bbab73d2 486 /* Sampling Frequency =176,4 KHZ*/
Jerome Coutant 0:c0f3bbab73d2 487 tmp |= 0xC0;
Jerome Coutant 0:c0f3bbab73d2 488 HDMI_IO_Write(DeviceAddr, 0x15, tmp);
Jerome Coutant 0:c0f3bbab73d2 489 break;
Jerome Coutant 0:c0f3bbab73d2 490
Jerome Coutant 0:c0f3bbab73d2 491 case AUDIO_FREQUENCY_192K:
Jerome Coutant 0:c0f3bbab73d2 492 /* Sampling Frequency =192KHZ*/
Jerome Coutant 0:c0f3bbab73d2 493 tmp |= 0xE0;
Jerome Coutant 0:c0f3bbab73d2 494 HDMI_IO_Write(DeviceAddr, 0x15, tmp);
Jerome Coutant 0:c0f3bbab73d2 495 break;
Jerome Coutant 0:c0f3bbab73d2 496 }
Jerome Coutant 0:c0f3bbab73d2 497 return 0;
Jerome Coutant 0:c0f3bbab73d2 498 }
Jerome Coutant 0:c0f3bbab73d2 499
Jerome Coutant 0:c0f3bbab73d2 500 /**
Jerome Coutant 0:c0f3bbab73d2 501 * @}
Jerome Coutant 0:c0f3bbab73d2 502 */
Jerome Coutant 0:c0f3bbab73d2 503
Jerome Coutant 0:c0f3bbab73d2 504 /**
Jerome Coutant 0:c0f3bbab73d2 505 * @}
Jerome Coutant 0:c0f3bbab73d2 506 */
Jerome Coutant 0:c0f3bbab73d2 507
Jerome Coutant 0:c0f3bbab73d2 508 /**
Jerome Coutant 0:c0f3bbab73d2 509 * @}
Jerome Coutant 0:c0f3bbab73d2 510 */
Jerome Coutant 0:c0f3bbab73d2 511
Jerome Coutant 0:c0f3bbab73d2 512 /**
Jerome Coutant 0:c0f3bbab73d2 513 * @}
Jerome Coutant 0:c0f3bbab73d2 514 */
Jerome Coutant 0:c0f3bbab73d2 515
Jerome Coutant 0:c0f3bbab73d2 516 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/