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:
Mon Jun 01 08:33:42 2015 +0000
Revision:
0:bb69b79a1e05
Child:
1:4b34a496efac
first commit

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 xout AUDIO_X1 clock output
dkato 0:bb69b79a1e05 39 * @param cs Control port input latch/address select (codec pin)
dkato 0:bb69b79a1e05 40 * @param sda I2C data line pin
dkato 0:bb69b79a1e05 41 * @param scl I2C clock line pin
dkato 0:bb69b79a1e05 42 * @param sck SSIF serial bit clock
dkato 0:bb69b79a1e05 43 * @param ws SSIF word selection
dkato 0:bb69b79a1e05 44 * @param tx SSIF serial data output
dkato 0:bb69b79a1e05 45 * @param rx SSIF serial data input
dkato 0:bb69b79a1e05 46 * @param int_level Interupt priority (SSIF)
dkato 0:bb69b79a1e05 47 * @param max_write_num The upper limit of write buffer (SSIF)
dkato 0:bb69b79a1e05 48 * @param max_read_num The upper limit of read buffer (SSIF)
dkato 0:bb69b79a1e05 49 */
dkato 0:bb69b79a1e05 50 TLV320_RBSP(PinName xout, 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 51
dkato 0:bb69b79a1e05 52 /** Overloaded power() function default = 0x80, record requires 0x02
dkato 0:bb69b79a1e05 53 *
dkato 0:bb69b79a1e05 54 * @param device Call individual devices to power up/down
dkato 0:bb69b79a1e05 55 * Device power 0x00 = On 0x80 = Off
dkato 0:bb69b79a1e05 56 * Clock 0x00 = On 0x40 = Off
dkato 0:bb69b79a1e05 57 * Oscillator 0x00 = On 0x20 = Off
dkato 0:bb69b79a1e05 58 * Outputs 0x00 = On 0x10 = Off
dkato 0:bb69b79a1e05 59 * DAC 0x00 = On 0x08 = Off
dkato 0:bb69b79a1e05 60 * ADC 0x00 = On 0x04 = Off
dkato 0:bb69b79a1e05 61 * Microphone input 0x00 = On 0x02 = Off
dkato 0:bb69b79a1e05 62 * Line input 0x00 = On 0x01 = Off
dkato 0:bb69b79a1e05 63 */
dkato 0:bb69b79a1e05 64 void power(int device = 0x07);
dkato 0:bb69b79a1e05 65
dkato 0:bb69b79a1e05 66 /** Set I2S interface bit length and mode
dkato 0:bb69b79a1e05 67 *
dkato 0:bb69b79a1e05 68 * @param length Set bit length to 16, 20, 24 or 32 bits
dkato 0:bb69b79a1e05 69 */
dkato 0:bb69b79a1e05 70 void 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 0:bb69b79a1e05 77 * The TLV320 supports the following frequencies: 8.021kHz, 44.1kHz, 88.2kHz
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 0:bb69b79a1e05 87 /** Enqueue asynchronous write request
dkato 0:bb69b79a1e05 88 *
dkato 0:bb69b79a1e05 89 * @param p_data Location of the data
dkato 0:bb69b79a1e05 90 * @param data_size Number of bytes to write
dkato 0:bb69b79a1e05 91 * @param p_data_conf Asynchronous control block structure
dkato 0:bb69b79a1e05 92 * @return Number of bytes written on success. negative number on error.
dkato 0:bb69b79a1e05 93 */
dkato 0:bb69b79a1e05 94 int write(void * const p_data, uint32_t data_size, const rbsp_data_conf_t * const p_data_conf = NULL) {
dkato 0:bb69b79a1e05 95 return mI2s_.write(p_data, data_size, p_data_conf);
dkato 0:bb69b79a1e05 96 };
dkato 0:bb69b79a1e05 97
dkato 0:bb69b79a1e05 98 /** Enqueue asynchronous read request
dkato 0:bb69b79a1e05 99 *
dkato 0:bb69b79a1e05 100 * @param p_data Location of the data
dkato 0:bb69b79a1e05 101 * @param data_size Number of bytes to read
dkato 0:bb69b79a1e05 102 * @param p_data_conf Asynchronous control block structure
dkato 0:bb69b79a1e05 103 * @return Number of bytes read on success. negative number on error.
dkato 0:bb69b79a1e05 104 */
dkato 0:bb69b79a1e05 105 int read(void * const p_data, uint32_t data_size, const rbsp_data_conf_t * const p_data_conf = NULL) {
dkato 0:bb69b79a1e05 106 return mI2s_.read(p_data, data_size, p_data_conf);
dkato 0:bb69b79a1e05 107 };
dkato 0:bb69b79a1e05 108
dkato 0:bb69b79a1e05 109 /** Line in volume control i.e. record volume
dkato 0:bb69b79a1e05 110 *
dkato 0:bb69b79a1e05 111 * @param leftVolumeIn Left line-in volume
dkato 0:bb69b79a1e05 112 * @param rightVolumeIn Right line-in volume
dkato 0:bb69b79a1e05 113 * @return Returns "true" for success, "false" if parameters are out of range
dkato 0:bb69b79a1e05 114 * Parameters accept a value, where 0.0 < parameter < 1.0 and where 0.0 maps to -34.5dB
dkato 0:bb69b79a1e05 115 * and 1.0 maps to +12dB (0.74 = 0 dB default).
dkato 0:bb69b79a1e05 116 */
dkato 0:bb69b79a1e05 117 bool inputVolume(float leftVolumeIn, float rightVolumeIn);
dkato 0:bb69b79a1e05 118
dkato 0:bb69b79a1e05 119 /** Headphone out volume control
dkato 0:bb69b79a1e05 120 *
dkato 0:bb69b79a1e05 121 * @param leftVolumeOut Left headphone-out volume
dkato 0:bb69b79a1e05 122 * @param rightVolumeOut Right headphone-out volume
dkato 0:bb69b79a1e05 123 * @return Returns "true" for success, "false" if parameters are out of range
dkato 0:bb69b79a1e05 124 * Parameters accept a value, where 0.0 < parameter < 1.0 and where 0.0 maps to -73dB (mute)
dkato 0:bb69b79a1e05 125 * and 1.0 maps to +6dB (0.5 = default)
dkato 0:bb69b79a1e05 126 */
dkato 0:bb69b79a1e05 127 bool outputVolume(float leftVolumeOut, float rightVolumeOut);
dkato 0:bb69b79a1e05 128
dkato 0:bb69b79a1e05 129 /** Analog audio path control (Bypass) function default = false
dkato 0:bb69b79a1e05 130 *
dkato 0:bb69b79a1e05 131 * @param bypassVar Route analogue audio direct from line in to headphone out
dkato 0:bb69b79a1e05 132 */
dkato 0:bb69b79a1e05 133 void bypass(bool bypassVar);
dkato 0:bb69b79a1e05 134
dkato 0:bb69b79a1e05 135 /** Analog audio path control (Input select for ADC) function default = false
dkato 0:bb69b79a1e05 136 *
dkato 0:bb69b79a1e05 137 * @param micVar Input select for ADC. true : Microphone , false : Line
dkato 0:bb69b79a1e05 138 */
dkato 0:bb69b79a1e05 139 void mic(bool micVar);
dkato 0:bb69b79a1e05 140
dkato 0:bb69b79a1e05 141 /** Digital audio path control
dkato 0:bb69b79a1e05 142 *
dkato 0:bb69b79a1e05 143 * @param softMute Mute output
dkato 0:bb69b79a1e05 144 */
dkato 0:bb69b79a1e05 145 void mute(bool softMute);
dkato 0:bb69b79a1e05 146
dkato 0:bb69b79a1e05 147 protected:
dkato 0:bb69b79a1e05 148 char cmd[2]; // the address and command for TLV320 internal registers
dkato 0:bb69b79a1e05 149 int mAddr; // register write address
dkato 0:bb69b79a1e05 150 private:
dkato 0:bb69b79a1e05 151 DigitalOut audio_cs_;
dkato 0:bb69b79a1e05 152 I2C mI2c_; // MUST use the I2C port
dkato 0:bb69b79a1e05 153 SSIF mI2s_;
dkato 0:bb69b79a1e05 154 ssif_channel_cfg_t ssif_cfg;
dkato 0:bb69b79a1e05 155 char audio_path_control;
dkato 0:bb69b79a1e05 156 /** Digital interface activation
dkato 0:bb69b79a1e05 157 *
dkato 0:bb69b79a1e05 158 */
dkato 0:bb69b79a1e05 159 void activateDigitalInterface_(void);
dkato 0:bb69b79a1e05 160
dkato 0:bb69b79a1e05 161 // TLV320AIC23B register addresses as defined in the TLV320AIC23B datasheet
dkato 0:bb69b79a1e05 162 #define LEFT_LINE_INPUT_CHANNEL_VOLUME_CONTROL (0x00 << 1)
dkato 0:bb69b79a1e05 163 #define RIGHT_LINE_INPUT_CHANNEL_VOLUME_CONTROL (0x01 << 1)
dkato 0:bb69b79a1e05 164 #define LEFT_CHANNEL_HEADPHONE_VOLUME_CONTROL (0x02 << 1)
dkato 0:bb69b79a1e05 165 #define RIGHT_CHANNEL_HEADPHONE_VOLUME_CONTROL (0x03 << 1)
dkato 0:bb69b79a1e05 166 #define ANALOG_AUDIO_PATH_CONTROL (0x04 << 1)
dkato 0:bb69b79a1e05 167 #define DIGITAL_AUDIO_PATH_CONTROL (0x05 << 1)
dkato 0:bb69b79a1e05 168 #define POWER_DOWN_CONTROL (0x06 << 1)
dkato 0:bb69b79a1e05 169 #define DIGITAL_AUDIO_INTERFACE_FORMAT (0x07 << 1)
dkato 0:bb69b79a1e05 170 #define SAMPLE_RATE_CONTROL (0x08 << 1)
dkato 0:bb69b79a1e05 171 #define DIGITAL_INTERFACE_ACTIVATION (0x09 << 1)
dkato 0:bb69b79a1e05 172 #define RESET_REGISTER (0x0F << 1)
dkato 0:bb69b79a1e05 173 };
dkato 0:bb69b79a1e05 174
dkato 0:bb69b79a1e05 175 #endif