TLV320_RBSP class, defined on the I2C master bus.

Dependents:   MovPlayer GR-PEACH_Audio_Playback_Sample GR-PEACH_Audio_Playback_7InchLCD_Sample RGA-MJPEG_VideoDemo ... more

Fork of TLV320_RBSP by Daiki Kato

Committer:
dkato
Date:
Wed Oct 21 06:58:35 2015 +0000
Revision:
4:15487e571d9f
Parent:
3:db6504d3f914
Add API "micVolume()".

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkato 0:bb69b79a1e05 1 /*******************************************************************************
dkato 0:bb69b79a1e05 2 * DISCLAIMER
dkato 0:bb69b79a1e05 3 * This software is supplied by Renesas Electronics Corporation and is only
dkato 0:bb69b79a1e05 4 * intended for use with Renesas products. No other uses are authorized. This
dkato 0:bb69b79a1e05 5 * software is owned by Renesas Electronics Corporation and is protected under
dkato 0:bb69b79a1e05 6 * all applicable laws, including copyright laws.
dkato 0:bb69b79a1e05 7 * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING
dkato 0:bb69b79a1e05 8 * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT
dkato 0:bb69b79a1e05 9 * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
dkato 0:bb69b79a1e05 10 * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.
dkato 0:bb69b79a1e05 11 * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS
dkato 0:bb69b79a1e05 12 * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE
dkato 0:bb69b79a1e05 13 * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR
dkato 0:bb69b79a1e05 14 * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE
dkato 0:bb69b79a1e05 15 * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
dkato 0:bb69b79a1e05 16 * Renesas reserves the right, without notice, to make changes to this software
dkato 0:bb69b79a1e05 17 * and to discontinue the availability of this software. By using this software,
dkato 0:bb69b79a1e05 18 * you agree to the additional terms and conditions found by accessing the
dkato 0:bb69b79a1e05 19 * following link:
dkato 0:bb69b79a1e05 20 * http://www.renesas.com/disclaimer*
dkato 0:bb69b79a1e05 21 * Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.
dkato 0:bb69b79a1e05 22 *******************************************************************************/
dkato 0:bb69b79a1e05 23
dkato 0:bb69b79a1e05 24 #ifndef MBED_TLV320_RBSP_H
dkato 0:bb69b79a1e05 25 #define MBED_TLV320_RBSP_H
dkato 0:bb69b79a1e05 26
dkato 0:bb69b79a1e05 27 #include "mbed.h"
dkato 0:bb69b79a1e05 28 #include "R_BSP_Ssif.h"
dkato 0:bb69b79a1e05 29
dkato 0:bb69b79a1e05 30 /** TLV320_RBSP class, defined on the I2C master bus
dkato 0:bb69b79a1e05 31 *
dkato 0:bb69b79a1e05 32 */
dkato 0:bb69b79a1e05 33 class TLV320_RBSP {
dkato 0:bb69b79a1e05 34 public:
dkato 0:bb69b79a1e05 35
dkato 0:bb69b79a1e05 36 /** Create a TLV320_RBSP object defined on the I2C port
dkato 0:bb69b79a1e05 37 *
dkato 0:bb69b79a1e05 38 * @param cs Control port input latch/address select (codec pin)
dkato 0:bb69b79a1e05 39 * @param sda I2C data line pin
dkato 0:bb69b79a1e05 40 * @param scl I2C clock line pin
dkato 0:bb69b79a1e05 41 * @param sck SSIF serial bit clock
dkato 0:bb69b79a1e05 42 * @param ws SSIF word selection
dkato 0:bb69b79a1e05 43 * @param tx SSIF serial data output
dkato 0:bb69b79a1e05 44 * @param rx SSIF serial data input
dkato 0:bb69b79a1e05 45 * @param int_level Interupt priority (SSIF)
dkato 0:bb69b79a1e05 46 * @param max_write_num The upper limit of write buffer (SSIF)
dkato 0:bb69b79a1e05 47 * @param max_read_num The upper limit of read buffer (SSIF)
dkato 0:bb69b79a1e05 48 */
dkato 2:b1fab4a2b59d 49 TLV320_RBSP(PinName cs, PinName sda, PinName scl, PinName sck, PinName ws, PinName tx, PinName rx, uint8_t int_level = 0x80, int32_t max_write_num = 16, int32_t max_read_num = 16);
dkato 0:bb69b79a1e05 50
dkato 0:bb69b79a1e05 51 /** Overloaded power() function default = 0x80, record requires 0x02
dkato 0:bb69b79a1e05 52 *
dkato 0:bb69b79a1e05 53 * @param device Call individual devices to power up/down
dkato 0:bb69b79a1e05 54 * Device power 0x00 = On 0x80 = Off
dkato 0:bb69b79a1e05 55 * Clock 0x00 = On 0x40 = Off
dkato 0:bb69b79a1e05 56 * Oscillator 0x00 = On 0x20 = Off
dkato 0:bb69b79a1e05 57 * Outputs 0x00 = On 0x10 = Off
dkato 0:bb69b79a1e05 58 * DAC 0x00 = On 0x08 = Off
dkato 0:bb69b79a1e05 59 * ADC 0x00 = On 0x04 = Off
dkato 0:bb69b79a1e05 60 * Microphone input 0x00 = On 0x02 = Off
dkato 0:bb69b79a1e05 61 * Line input 0x00 = On 0x01 = Off
dkato 0:bb69b79a1e05 62 */
dkato 0:bb69b79a1e05 63 void power(int device = 0x07);
dkato 0:bb69b79a1e05 64
dkato 0:bb69b79a1e05 65 /** Set I2S interface bit length and mode
dkato 0:bb69b79a1e05 66 *
dkato 0:bb69b79a1e05 67 * @param length Set bit length to 16, 20, 24 or 32 bits
dkato 2:b1fab4a2b59d 68 * @return true = success, false = failure
dkato 0:bb69b79a1e05 69 */
dkato 2:b1fab4a2b59d 70 bool format(char length);
dkato 0:bb69b79a1e05 71
dkato 0:bb69b79a1e05 72 /** Set sample frequency
dkato 0:bb69b79a1e05 73 *
dkato 0:bb69b79a1e05 74 * @param frequency Sample frequency of data in Hz
dkato 0:bb69b79a1e05 75 * @return true = success, false = failure
dkato 0:bb69b79a1e05 76 *
dkato 3:db6504d3f914 77 * The TLV320 supports the following frequencies: 8kHz, 8.021kHz, 32kHz, 44.1kHz, 48kHz, 88.2kHz, 96kHz
dkato 0:bb69b79a1e05 78 * Default is 44.1kHz
dkato 0:bb69b79a1e05 79 */
dkato 0:bb69b79a1e05 80 bool frequency(int hz);
dkato 0:bb69b79a1e05 81
dkato 0:bb69b79a1e05 82 /** Reset TLV320
dkato 0:bb69b79a1e05 83 *
dkato 0:bb69b79a1e05 84 */
dkato 0:bb69b79a1e05 85 void reset(void);
dkato 0:bb69b79a1e05 86
dkato 2:b1fab4a2b59d 87 /** Get a value of SSIF channel number
dkato 2:b1fab4a2b59d 88 *
dkato 2:b1fab4a2b59d 89 * @return SSIF channel number
dkato 2:b1fab4a2b59d 90 */
dkato 2:b1fab4a2b59d 91 int32_t GetSsifChNo(void) {
dkato 2:b1fab4a2b59d 92 return mI2s_.GetSsifChNo();
dkato 2:b1fab4a2b59d 93 };
dkato 2:b1fab4a2b59d 94
dkato 0:bb69b79a1e05 95 /** Enqueue asynchronous write request
dkato 0:bb69b79a1e05 96 *
dkato 0:bb69b79a1e05 97 * @param p_data Location of the data
dkato 0:bb69b79a1e05 98 * @param data_size Number of bytes to write
dkato 0:bb69b79a1e05 99 * @param p_data_conf Asynchronous control block structure
dkato 0:bb69b79a1e05 100 * @return Number of bytes written on success. negative number on error.
dkato 0:bb69b79a1e05 101 */
dkato 0:bb69b79a1e05 102 int write(void * const p_data, uint32_t data_size, const rbsp_data_conf_t * const p_data_conf = NULL) {
dkato 0:bb69b79a1e05 103 return mI2s_.write(p_data, data_size, p_data_conf);
dkato 0:bb69b79a1e05 104 };
dkato 0:bb69b79a1e05 105
dkato 0:bb69b79a1e05 106 /** Enqueue asynchronous read request
dkato 0:bb69b79a1e05 107 *
dkato 0:bb69b79a1e05 108 * @param p_data Location of the data
dkato 0:bb69b79a1e05 109 * @param data_size Number of bytes to read
dkato 0:bb69b79a1e05 110 * @param p_data_conf Asynchronous control block structure
dkato 0:bb69b79a1e05 111 * @return Number of bytes read on success. negative number on error.
dkato 0:bb69b79a1e05 112 */
dkato 0:bb69b79a1e05 113 int read(void * const p_data, uint32_t data_size, const rbsp_data_conf_t * const p_data_conf = NULL) {
dkato 0:bb69b79a1e05 114 return mI2s_.read(p_data, data_size, p_data_conf);
dkato 0:bb69b79a1e05 115 };
dkato 0:bb69b79a1e05 116
dkato 0:bb69b79a1e05 117 /** Line in volume control i.e. record volume
dkato 0:bb69b79a1e05 118 *
dkato 0:bb69b79a1e05 119 * @param leftVolumeIn Left line-in volume
dkato 0:bb69b79a1e05 120 * @param rightVolumeIn Right line-in volume
dkato 0:bb69b79a1e05 121 * @return Returns "true" for success, "false" if parameters are out of range
dkato 0:bb69b79a1e05 122 * Parameters accept a value, where 0.0 < parameter < 1.0 and where 0.0 maps to -34.5dB
dkato 0:bb69b79a1e05 123 * and 1.0 maps to +12dB (0.74 = 0 dB default).
dkato 0:bb69b79a1e05 124 */
dkato 0:bb69b79a1e05 125 bool inputVolume(float leftVolumeIn, float rightVolumeIn);
dkato 0:bb69b79a1e05 126
dkato 0:bb69b79a1e05 127 /** Headphone out volume control
dkato 0:bb69b79a1e05 128 *
dkato 0:bb69b79a1e05 129 * @param leftVolumeOut Left headphone-out volume
dkato 0:bb69b79a1e05 130 * @param rightVolumeOut Right headphone-out volume
dkato 0:bb69b79a1e05 131 * @return Returns "true" for success, "false" if parameters are out of range
dkato 0:bb69b79a1e05 132 * Parameters accept a value, where 0.0 < parameter < 1.0 and where 0.0 maps to -73dB (mute)
dkato 0:bb69b79a1e05 133 * and 1.0 maps to +6dB (0.5 = default)
dkato 0:bb69b79a1e05 134 */
dkato 0:bb69b79a1e05 135 bool outputVolume(float leftVolumeOut, float rightVolumeOut);
dkato 0:bb69b79a1e05 136
dkato 0:bb69b79a1e05 137 /** Analog audio path control (Bypass) function default = false
dkato 0:bb69b79a1e05 138 *
dkato 0:bb69b79a1e05 139 * @param bypassVar Route analogue audio direct from line in to headphone out
dkato 0:bb69b79a1e05 140 */
dkato 0:bb69b79a1e05 141 void bypass(bool bypassVar);
dkato 0:bb69b79a1e05 142
dkato 0:bb69b79a1e05 143 /** Analog audio path control (Input select for ADC) function default = false
dkato 0:bb69b79a1e05 144 *
dkato 0:bb69b79a1e05 145 * @param micVar Input select for ADC. true : Microphone , false : Line
dkato 0:bb69b79a1e05 146 */
dkato 0:bb69b79a1e05 147 void mic(bool micVar);
dkato 0:bb69b79a1e05 148
dkato 4:15487e571d9f 149 /** Microphone volume
dkato 4:15487e571d9f 150 *
dkato 4:15487e571d9f 151 * @param mute Microphone mute. true : mute , false : normal
dkato 4:15487e571d9f 152 * @param boost Microphone boost. true : 20dB , false : 0dB
dkato 4:15487e571d9f 153 */
dkato 4:15487e571d9f 154 void micVolume(bool mute, bool boost = false);
dkato 4:15487e571d9f 155
dkato 0:bb69b79a1e05 156 /** Digital audio path control
dkato 0:bb69b79a1e05 157 *
dkato 0:bb69b79a1e05 158 * @param softMute Mute output
dkato 0:bb69b79a1e05 159 */
dkato 0:bb69b79a1e05 160 void mute(bool softMute);
dkato 0:bb69b79a1e05 161
dkato 0:bb69b79a1e05 162 protected:
dkato 0:bb69b79a1e05 163 char cmd[2]; // the address and command for TLV320 internal registers
dkato 0:bb69b79a1e05 164 int mAddr; // register write address
dkato 0:bb69b79a1e05 165 private:
dkato 0:bb69b79a1e05 166 DigitalOut audio_cs_;
dkato 0:bb69b79a1e05 167 I2C mI2c_; // MUST use the I2C port
dkato 1:4b34a496efac 168 R_BSP_Ssif mI2s_;
dkato 0:bb69b79a1e05 169 ssif_channel_cfg_t ssif_cfg;
dkato 0:bb69b79a1e05 170 char audio_path_control;
dkato 0:bb69b79a1e05 171 /** Digital interface activation
dkato 0:bb69b79a1e05 172 *
dkato 0:bb69b79a1e05 173 */
dkato 0:bb69b79a1e05 174 void activateDigitalInterface_(void);
dkato 0:bb69b79a1e05 175
dkato 0:bb69b79a1e05 176 // TLV320AIC23B register addresses as defined in the TLV320AIC23B datasheet
dkato 0:bb69b79a1e05 177 #define LEFT_LINE_INPUT_CHANNEL_VOLUME_CONTROL (0x00 << 1)
dkato 0:bb69b79a1e05 178 #define RIGHT_LINE_INPUT_CHANNEL_VOLUME_CONTROL (0x01 << 1)
dkato 0:bb69b79a1e05 179 #define LEFT_CHANNEL_HEADPHONE_VOLUME_CONTROL (0x02 << 1)
dkato 0:bb69b79a1e05 180 #define RIGHT_CHANNEL_HEADPHONE_VOLUME_CONTROL (0x03 << 1)
dkato 0:bb69b79a1e05 181 #define ANALOG_AUDIO_PATH_CONTROL (0x04 << 1)
dkato 0:bb69b79a1e05 182 #define DIGITAL_AUDIO_PATH_CONTROL (0x05 << 1)
dkato 0:bb69b79a1e05 183 #define POWER_DOWN_CONTROL (0x06 << 1)
dkato 0:bb69b79a1e05 184 #define DIGITAL_AUDIO_INTERFACE_FORMAT (0x07 << 1)
dkato 0:bb69b79a1e05 185 #define SAMPLE_RATE_CONTROL (0x08 << 1)
dkato 0:bb69b79a1e05 186 #define DIGITAL_INTERFACE_ACTIVATION (0x09 << 1)
dkato 0:bb69b79a1e05 187 #define RESET_REGISTER (0x0F << 1)
dkato 0:bb69b79a1e05 188 };
dkato 0:bb69b79a1e05 189
dkato 0:bb69b79a1e05 190 #endif