To support GR-PEACH
Dependents: GR-PEACH_Azure_Speech
Fork of TLV320_RBSP by
TLV320_RBSP.h@0:bb69b79a1e05, 2015-06-01 (annotated)
- 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?
User | Revision | Line number | New 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 |