Production Test Program (PTP) for the LPC4088 Experiment Base Board

Dependencies:   EALib I2S LM75B SDFileSystem mbed

Committer:
embeddedartists
Date:
Mon Sep 08 11:34:53 2014 +0000
Revision:
3:7ef908e84ae1
Parent:
0:0d5190d379d3
Added audio test. Shortened RGB LED startup sequence and added message for user when uSD card not inserted to explain the long delay.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
embeddedartists 3:7ef908e84ae1 1 /**
embeddedartists 3:7ef908e84ae1 2 *
embeddedartists 3:7ef908e84ae1 3 * @section LICENSE
embeddedartists 3:7ef908e84ae1 4 *
embeddedartists 3:7ef908e84ae1 5 * Copyright (c) 2012 mbed
embeddedartists 3:7ef908e84ae1 6 *
embeddedartists 3:7ef908e84ae1 7 * Permission is hereby granted, free of charge, to any person obtaining a copy
embeddedartists 3:7ef908e84ae1 8 * of this software and associated documentation files (the "Software"), to deal
embeddedartists 3:7ef908e84ae1 9 * in the Software without restriction, including without limitation the rights
embeddedartists 3:7ef908e84ae1 10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
embeddedartists 3:7ef908e84ae1 11 * copies of the Software, and to permit persons to whom the Software is
embeddedartists 3:7ef908e84ae1 12 * furnished to do so, subject to the following conditions:
embeddedartists 3:7ef908e84ae1 13 *
embeddedartists 3:7ef908e84ae1 14 * The above copyright notice and this permission notice shall be included in
embeddedartists 3:7ef908e84ae1 15 * all copies or substantial portions of the Software.
embeddedartists 3:7ef908e84ae1 16 *
embeddedartists 3:7ef908e84ae1 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
embeddedartists 3:7ef908e84ae1 18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
embeddedartists 3:7ef908e84ae1 19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
embeddedartists 3:7ef908e84ae1 20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
embeddedartists 3:7ef908e84ae1 21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
embeddedartists 3:7ef908e84ae1 22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
embeddedartists 3:7ef908e84ae1 23 * THE SOFTWARE.
embeddedartists 3:7ef908e84ae1 24 *
embeddedartists 3:7ef908e84ae1 25 * @section DESCRIPTION
embeddedartists 3:7ef908e84ae1 26 * A Driver set for the I2C half of the WM8731. Based on the WM8731
embeddedartists 3:7ef908e84ae1 27 * code http://mbed.org/users/p07gbar/code/WM8731/
embeddedartists 3:7ef908e84ae1 28 *
embeddedartists 3:7ef908e84ae1 29 */
embeddedartists 0:0d5190d379d3 30
embeddedartists 0:0d5190d379d3 31 #ifndef WM8731_H
embeddedartists 0:0d5190d379d3 32 #define WM8731_H
embeddedartists 0:0d5190d379d3 33
embeddedartists 3:7ef908e84ae1 34 #include "mbed.h"
embeddedartists 0:0d5190d379d3 35
embeddedartists 3:7ef908e84ae1 36 #define WM8731_CS_HIGH true
embeddedartists 3:7ef908e84ae1 37 #define WM8731_CS_LOW false
embeddedartists 3:7ef908e84ae1 38
embeddedartists 3:7ef908e84ae1 39 #define WM8731_ON true
embeddedartists 3:7ef908e84ae1 40 #define WM8731_OFF false
embeddedartists 3:7ef908e84ae1 41
embeddedartists 3:7ef908e84ae1 42 #define WM8731_MUTE true
embeddedartists 3:7ef908e84ae1 43 #define WM8731_UNMUTE false
embeddedartists 3:7ef908e84ae1 44
embeddedartists 3:7ef908e84ae1 45 #define WM8731_MASTER true
embeddedartists 3:7ef908e84ae1 46 #define WM8731_SLAVE false
embeddedartists 3:7ef908e84ae1 47
embeddedartists 3:7ef908e84ae1 48 #define WM8731_LINE 0
embeddedartists 3:7ef908e84ae1 49 #define WM8731_MIC 1
embeddedartists 3:7ef908e84ae1 50 #define WM8731_NO_IN -1
embeddedartists 3:7ef908e84ae1 51
embeddedartists 3:7ef908e84ae1 52 #define WM8731_DE_EMPH_DISABLED 0
embeddedartists 3:7ef908e84ae1 53 #define WM8731_DE_EMPH_32KHZ 1
embeddedartists 3:7ef908e84ae1 54 #define WM8731_DE_EMPH_44KHZ 2
embeddedartists 3:7ef908e84ae1 55 #define WM8731_DE_EMPH_48KHZ 3
embeddedartists 3:7ef908e84ae1 56
embeddedartists 3:7ef908e84ae1 57 /** A class to control the I2C part of the WM8731
embeddedartists 3:7ef908e84ae1 58 *
embeddedartists 0:0d5190d379d3 59 */
embeddedartists 0:0d5190d379d3 60 class WM8731 {
embeddedartists 0:0d5190d379d3 61 public:
embeddedartists 0:0d5190d379d3 62
embeddedartists 3:7ef908e84ae1 63 /** Create an instance of the WM8731 class
embeddedartists 3:7ef908e84ae1 64 *
embeddedartists 3:7ef908e84ae1 65 * @param i2c_sda The SDA pin of the I2C
embeddedartists 3:7ef908e84ae1 66 * @param i2c_scl The SCL pin of the I2C
embeddedartists 3:7ef908e84ae1 67 */
embeddedartists 3:7ef908e84ae1 68 WM8731(PinName i2c_sda, PinName i2c_scl);
embeddedartists 3:7ef908e84ae1 69
embeddedartists 3:7ef908e84ae1 70 /** Create an instance of the WM8731 class
embeddedartists 3:7ef908e84ae1 71 *
embeddedartists 3:7ef908e84ae1 72 * @param i2c_sda The SDA pin of the I2C
embeddedartists 3:7ef908e84ae1 73 * @param i2c_scl The SCL pin of the I2C
embeddedartists 3:7ef908e84ae1 74 * @param cs_level The level of the CS pin on the WM8731
embeddedartists 3:7ef908e84ae1 75 */
embeddedartists 3:7ef908e84ae1 76 WM8731(PinName i2c_sda, PinName i2c_scl, bool cs_level);
embeddedartists 3:7ef908e84ae1 77
embeddedartists 3:7ef908e84ae1 78 /** Control the power of the device
embeddedartists 3:7ef908e84ae1 79 *
embeddedartists 3:7ef908e84ae1 80 * @param on_off The power state
embeddedartists 3:7ef908e84ae1 81 */
embeddedartists 3:7ef908e84ae1 82 void power(bool on_off);
embeddedartists 3:7ef908e84ae1 83
embeddedartists 3:7ef908e84ae1 84 /** Control the input source of the device
embeddedartists 3:7ef908e84ae1 85 *
embeddedartists 3:7ef908e84ae1 86 * @param input Select the source of the input of the device: WM8731_LINE, WM8731_MIC, WM8731_NO_IN
embeddedartists 3:7ef908e84ae1 87 */
embeddedartists 3:7ef908e84ae1 88 void input_select(int input);
embeddedartists 3:7ef908e84ae1 89
embeddedartists 3:7ef908e84ae1 90 /** Set the headphone volume
embeddedartists 3:7ef908e84ae1 91 *
embeddedartists 3:7ef908e84ae1 92 * @param h_volume The desired headphone volume: 0->1
embeddedartists 3:7ef908e84ae1 93 */
embeddedartists 3:7ef908e84ae1 94 void headphone_volume(float h_volume);
embeddedartists 3:7ef908e84ae1 95
embeddedartists 3:7ef908e84ae1 96 /** Set the line in pre-amp volume
embeddedartists 3:7ef908e84ae1 97 *
embeddedartists 3:7ef908e84ae1 98 * @param li_volume The desired line in volume: 0->1
embeddedartists 3:7ef908e84ae1 99 */
embeddedartists 3:7ef908e84ae1 100 void linein_volume(float li_volume);
embeddedartists 3:7ef908e84ae1 101
embeddedartists 3:7ef908e84ae1 102 /** Turn on/off the microphone pre-amp boost
embeddedartists 3:7ef908e84ae1 103 *
embeddedartists 3:7ef908e84ae1 104 * @param mic_boost Boost on or off
embeddedartists 3:7ef908e84ae1 105 */
embeddedartists 3:7ef908e84ae1 106 void microphone_boost(bool mic_boost);
embeddedartists 3:7ef908e84ae1 107
embeddedartists 3:7ef908e84ae1 108 /** Mute the input
embeddedartists 3:7ef908e84ae1 109 *
embeddedartists 3:7ef908e84ae1 110 * @param mute Mute on/off
embeddedartists 3:7ef908e84ae1 111 */
embeddedartists 3:7ef908e84ae1 112 void input_mute(bool mute);
embeddedartists 3:7ef908e84ae1 113
embeddedartists 3:7ef908e84ae1 114 /** Mute the output
embeddedartists 3:7ef908e84ae1 115 *
embeddedartists 3:7ef908e84ae1 116 * @param mute Mute on/off
embeddedartists 3:7ef908e84ae1 117 */
embeddedartists 3:7ef908e84ae1 118 void output_mute(bool mute);
embeddedartists 3:7ef908e84ae1 119
embeddedartists 3:7ef908e84ae1 120 /** Turn on/off the input stage
embeddedartists 3:7ef908e84ae1 121 *
embeddedartists 3:7ef908e84ae1 122 * @param on_off Input stage on(true)/off(false)
embeddedartists 3:7ef908e84ae1 123 */
embeddedartists 3:7ef908e84ae1 124 void input_power(bool on_off);
embeddedartists 3:7ef908e84ae1 125
embeddedartists 3:7ef908e84ae1 126 /** Turn on/off the output stage
embeddedartists 3:7ef908e84ae1 127 *
embeddedartists 3:7ef908e84ae1 128 * @param on_off Output stage on(true)/off(false)
embeddedartists 3:7ef908e84ae1 129 */
embeddedartists 3:7ef908e84ae1 130 void output_power(bool on_off);
embeddedartists 3:7ef908e84ae1 131
embeddedartists 3:7ef908e84ae1 132 /** Select the word size
embeddedartists 3:7ef908e84ae1 133 *
embeddedartists 3:7ef908e84ae1 134 * @param words 16/20/24/32 bits
embeddedartists 3:7ef908e84ae1 135 */
embeddedartists 3:7ef908e84ae1 136 void wordsize(int words);
embeddedartists 3:7ef908e84ae1 137
embeddedartists 3:7ef908e84ae1 138 /** Select interface mode: Master or Slave
embeddedartists 3:7ef908e84ae1 139 *
embeddedartists 3:7ef908e84ae1 140 * @param master Interface mode: master(true)/slave
embeddedartists 3:7ef908e84ae1 141 */
embeddedartists 3:7ef908e84ae1 142 void master(bool master);
embeddedartists 3:7ef908e84ae1 143
embeddedartists 3:7ef908e84ae1 144 /** Select the sample rate
embeddedartists 3:7ef908e84ae1 145 *
embeddedartists 3:7ef908e84ae1 146 * @param freq Frequency: 96/48/32/8 kHz
embeddedartists 3:7ef908e84ae1 147 */
embeddedartists 3:7ef908e84ae1 148 void frequency(int freq);
embeddedartists 3:7ef908e84ae1 149
embeddedartists 3:7ef908e84ae1 150 /** Enable the input highpass filter
embeddedartists 3:7ef908e84ae1 151 *
embeddedartists 3:7ef908e84ae1 152 * @param enabled Input highpass filter enabled
embeddedartists 3:7ef908e84ae1 153 */
embeddedartists 3:7ef908e84ae1 154 void input_highpass(bool enabled);
embeddedartists 3:7ef908e84ae1 155
embeddedartists 3:7ef908e84ae1 156 /** Enable the output soft mute
embeddedartists 3:7ef908e84ae1 157 *
embeddedartists 3:7ef908e84ae1 158 * @param enabled Output soft mute enabled
embeddedartists 3:7ef908e84ae1 159 */
embeddedartists 3:7ef908e84ae1 160 void output_softmute(bool enabled);
embeddedartists 3:7ef908e84ae1 161
embeddedartists 3:7ef908e84ae1 162 /** Turn on and off the I2S
embeddedartists 3:7ef908e84ae1 163 *
embeddedartists 3:7ef908e84ae1 164 * @param on_off Switch the I2S interface on(true)/off(false)
embeddedartists 3:7ef908e84ae1 165 */
embeddedartists 3:7ef908e84ae1 166 void interface_switch(bool on_off);
embeddedartists 3:7ef908e84ae1 167
embeddedartists 3:7ef908e84ae1 168 /** Reset the device and settings
embeddedartists 3:7ef908e84ae1 169 *
embeddedartists 3:7ef908e84ae1 170 */
embeddedartists 3:7ef908e84ae1 171 void reset();
embeddedartists 3:7ef908e84ae1 172
embeddedartists 3:7ef908e84ae1 173 /** Set the microphone sidetone volume
embeddedartists 0:0d5190d379d3 174 *
embeddedartists 3:7ef908e84ae1 175 * @param sidetone_volume The volume of the sidetone: 0->1
embeddedartists 3:7ef908e84ae1 176 */
embeddedartists 3:7ef908e84ae1 177 void sidetone(float sidetone_vol);
embeddedartists 3:7ef908e84ae1 178
embeddedartists 3:7ef908e84ae1 179 /** Set the analog bypass
embeddedartists 3:7ef908e84ae1 180 *
embeddedartists 3:7ef908e84ae1 181 * @param bypass_en Enable the bypass: enabled(true)
embeddedartists 0:0d5190d379d3 182 */
embeddedartists 3:7ef908e84ae1 183 void bypass(bool bypass_en);
embeddedartists 3:7ef908e84ae1 184
embeddedartists 3:7ef908e84ae1 185 /** Set the deemphasis frequency
embeddedartists 3:7ef908e84ae1 186 *
embeddedartists 3:7ef908e84ae1 187 * @param code The deemphasis code: WM8731_DE_EMPH_DISABLED, WM8731_DE_EMPH_32KHZ, WM8731_DE_EMPH_44KHZ, WM8731_DE_EMPH_48KHZ
embeddedartists 3:7ef908e84ae1 188 */
embeddedartists 3:7ef908e84ae1 189 void deemphasis(char code);
embeddedartists 3:7ef908e84ae1 190
embeddedartists 3:7ef908e84ae1 191 /** Enable the input highpass filter
embeddedartists 0:0d5190d379d3 192 *
embeddedartists 3:7ef908e84ae1 193 * @param enable Enable the input highpass filter enabled(true)
embeddedartists 0:0d5190d379d3 194 */
embeddedartists 3:7ef908e84ae1 195
embeddedartists 3:7ef908e84ae1 196 void adc_highpass(bool enable);
embeddedartists 3:7ef908e84ae1 197
embeddedartists 3:7ef908e84ae1 198 /** Start the device sending/recieving etc
embeddedartists 3:7ef908e84ae1 199 */
embeddedartists 3:7ef908e84ae1 200 void start();
embeddedartists 3:7ef908e84ae1 201
embeddedartists 3:7ef908e84ae1 202 /** Stop the device sending/recieving etc
embeddedartists 3:7ef908e84ae1 203 */
embeddedartists 3:7ef908e84ae1 204 void stop();
embeddedartists 3:7ef908e84ae1 205
embeddedartists 0:0d5190d379d3 206 private:
embeddedartists 3:7ef908e84ae1 207
embeddedartists 3:7ef908e84ae1 208 enum reg_address {
embeddedartists 3:7ef908e84ae1 209 line_in_vol_left = 0x00,
embeddedartists 3:7ef908e84ae1 210 line_in_vol_right = 0x01,
embeddedartists 3:7ef908e84ae1 211 headphone_vol_left = 0x02,
embeddedartists 3:7ef908e84ae1 212 headphone_vol_right = 0x03,
embeddedartists 3:7ef908e84ae1 213 path_analog = 0x04,
embeddedartists 3:7ef908e84ae1 214 path_digital = 0x05,
embeddedartists 3:7ef908e84ae1 215 power_control = 0x06,
embeddedartists 3:7ef908e84ae1 216 interface_format = 0x07,
embeddedartists 3:7ef908e84ae1 217 sample_rate = 0x08,
embeddedartists 3:7ef908e84ae1 218 interface_activation = 0x09,
embeddedartists 3:7ef908e84ae1 219 reset_reg = 0x0F,
embeddedartists 3:7ef908e84ae1 220 all = 0xFF
embeddedartists 3:7ef908e84ae1 221 };
embeddedartists 3:7ef908e84ae1 222
embeddedartists 3:7ef908e84ae1 223 enum tlv320_defaults{
embeddedartists 3:7ef908e84ae1 224 df_bypass_ = 0,
embeddedartists 3:7ef908e84ae1 225 df_ADC_source = WM8731_LINE,
embeddedartists 3:7ef908e84ae1 226 df_mic_mute = WM8731_UNMUTE,
embeddedartists 3:7ef908e84ae1 227 df_li_mute_left = 0,
embeddedartists 3:7ef908e84ae1 228 df_li_mute_right = 0,
embeddedartists 3:7ef908e84ae1 229 df_mic_boost_ = 0,
embeddedartists 3:7ef908e84ae1 230 df_out_mute = WM8731_UNMUTE,
embeddedartists 3:7ef908e84ae1 231
embeddedartists 3:7ef908e84ae1 232 df_de_emph_code = 0x00,
embeddedartists 3:7ef908e84ae1 233 df_ADC_highpass_enable = 0,
embeddedartists 3:7ef908e84ae1 234
embeddedartists 3:7ef908e84ae1 235 df_device_all_pwr = 1,
embeddedartists 3:7ef908e84ae1 236 df_device_clk_pwr = 1,
embeddedartists 3:7ef908e84ae1 237 df_device_osc_pwr = 1,
embeddedartists 3:7ef908e84ae1 238 df_device_out_pwr = 1,
embeddedartists 3:7ef908e84ae1 239 df_device_dac_pwr = 1,
embeddedartists 3:7ef908e84ae1 240 df_device_adc_pwr = 1,
embeddedartists 3:7ef908e84ae1 241 df_device_mic_pwr = 0,
embeddedartists 3:7ef908e84ae1 242 df_device_lni_pwr = 1,
embeddedartists 3:7ef908e84ae1 243
embeddedartists 3:7ef908e84ae1 244 df_device_master = 0,
embeddedartists 3:7ef908e84ae1 245 df_device_lrswap = 0,
embeddedartists 3:7ef908e84ae1 246 df_device_lrws = 0,
embeddedartists 3:7ef908e84ae1 247 df_device_bitlength = 32,
embeddedartists 0:0d5190d379d3 248
embeddedartists 3:7ef908e84ae1 249 df_ADC_rate = 32000,
embeddedartists 3:7ef908e84ae1 250 df_DAC_rate = 32000,
embeddedartists 3:7ef908e84ae1 251
embeddedartists 3:7ef908e84ae1 252 df_device_interface_active = 0
embeddedartists 3:7ef908e84ae1 253 };
embeddedartists 3:7ef908e84ae1 254
embeddedartists 3:7ef908e84ae1 255
embeddedartists 3:7ef908e84ae1 256 I2C i2c;
embeddedartists 3:7ef908e84ae1 257 uint8_t address;
embeddedartists 3:7ef908e84ae1 258 void command(reg_address add, uint16_t byte);
embeddedartists 3:7ef908e84ae1 259 void form_cmd(reg_address add);
embeddedartists 3:7ef908e84ae1 260 void defaulter();
embeddedartists 3:7ef908e84ae1 261
embeddedartists 3:7ef908e84ae1 262 char gen_samplerate();
embeddedartists 3:7ef908e84ae1 263
embeddedartists 3:7ef908e84ae1 264 //I2S i2s_tx(I2S_TRANSMIT, p5, p6 , p7);
embeddedartists 3:7ef908e84ae1 265 //I2S i2s_rx(I2S_RECIEVE , p8, p29, p30);
embeddedartists 3:7ef908e84ae1 266
embeddedartists 3:7ef908e84ae1 267 float hp_vol_left, hp_vol_right;
embeddedartists 3:7ef908e84ae1 268 float li_vol_left, li_vol_right;
embeddedartists 3:7ef908e84ae1 269 float sdt_vol;
embeddedartists 3:7ef908e84ae1 270 bool li_mute_left, li_mute_right;
embeddedartists 3:7ef908e84ae1 271 bool bypass_;
embeddedartists 3:7ef908e84ae1 272 bool ADC_source;
embeddedartists 3:7ef908e84ae1 273 bool ADC_source_old;
embeddedartists 3:7ef908e84ae1 274 bool mic_mute;
embeddedartists 3:7ef908e84ae1 275 bool mic_boost_;
embeddedartists 3:7ef908e84ae1 276 bool out_mute;
embeddedartists 3:7ef908e84ae1 277 char de_emph_code;
embeddedartists 3:7ef908e84ae1 278 bool ADC_highpass_enable;
embeddedartists 3:7ef908e84ae1 279
embeddedartists 3:7ef908e84ae1 280 bool device_all_pwr;
embeddedartists 3:7ef908e84ae1 281 bool device_clk_pwr;
embeddedartists 3:7ef908e84ae1 282 bool device_osc_pwr;
embeddedartists 3:7ef908e84ae1 283 bool device_out_pwr;
embeddedartists 3:7ef908e84ae1 284 bool device_dac_pwr;
embeddedartists 3:7ef908e84ae1 285 bool device_adc_pwr;
embeddedartists 3:7ef908e84ae1 286 bool device_mic_pwr;
embeddedartists 3:7ef908e84ae1 287 bool device_lni_pwr;
embeddedartists 3:7ef908e84ae1 288
embeddedartists 3:7ef908e84ae1 289 bool device_master;
embeddedartists 3:7ef908e84ae1 290 bool device_lrswap;
embeddedartists 3:7ef908e84ae1 291 bool device_lrws;
embeddedartists 3:7ef908e84ae1 292 char device_bitlength;
embeddedartists 3:7ef908e84ae1 293 static const char device_data_form = 0x02;
embeddedartists 3:7ef908e84ae1 294
embeddedartists 3:7ef908e84ae1 295 int ADC_rate;
embeddedartists 3:7ef908e84ae1 296 int DAC_rate;
embeddedartists 3:7ef908e84ae1 297 static const bool device_usb_mode = false;
embeddedartists 3:7ef908e84ae1 298 static const bool device_clk_in_div = false;
embeddedartists 3:7ef908e84ae1 299 static const bool device_clk_out_div = false;
embeddedartists 3:7ef908e84ae1 300 bool device_interface_active;
embeddedartists 0:0d5190d379d3 301 };
embeddedartists 0:0d5190d379d3 302
embeddedartists 0:0d5190d379d3 303 #endif