Dependents:   playback FTSESpeech i2s_audio_echo i2s_audio_sampler ... more

Committer:
d_worrall
Date:
Thu Aug 04 14:53:50 2011 +0000
Revision:
0:e62e06e11575
version 2.31

Who changed what in which revision?

UserRevisionLine numberNew contents of line
d_worrall 0:e62e06e11575 1 /**
d_worrall 0:e62e06e11575 2 * @author Daniel Worrall
d_worrall 0:e62e06e11575 3 *
d_worrall 0:e62e06e11575 4 * @section LICENSE
d_worrall 0:e62e06e11575 5 *
d_worrall 0:e62e06e11575 6 * Copyright (c) 2011 mbed
d_worrall 0:e62e06e11575 7 *
d_worrall 0:e62e06e11575 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
d_worrall 0:e62e06e11575 9 * of this software and associated documentation files (the "Software"), to deal
d_worrall 0:e62e06e11575 10 * in the Software without restriction, including without limitation the rights
d_worrall 0:e62e06e11575 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
d_worrall 0:e62e06e11575 12 * copies of the Software, and to permit persons to whom the Software is
d_worrall 0:e62e06e11575 13 * furnished to do so, subject to the following conditions:
d_worrall 0:e62e06e11575 14 *
d_worrall 0:e62e06e11575 15 * The above copyright notice and this permission notice shall be included in
d_worrall 0:e62e06e11575 16 * all copies or substantial portions of the Software.
d_worrall 0:e62e06e11575 17 *
d_worrall 0:e62e06e11575 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
d_worrall 0:e62e06e11575 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
d_worrall 0:e62e06e11575 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
d_worrall 0:e62e06e11575 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
d_worrall 0:e62e06e11575 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
d_worrall 0:e62e06e11575 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
d_worrall 0:e62e06e11575 24 * THE SOFTWARE.
d_worrall 0:e62e06e11575 25 *
d_worrall 0:e62e06e11575 26 * @section DESCRIPTION
d_worrall 0:e62e06e11575 27 * I2S port abstraction library cpp file for NXP LPC1768
d_worrall 0:e62e06e11575 28 *
d_worrall 0:e62e06e11575 29 */
d_worrall 0:e62e06e11575 30 #include "I2SSlave.h"
d_worrall 0:e62e06e11575 31 /*Global Functions*/
d_worrall 0:e62e06e11575 32 FunctionPointer akjnh3489v8ncv;
d_worrall 0:e62e06e11575 33
d_worrall 0:e62e06e11575 34 extern "C" void I2S_IRQHandler(void){ //this is a very special function so can remain outside
d_worrall 0:e62e06e11575 35 akjnh3489v8ncv.call();
d_worrall 0:e62e06e11575 36 }
d_worrall 0:e62e06e11575 37 /******************************************************
d_worrall 0:e62e06e11575 38 * Function name: I2SSlave
d_worrall 0:e62e06e11575 39 *
d_worrall 0:e62e06e11575 40 * Description: class constructor
d_worrall 0:e62e06e11575 41 *
d_worrall 0:e62e06e11575 42 * Parameters: PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws
d_worrall 0:e62e06e11575 43 * Returns: none
d_worrall 0:e62e06e11575 44 ******************************************************/
d_worrall 0:e62e06e11575 45 //Constructor
d_worrall 0:e62e06e11575 46 I2SSlave::I2SSlave(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws){
d_worrall 0:e62e06e11575 47 storePins_(tx_sda, tx_ws, clk, rx_sda, rx_ws);
d_worrall 0:e62e06e11575 48 format(16, STEREO); //this also invokes initialize so no need to call it twice
d_worrall 0:e62e06e11575 49 }
d_worrall 0:e62e06e11575 50 //Public functions
d_worrall 0:e62e06e11575 51 /******************************************************
d_worrall 0:e62e06e11575 52 * Function name: format()
d_worrall 0:e62e06e11575 53 *
d_worrall 0:e62e06e11575 54 * Description: sets the bit length for writing and stereo or mono mode
d_worrall 0:e62e06e11575 55 *
d_worrall 0:e62e06e11575 56 * Parameters: int bit, bool mode
d_worrall 0:e62e06e11575 57 * Returns: none
d_worrall 0:e62e06e11575 58 ******************************************************/
d_worrall 0:e62e06e11575 59 void I2SSlave::format(int bit, bool mode){
d_worrall 0:e62e06e11575 60 bit_ = bit;
d_worrall 0:e62e06e11575 61 mode_ = mode;
d_worrall 0:e62e06e11575 62 initialize_(tx_sda_, tx_ws_, clk_, rx_sda_, rx_ws_);
d_worrall 0:e62e06e11575 63 }
d_worrall 0:e62e06e11575 64 /******************************************************
d_worrall 0:e62e06e11575 65 * Function name: write()
d_worrall 0:e62e06e11575 66 *
d_worrall 0:e62e06e11575 67 * Description: load buffer to write to I2S port
d_worrall 0:e62e06e11575 68 *
d_worrall 0:e62e06e11575 69 * Parameters: long *buffer
d_worrall 0:e62e06e11575 70 * Returns: none
d_worrall 0:e62e06e11575 71 ******************************************************/
d_worrall 0:e62e06e11575 72 void I2SSlave::write(int* buffer, int from, int length){
d_worrall 0:e62e06e11575 73 int to = from + length;
d_worrall 0:e62e06e11575 74 for(int i = from; i < to; ++i){
d_worrall 0:e62e06e11575 75 LPC_I2S->I2STXFIFO = buffer[i];
d_worrall 0:e62e06e11575 76 }
d_worrall 0:e62e06e11575 77 }
d_worrall 0:e62e06e11575 78 /******************************************************
d_worrall 0:e62e06e11575 79 * Function name: start()
d_worrall 0:e62e06e11575 80 *
d_worrall 0:e62e06e11575 81 * Description: attach streamOut_ function to ticker interrupt
d_worrall 0:e62e06e11575 82 *
d_worrall 0:e62e06e11575 83 * Parameters: none
d_worrall 0:e62e06e11575 84 * Returns: none
d_worrall 0:e62e06e11575 85 ******************************************************/
d_worrall 0:e62e06e11575 86 void I2SSlave::start(int mode){
d_worrall 0:e62e06e11575 87 switch(mode){
d_worrall 0:e62e06e11575 88 case(0):
d_worrall 0:e62e06e11575 89 LPC_I2S->I2SIRQ |= (0 << 0); //disable receive interrupt
d_worrall 0:e62e06e11575 90 LPC_I2S->I2SIRQ |= (0 << 1); //disable transmit interrupt
d_worrall 0:e62e06e11575 91 break;
d_worrall 0:e62e06e11575 92 case(1):
d_worrall 0:e62e06e11575 93 LPC_I2S->I2SIRQ |= (0 << 0); //disable receive interrupt
d_worrall 0:e62e06e11575 94 LPC_I2S->I2SIRQ |= (1 << 1); //enable transmit interrupt
d_worrall 0:e62e06e11575 95 LPC_I2S->I2SIRQ |= (0 << 16); //set I2STXFIFO depth to 0 words
d_worrall 0:e62e06e11575 96 break;
d_worrall 0:e62e06e11575 97 case(2):
d_worrall 0:e62e06e11575 98 LPC_I2S->I2SIRQ |= (1 << 0); //enable receive interrupt
d_worrall 0:e62e06e11575 99 LPC_I2S->I2SIRQ |= (0 << 1); //disable transmit interrupt
d_worrall 0:e62e06e11575 100 LPC_I2S->I2SIRQ |= (4 << 8); //set I2SRXFIFO depth to 4 words
d_worrall 0:e62e06e11575 101 break;
d_worrall 0:e62e06e11575 102 case(3):
d_worrall 0:e62e06e11575 103 LPC_I2S->I2SIRQ |= (1 << 0); //enable receive interrupt
d_worrall 0:e62e06e11575 104 LPC_I2S->I2SIRQ |= (4 << 8); //set I2SRXFIFO depth to 4 words
d_worrall 0:e62e06e11575 105 LPC_I2S->I2SIRQ |= (1 << 1); //enable transmit interrupt
d_worrall 0:e62e06e11575 106 LPC_I2S->I2SIRQ |= (0 << 16); //set I2STXFIFO depth to 0 words
d_worrall 0:e62e06e11575 107 break;
d_worrall 0:e62e06e11575 108 default:
d_worrall 0:e62e06e11575 109 break;
d_worrall 0:e62e06e11575 110 }
d_worrall 0:e62e06e11575 111 NVIC_SetPriority(I2S_IRQn, 0);
d_worrall 0:e62e06e11575 112 NVIC_EnableIRQ(I2S_IRQn); //enable I2S interrupt in the NVIC
d_worrall 0:e62e06e11575 113 }
d_worrall 0:e62e06e11575 114 /******************************************************
d_worrall 0:e62e06e11575 115 * Function name: stop()
d_worrall 0:e62e06e11575 116 *
d_worrall 0:e62e06e11575 117 * Description: detach streamOut_ from ticker
d_worrall 0:e62e06e11575 118 *
d_worrall 0:e62e06e11575 119 * Parameters: none
d_worrall 0:e62e06e11575 120 * Returns: none
d_worrall 0:e62e06e11575 121 ******************************************************/
d_worrall 0:e62e06e11575 122 void I2SSlave::stop(void){
d_worrall 0:e62e06e11575 123 NVIC_DisableIRQ(I2S_IRQn);
d_worrall 0:e62e06e11575 124 }
d_worrall 0:e62e06e11575 125 /******************************************************
d_worrall 0:e62e06e11575 126 * Function name: read()
d_worrall 0:e62e06e11575 127 *
d_worrall 0:e62e06e11575 128 * Description: reads FIFORX buffer into [int32_t rxBuffer[8]]
d_worrall 0:e62e06e11575 129 *
d_worrall 0:e62e06e11575 130 * Parameters: none
d_worrall 0:e62e06e11575 131 * Returns: none
d_worrall 0:e62e06e11575 132 ******************************************************/
d_worrall 0:e62e06e11575 133 void I2SSlave::read(void){
d_worrall 0:e62e06e11575 134 rxBuffer[0] = LPC_I2S->I2SRXFIFO;
d_worrall 0:e62e06e11575 135 rxBuffer[1] = LPC_I2S->I2SRXFIFO;
d_worrall 0:e62e06e11575 136 rxBuffer[2] = LPC_I2S->I2SRXFIFO;
d_worrall 0:e62e06e11575 137 rxBuffer[3] = LPC_I2S->I2SRXFIFO;
d_worrall 0:e62e06e11575 138 }
d_worrall 0:e62e06e11575 139 /******************************************************
d_worrall 0:e62e06e11575 140 * Function name: status_()
d_worrall 0:e62e06e11575 141 *
d_worrall 0:e62e06e11575 142 * Description: Read I2SSTATE register
d_worrall 0:e62e06e11575 143 *
d_worrall 0:e62e06e11575 144 * Parameters: none
d_worrall 0:e62e06e11575 145 * Returns: int
d_worrall 0:e62e06e11575 146 ******************************************************/
d_worrall 0:e62e06e11575 147 int I2SSlave::status(void){
d_worrall 0:e62e06e11575 148 return LPC_I2S->I2SSTATE;
d_worrall 0:e62e06e11575 149 }
d_worrall 0:e62e06e11575 150 //Private functions
d_worrall 0:e62e06e11575 151 /******************************************************
d_worrall 0:e62e06e11575 152 * Function name: initialize()
d_worrall 0:e62e06e11575 153 *
d_worrall 0:e62e06e11575 154 * Description: initialises I2S port
d_worrall 0:e62e06e11575 155 *
d_worrall 0:e62e06e11575 156 * Parameters: PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws
d_worrall 0:e62e06e11575 157 * Returns: 0 = successful initialisation
d_worrall 0:e62e06e11575 158 -1 = initialisation failure
d_worrall 0:e62e06e11575 159 ******************************************************/
d_worrall 0:e62e06e11575 160 int I2SSlave::initialize_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws){
d_worrall 0:e62e06e11575 161 setPins_(tx_sda, tx_ws, clk, rx_sda, rx_ws); //designate pins
d_worrall 0:e62e06e11575 162 LPC_SC->PCONP |= (1 << 27);
d_worrall 0:e62e06e11575 163 //configure input/output register
d_worrall 0:e62e06e11575 164 format_(bit_, mode_);
d_worrall 0:e62e06e11575 165 //set mbed as SLAVE
d_worrall 0:e62e06e11575 166 LPC_I2S->I2SDAO |= (1 << 5);
d_worrall 0:e62e06e11575 167 LPC_I2S->I2SDAI |= (1 << 5);
d_worrall 0:e62e06e11575 168 //clock mode
d_worrall 0:e62e06e11575 169 setClocks_(4);
d_worrall 0:e62e06e11575 170 //set slave mode
d_worrall 0:e62e06e11575 171 modeConfig_();
d_worrall 0:e62e06e11575 172 //set receiver mode
d_worrall 0:e62e06e11575 173 LPC_I2S->I2SRXMODE |= (1 << 1);
d_worrall 0:e62e06e11575 174 //slave mode
d_worrall 0:e62e06e11575 175 LPC_I2S->I2STXRATE = 0;
d_worrall 0:e62e06e11575 176 LPC_I2S->I2SRXRATE = 0;
d_worrall 0:e62e06e11575 177 //Start
d_worrall 0:e62e06e11575 178 LPC_I2S->I2SDAO |= (0 << 3);
d_worrall 0:e62e06e11575 179 LPC_I2S->I2SDAI |= (0 << 3);
d_worrall 0:e62e06e11575 180 LPC_I2S->I2SDAO |= (0 << 4);
d_worrall 0:e62e06e11575 181 LPC_I2S->I2SDAI |= (0 << 4);
d_worrall 0:e62e06e11575 182 LPC_I2S->I2SDAO |= (0 << 15);
d_worrall 0:e62e06e11575 183 return 0;
d_worrall 0:e62e06e11575 184 }
d_worrall 0:e62e06e11575 185 /******************************************************
d_worrall 0:e62e06e11575 186 * Function name: setClocks_()
d_worrall 0:e62e06e11575 187 *
d_worrall 0:e62e06e11575 188 * Description: Set the division setting on the internal clocks
d_worrall 0:e62e06e11575 189 *
d_worrall 0:e62e06e11575 190 * Parameters: int divideBy
d_worrall 0:e62e06e11575 191 * Returns: nothing
d_worrall 0:e62e06e11575 192 ******************************************************/
d_worrall 0:e62e06e11575 193 void I2SSlave::setClocks_(int divideBy){
d_worrall 0:e62e06e11575 194 switch(divideBy){
d_worrall 0:e62e06e11575 195 case 1:
d_worrall 0:e62e06e11575 196 LPC_SC->PCLKSEL1 |= (1 << 22);
d_worrall 0:e62e06e11575 197 LPC_SC->PCLKSEL1 |= (0 << 23);
d_worrall 0:e62e06e11575 198 break;
d_worrall 0:e62e06e11575 199 case 2:
d_worrall 0:e62e06e11575 200 LPC_SC->PCLKSEL1 |= (0 << 22);
d_worrall 0:e62e06e11575 201 LPC_SC->PCLKSEL1 |= (1 << 23);
d_worrall 0:e62e06e11575 202 break;
d_worrall 0:e62e06e11575 203 case 4:
d_worrall 0:e62e06e11575 204 LPC_SC->PCLKSEL1 |= (0 << 22);
d_worrall 0:e62e06e11575 205 LPC_SC->PCLKSEL1 |= (0 << 23);
d_worrall 0:e62e06e11575 206 break;
d_worrall 0:e62e06e11575 207 case 8:
d_worrall 0:e62e06e11575 208 LPC_SC->PCLKSEL1 |= (1 << 22);
d_worrall 0:e62e06e11575 209 LPC_SC->PCLKSEL1 |= (1 << 23);
d_worrall 0:e62e06e11575 210 break;
d_worrall 0:e62e06e11575 211 default:
d_worrall 0:e62e06e11575 212 break;
d_worrall 0:e62e06e11575 213 }
d_worrall 0:e62e06e11575 214 }
d_worrall 0:e62e06e11575 215 /******************************************************
d_worrall 0:e62e06e11575 216 * Function name: setPins_()
d_worrall 0:e62e06e11575 217 *
d_worrall 0:e62e06e11575 218 * Description: set external pin configuration
d_worrall 0:e62e06e11575 219 *
d_worrall 0:e62e06e11575 220 * Parameters: PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws
d_worrall 0:e62e06e11575 221 * Returns: none
d_worrall 0:e62e06e11575 222 ******************************************************/
d_worrall 0:e62e06e11575 223 void I2SSlave::setPins_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws){
d_worrall 0:e62e06e11575 224 if(rx_ws == p29){
d_worrall 0:e62e06e11575 225 LPC_PINCON->PINSEL0 |= (1 << 10); //set p29 as receive word select line
d_worrall 0:e62e06e11575 226 } else {
d_worrall 0:e62e06e11575 227 LPC_PINCON->PINSEL1 |= (2 << 16); //set p16 as receive word select line
d_worrall 0:e62e06e11575 228 }
d_worrall 0:e62e06e11575 229 if(rx_sda == p8){
d_worrall 0:e62e06e11575 230 LPC_PINCON->PINSEL0 |= (1 << 12); //set p8 as receive serial data line
d_worrall 0:e62e06e11575 231 } else {
d_worrall 0:e62e06e11575 232 LPC_PINCON->PINSEL1 |= (2 << 18); //set p17 as receive serial data line
d_worrall 0:e62e06e11575 233 }
d_worrall 0:e62e06e11575 234 LPC_PINCON->PINSEL0 |= (1 << 14); //set p7 as transmit clock line (only one of these)
d_worrall 0:e62e06e11575 235 LPC_PINCON->PINSEL0 |= (1 << 16); //set p6 as word select line (only one of these)
d_worrall 0:e62e06e11575 236 LPC_PINCON->PINSEL0 |= (1 << 18); //set p5 as transmit serial data line (only one of these)
d_worrall 0:e62e06e11575 237 LPC_PINCON->PINSEL0 |= (0 << 8); //clear rx_clk
d_worrall 0:e62e06e11575 238 }
d_worrall 0:e62e06e11575 239 /******************************************************
d_worrall 0:e62e06e11575 240 * Function name: format_()
d_worrall 0:e62e06e11575 241 *
d_worrall 0:e62e06e11575 242 * Description: sets the bit length for writing and stereo or mono mode
d_worrall 0:e62e06e11575 243 *
d_worrall 0:e62e06e11575 244 * Parameters: int bit, bool mode
d_worrall 0:e62e06e11575 245 * Returns: none
d_worrall 0:e62e06e11575 246 ******************************************************/
d_worrall 0:e62e06e11575 247 void I2SSlave::format_(int bit, bool mode){
d_worrall 0:e62e06e11575 248 uint32_t bps= ((bit+1)*8)-1;
d_worrall 0:e62e06e11575 249 LPC_I2S->I2SDAO &= (0x00 << 6);
d_worrall 0:e62e06e11575 250 LPC_I2S->I2SDAO |= (bps << 6);
d_worrall 0:e62e06e11575 251 //set bit length
d_worrall 0:e62e06e11575 252 switch(bit){
d_worrall 0:e62e06e11575 253 case 8:
d_worrall 0:e62e06e11575 254 LPC_I2S->I2SDAO &= 0xfffffffc;
d_worrall 0:e62e06e11575 255 break;
d_worrall 0:e62e06e11575 256 case 16:
d_worrall 0:e62e06e11575 257 LPC_I2S->I2SDAO &= (0 << 1);
d_worrall 0:e62e06e11575 258 LPC_I2S->I2SDAO |= (1 << 0);
d_worrall 0:e62e06e11575 259 break;
d_worrall 0:e62e06e11575 260 case 32:
d_worrall 0:e62e06e11575 261 LPC_I2S->I2SDAO &= (0 << 1);
d_worrall 0:e62e06e11575 262 LPC_I2S->I2SDAO |= (3 << 0);
d_worrall 0:e62e06e11575 263 break;
d_worrall 0:e62e06e11575 264 default:
d_worrall 0:e62e06e11575 265 break;
d_worrall 0:e62e06e11575 266 }
d_worrall 0:e62e06e11575 267 //set audio mode
d_worrall 0:e62e06e11575 268 if(mode == STEREO){
d_worrall 0:e62e06e11575 269 LPC_I2S->I2SDAO |= (0 << 2);
d_worrall 0:e62e06e11575 270 } else {
d_worrall 0:e62e06e11575 271 LPC_I2S->I2SDAO |= (1 << 2);
d_worrall 0:e62e06e11575 272 }
d_worrall 0:e62e06e11575 273 //set transmitter and receiver setting to be the same
d_worrall 0:e62e06e11575 274 LPC_I2S->I2SDAI &= (0x00 << 6);
d_worrall 0:e62e06e11575 275 LPC_I2S->I2SDAI |= (bps << 6);
d_worrall 0:e62e06e11575 276 //set bit length
d_worrall 0:e62e06e11575 277 switch(bit){
d_worrall 0:e62e06e11575 278 case 8:
d_worrall 0:e62e06e11575 279 LPC_I2S->I2SDAI &= 0xfffffffc;
d_worrall 0:e62e06e11575 280 break;
d_worrall 0:e62e06e11575 281 case 16:
d_worrall 0:e62e06e11575 282 LPC_I2S->I2SDAI &= (0 << 1);
d_worrall 0:e62e06e11575 283 LPC_I2S->I2SDAI |= (1 << 0);
d_worrall 0:e62e06e11575 284 break;
d_worrall 0:e62e06e11575 285 case 32:
d_worrall 0:e62e06e11575 286 LPC_I2S->I2SDAI &= (0 << 1);
d_worrall 0:e62e06e11575 287 LPC_I2S->I2SDAI |= (3 << 0);
d_worrall 0:e62e06e11575 288 break;
d_worrall 0:e62e06e11575 289 default:
d_worrall 0:e62e06e11575 290 break;
d_worrall 0:e62e06e11575 291 }
d_worrall 0:e62e06e11575 292 //set audio mode
d_worrall 0:e62e06e11575 293 if(mode == STEREO){
d_worrall 0:e62e06e11575 294 LPC_I2S->I2SDAI |= (0 << 2);
d_worrall 0:e62e06e11575 295 } else {
d_worrall 0:e62e06e11575 296 LPC_I2S->I2SDAI |= (1 << 2);
d_worrall 0:e62e06e11575 297 }
d_worrall 0:e62e06e11575 298 }
d_worrall 0:e62e06e11575 299 /******************************************************
d_worrall 0:e62e06e11575 300 * Function name: modeConfig_()
d_worrall 0:e62e06e11575 301 *
d_worrall 0:e62e06e11575 302 * Description: Set slave mode
d_worrall 0:e62e06e11575 303 *
d_worrall 0:e62e06e11575 304 * Parameters: none
d_worrall 0:e62e06e11575 305 * Returns: none
d_worrall 0:e62e06e11575 306 ******************************************************/
d_worrall 0:e62e06e11575 307 void I2SSlave::modeConfig_(void){
d_worrall 0:e62e06e11575 308 LPC_I2S->I2STXMODE |= (0x0 << 0);
d_worrall 0:e62e06e11575 309 LPC_I2S->I2SRXMODE |= (0x0 << 0);
d_worrall 0:e62e06e11575 310 }
d_worrall 0:e62e06e11575 311 /******************************************************
d_worrall 0:e62e06e11575 312 * Function name: storePins_()
d_worrall 0:e62e06e11575 313 *
d_worrall 0:e62e06e11575 314 * Description: set external pin configuration
d_worrall 0:e62e06e11575 315 *
d_worrall 0:e62e06e11575 316 * Parameters: PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws
d_worrall 0:e62e06e11575 317 * Returns: none
d_worrall 0:e62e06e11575 318 ******************************************************/
d_worrall 0:e62e06e11575 319 void I2SSlave::storePins_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws){
d_worrall 0:e62e06e11575 320 tx_sda_ = tx_sda;
d_worrall 0:e62e06e11575 321 tx_ws_ = tx_ws;
d_worrall 0:e62e06e11575 322 clk_ = clk;
d_worrall 0:e62e06e11575 323 rx_sda_ = rx_sda;
d_worrall 0:e62e06e11575 324 rx_ws_ = rx_ws;
d_worrall 0:e62e06e11575 325 }