Last commit 06 Jun 2012
Description: Bug report: CMSIS - Incomplete compilation log
lpc17xx_i2s.c
00001 /********************************************************************** 00002 * $Id$ lpc17xx_i2s.c 2010-09-23 00003 *//** 00004 * @file lpc17xx_gpio.c 00005 * @brief Contains all functions support for I2S firmware 00006 * library on LPC17xx 00007 * @version 3.1 00008 * @date 23. Sep. 2010 00009 * @author NXP MCU SW Application Team 00010 * 00011 * Copyright(C) 2010, NXP Semiconductor 00012 * All rights reserved. 00013 * 00014 *********************************************************************** 00015 * Software that is described herein is for illustrative purposes only 00016 * which provides customers with programming information regarding the 00017 * products. This software is supplied "AS IS" without any warranties. 00018 * NXP Semiconductors assumes no responsibility or liability for the 00019 * use of the software, conveys no license or title under any patent, 00020 * copyright, or mask work right to the product. NXP Semiconductors 00021 * reserves the right to make changes in the software without 00022 * notification. NXP Semiconductors also make no representation or 00023 * warranty that such application will be suitable for the specified 00024 * use without further testing or modification. 00025 **********************************************************************/ 00026 00027 /* Peripheral group ----------------------------------------------------------- */ 00028 /** @addtogroup I2S 00029 * @{ 00030 */ 00031 00032 /* Includes ------------------------------------------------------------------- */ 00033 #include "lpc17xx_i2s.h" 00034 #include "lpc17xx_clkpwr.h" 00035 00036 00037 /* If this source file built with example, the LPC17xx FW library configuration 00038 * file in each example directory ("lpc17xx_libcfg.h") must be included, 00039 * otherwise the default FW library configuration file must be included instead 00040 */ 00041 #ifdef __BUILD_WITH_EXAMPLE__ 00042 #include "lpc17xx_libcfg.h" 00043 #else 00044 #include "lpc17xx_libcfg_default.h" 00045 #endif /* __BUILD_WITH_EXAMPLE__ */ 00046 00047 00048 #ifdef _I2S 00049 00050 /* Private Functions ---------------------------------------------------------- */ 00051 00052 static uint8_t i2s_GetWordWidth(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode); 00053 static uint8_t i2s_GetChannel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode); 00054 00055 /********************************************************************//** 00056 * @brief Get I2S wordwidth value 00057 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00058 * @param[in] TRMode is the I2S mode, should be: 00059 * - I2S_TX_MODE = 0: transmit mode 00060 * - I2S_RX_MODE = 1: receive mode 00061 * @return The wordwidth value, should be: 8,16 or 32 00062 *********************************************************************/ 00063 static uint8_t i2s_GetWordWidth(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) { 00064 uint8_t value; 00065 00066 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00067 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00068 00069 if (TRMode == I2S_TX_MODE) { 00070 value = (I2Sx->I2SDAO) & 0x03; /* get wordwidth bit */ 00071 } else { 00072 value = (I2Sx->I2SDAI) & 0x03; /* get wordwidth bit */ 00073 } 00074 switch (value) { 00075 case I2S_WORDWIDTH_8: 00076 return 8; 00077 case I2S_WORDWIDTH_16: 00078 return 16; 00079 default: 00080 return 32; 00081 } 00082 } 00083 00084 /********************************************************************//** 00085 * @brief Get I2S channel value 00086 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00087 * @param[in] TRMode is the I2S mode, should be: 00088 * - I2S_TX_MODE = 0: transmit mode 00089 * - I2S_RX_MODE = 1: receive mode 00090 * @return The channel value, should be: 1(mono) or 2(stereo) 00091 *********************************************************************/ 00092 static uint8_t i2s_GetChannel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) { 00093 uint8_t value; 00094 00095 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00096 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00097 00098 if (TRMode == I2S_TX_MODE) { 00099 value = ((I2Sx->I2SDAO) & 0x04)>>2; /* get bit[2] */ 00100 } else { 00101 value = ((I2Sx->I2SDAI) & 0x04)>>2; /* get bit[2] */ 00102 } 00103 if(value == I2S_MONO) return 1; 00104 return 2; 00105 } 00106 00107 /* End of Private Functions --------------------------------------------------- */ 00108 00109 00110 /* Public Functions ----------------------------------------------------------- */ 00111 /** @addtogroup I2S_Public_Functions 00112 * @{ 00113 */ 00114 00115 /********************************************************************//** 00116 * @brief Initialize I2S 00117 * - Turn on power and clock 00118 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00119 * @return none 00120 *********************************************************************/ 00121 void I2S_Init(LPC_I2S_TypeDef *I2Sx) { 00122 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00123 00124 // Turn on power and clock 00125 CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCI2S, ENABLE); 00126 LPC_I2S->I2SDAI = LPC_I2S->I2SDAO = 0x00; 00127 } 00128 00129 /********************************************************************//** 00130 * @brief Configuration I2S, setting: 00131 * - master/slave mode 00132 * - wordwidth value 00133 * - channel mode 00134 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00135 * @param[in] TRMode transmit/receive mode, should be: 00136 * - I2S_TX_MODE = 0: transmit mode 00137 * - I2S_RX_MODE = 1: receive mode 00138 * @param[in] ConfigStruct pointer to I2S_CFG_Type structure 00139 * which will be initialized. 00140 * @return none 00141 *********************************************************************/ 00142 void I2S_Config(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, I2S_CFG_Type* ConfigStruct) 00143 { 00144 uint32_t bps, config; 00145 00146 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00147 00148 CHECK_PARAM(PARAM_I2S_WORDWIDTH(ConfigStruct->wordwidth)); 00149 CHECK_PARAM(PARAM_I2S_CHANNEL(ConfigStruct->mono)); 00150 CHECK_PARAM(PARAM_I2S_STOP(ConfigStruct->stop)); 00151 CHECK_PARAM(PARAM_I2S_RESET(ConfigStruct->reset)); 00152 CHECK_PARAM(PARAM_I2S_WS_SEL(ConfigStruct->ws_sel)); 00153 CHECK_PARAM(PARAM_I2S_MUTE(ConfigStruct->mute)); 00154 00155 /* Setup clock */ 00156 bps = (ConfigStruct->wordwidth +1)*8; 00157 00158 /* Calculate audio config */ 00159 config = (bps - 1)<<6 | (ConfigStruct->ws_sel)<<5 | (ConfigStruct->reset)<<4 | 00160 (ConfigStruct->stop)<<3 | (ConfigStruct->mono)<<2 | (ConfigStruct->wordwidth); 00161 00162 if(TRMode == I2S_RX_MODE){ 00163 LPC_I2S->I2SDAI = config; 00164 }else{ 00165 LPC_I2S->I2SDAO = config; 00166 } 00167 } 00168 00169 /********************************************************************//** 00170 * @brief DeInitial both I2S transmit or receive 00171 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00172 * @return none 00173 *********************************************************************/ 00174 void I2S_DeInit(LPC_I2S_TypeDef *I2Sx) { 00175 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00176 00177 // Turn off power and clock 00178 CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCI2S, DISABLE); 00179 } 00180 00181 /********************************************************************//** 00182 * @brief Get I2S Buffer Level 00183 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00184 * @param[in] TRMode Transmit/receive mode, should be: 00185 * - I2S_TX_MODE = 0: transmit mode 00186 * - I2S_RX_MODE = 1: receive mode 00187 * @return current level of Transmit/Receive Buffer 00188 *********************************************************************/ 00189 uint8_t I2S_GetLevel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) 00190 { 00191 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00192 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00193 00194 if(TRMode == I2S_TX_MODE) 00195 { 00196 return ((I2Sx->I2SSTATE >> 16) & 0xFF); 00197 } 00198 else 00199 { 00200 return ((I2Sx->I2SSTATE >> 8) & 0xFF); 00201 } 00202 } 00203 00204 /********************************************************************//** 00205 * @brief I2S Start: clear all STOP,RESET and MUTE bit, ready to operate 00206 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00207 * @return none 00208 *********************************************************************/ 00209 void I2S_Start(LPC_I2S_TypeDef *I2Sx) 00210 { 00211 //Clear STOP,RESET and MUTE bit 00212 I2Sx->I2SDAO &= ~I2S_DAI_RESET; 00213 I2Sx->I2SDAI &= ~I2S_DAI_RESET; 00214 I2Sx->I2SDAO &= ~I2S_DAI_STOP; 00215 I2Sx->I2SDAI &= ~I2S_DAI_STOP; 00216 I2Sx->I2SDAO &= ~I2S_DAI_MUTE; 00217 } 00218 00219 /********************************************************************//** 00220 * @brief I2S Send data 00221 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00222 * @param[in] BufferData pointer to uint32_t is the data will be send 00223 * @return none 00224 *********************************************************************/ 00225 void I2S_Send(LPC_I2S_TypeDef *I2Sx, uint32_t BufferData) { 00226 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00227 00228 I2Sx->I2STXFIFO = BufferData; 00229 } 00230 00231 /********************************************************************//** 00232 * @brief I2S Receive Data 00233 * @param[in] I2Sx pointer to LPC_I2S_TypeDef 00234 * @return received value 00235 *********************************************************************/ 00236 uint32_t I2S_Receive(LPC_I2S_TypeDef* I2Sx) { 00237 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00238 00239 return (I2Sx->I2SRXFIFO); 00240 00241 } 00242 00243 /********************************************************************//** 00244 * @brief I2S Pause 00245 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00246 * @param[in] TRMode is transmit/receive mode, should be: 00247 * - I2S_TX_MODE = 0: transmit mode 00248 * - I2S_RX_MODE = 1: receive mode 00249 * @return none 00250 *********************************************************************/ 00251 void I2S_Pause(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) { 00252 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00253 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00254 00255 if (TRMode == I2S_TX_MODE) //Transmit mode 00256 { 00257 I2Sx->I2SDAO |= I2S_DAO_STOP; 00258 } else //Receive mode 00259 { 00260 I2Sx->I2SDAI |= I2S_DAI_STOP; 00261 } 00262 } 00263 00264 /********************************************************************//** 00265 * @brief I2S Mute 00266 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00267 * @param[in] TRMode is transmit/receive mode, should be: 00268 * - I2S_TX_MODE = 0: transmit mode 00269 * - I2S_RX_MODE = 1: receive mode 00270 * @return none 00271 *********************************************************************/ 00272 void I2S_Mute(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) { 00273 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00274 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00275 00276 if (TRMode == I2S_TX_MODE) //Transmit mode 00277 { 00278 I2Sx->I2SDAO |= I2S_DAO_MUTE; 00279 } else //Receive mode 00280 { 00281 I2Sx->I2SDAI |= I2S_DAI_MUTE; 00282 } 00283 } 00284 00285 /********************************************************************//** 00286 * @brief I2S Stop 00287 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00288 * @param[in] TRMode is transmit/receive mode, should be: 00289 * - I2S_TX_MODE = 0: transmit mode 00290 * - I2S_RX_MODE = 1: receive mode 00291 * @return none 00292 *********************************************************************/ 00293 void I2S_Stop(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) { 00294 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00295 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00296 00297 if (TRMode == I2S_TX_MODE) //Transmit mode 00298 { 00299 I2Sx->I2SDAO &= ~I2S_DAO_MUTE; 00300 I2Sx->I2SDAO |= I2S_DAO_STOP; 00301 I2Sx->I2SDAO |= I2S_DAO_RESET; 00302 } else //Receive mode 00303 { 00304 I2Sx->I2SDAI |= I2S_DAI_STOP; 00305 I2Sx->I2SDAI |= I2S_DAI_RESET; 00306 } 00307 } 00308 00309 /********************************************************************//** 00310 * @brief Set frequency for I2S 00311 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00312 * @param[in] Freq is the frequency for I2S will be set. It can range 00313 * from 16-96 kHz(16, 22.05, 32, 44.1, 48, 96kHz) 00314 * @param[in] TRMode is transmit/receive mode, should be: 00315 * - I2S_TX_MODE = 0: transmit mode 00316 * - I2S_RX_MODE = 1: receive mode 00317 * @return Status: ERROR or SUCCESS 00318 *********************************************************************/ 00319 Status I2S_FreqConfig(LPC_I2S_TypeDef *I2Sx, uint32_t Freq, uint8_t TRMode) { 00320 00321 uint32_t i2sMclk; 00322 uint8_t bitrate, channel, wordwidth; 00323 00324 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00325 CHECK_PARAM(PRAM_I2S_FREQ(Freq)); 00326 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00327 00328 //set i2s reference is i2s_pclk/2 as default 00329 i2sMclk = CLKPWR_GetPCLK(CLKPWR_PCLKSEL_I2S)/2; 00330 I2Sx->I2STXRATE = 1 | (1<<8); 00331 I2Sx->I2SRXRATE = 1 | (1<<8); 00332 if(TRMode == I2S_TX_MODE) 00333 { 00334 channel = i2s_GetChannel(I2Sx,I2S_TX_MODE); 00335 wordwidth = i2s_GetWordWidth(I2Sx,I2S_TX_MODE); 00336 } 00337 else 00338 { 00339 channel = i2s_GetChannel(I2Sx,I2S_RX_MODE); 00340 wordwidth = i2s_GetWordWidth(I2Sx,I2S_RX_MODE); 00341 } 00342 bitrate = i2sMclk/(Freq * channel * wordwidth) - 1; 00343 if (TRMode == I2S_TX_MODE)// Transmitter 00344 { 00345 I2Sx->I2STXBITRATE = bitrate; 00346 } else //Receiver 00347 { 00348 I2Sx->I2SRXBITRATE = bitrate; 00349 } 00350 return SUCCESS; 00351 } 00352 00353 /********************************************************************//** 00354 * @brief I2S set bitrate 00355 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00356 * @param[in] bitrate value will be set 00357 * bitrate value should be in range: 0 .. 63 00358 * @param[in] TRMode is transmit/receive mode, should be: 00359 * - I2S_TX_MODE = 0: transmit mode 00360 * - I2S_RX_MODE = 1: receive mode 00361 * @return none 00362 *********************************************************************/ 00363 void I2S_SetBitRate(LPC_I2S_TypeDef *I2Sx, uint8_t bitrate, uint8_t TRMode) 00364 { 00365 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00366 CHECK_PARAM(PARAM_I2S_BITRATE(bitrate)); 00367 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00368 00369 if(TRMode == I2S_TX_MODE) 00370 { 00371 I2Sx->I2STXBITRATE = bitrate; 00372 } 00373 else 00374 { 00375 I2Sx->I2SRXBITRATE = bitrate; 00376 } 00377 } 00378 00379 /********************************************************************//** 00380 * @brief Configuration operating mode for I2S 00381 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00382 * @param[in] ModeConfig pointer to I2S_MODEConf_Type will be used to 00383 * configure 00384 * @param[in] TRMode is transmit/receive mode, should be: 00385 * - I2S_TX_MODE = 0: transmit mode 00386 * - I2S_RX_MODE = 1: receive mode 00387 * @return none 00388 *********************************************************************/ 00389 void I2S_ModeConfig(LPC_I2S_TypeDef *I2Sx, I2S_MODEConf_Type* ModeConfig, 00390 uint8_t TRMode) 00391 { 00392 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00393 CHECK_PARAM(PARAM_I2S_CLKSEL(ModeConfig->clksel)); 00394 CHECK_PARAM(PARAM_I2S_4PIN(ModeConfig->fpin)); 00395 CHECK_PARAM(PARAM_I2S_MCLK(ModeConfig->mcena)); 00396 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00397 00398 if (TRMode == I2S_TX_MODE) { 00399 I2Sx->I2STXMODE &= ~0x0F; //clear bit 3:0 in I2STXMODE register 00400 if (ModeConfig->clksel == I2S_CLKSEL_MCLK) { 00401 I2Sx->I2STXMODE |= 0x02; 00402 } 00403 if (ModeConfig->fpin == I2S_4PIN_ENABLE) { 00404 I2Sx->I2STXMODE |= (1 << 2); 00405 } 00406 if (ModeConfig->mcena == I2S_MCLK_ENABLE) { 00407 I2Sx->I2STXMODE |= (1 << 3); 00408 } 00409 } else { 00410 I2Sx->I2SRXMODE &= ~0x0F; //clear bit 3:0 in I2STXMODE register 00411 if (ModeConfig->clksel == I2S_CLKSEL_MCLK) { 00412 I2Sx->I2SRXMODE |= 0x02; 00413 } 00414 if (ModeConfig->fpin == I2S_4PIN_ENABLE) { 00415 I2Sx->I2SRXMODE |= (1 << 2); 00416 } 00417 if (ModeConfig->mcena == I2S_MCLK_ENABLE) { 00418 I2Sx->I2SRXMODE |= (1 << 3); 00419 } 00420 } 00421 } 00422 00423 /********************************************************************//** 00424 * @brief Configure DMA operation for I2S 00425 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00426 * @param[in] DMAConfig pointer to I2S_DMAConf_Type will be used to configure 00427 * @param[in] TRMode is transmit/receive mode, should be: 00428 * - I2S_TX_MODE = 0: transmit mode 00429 * - I2S_RX_MODE = 1: receive mode 00430 * @return none 00431 *********************************************************************/ 00432 void I2S_DMAConfig(LPC_I2S_TypeDef *I2Sx, I2S_DMAConf_Type* DMAConfig, 00433 uint8_t TRMode) 00434 { 00435 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00436 CHECK_PARAM(PARAM_I2S_DMA(DMAConfig->DMAIndex)); 00437 CHECK_PARAM(PARAM_I2S_DMA_DEPTH(DMAConfig->depth)); 00438 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00439 00440 if (TRMode == I2S_RX_MODE) { 00441 if (DMAConfig->DMAIndex == I2S_DMA_1) { 00442 LPC_I2S->I2SDMA1 = (DMAConfig->depth) << 8; 00443 } else { 00444 LPC_I2S->I2SDMA2 = (DMAConfig->depth) << 8; 00445 } 00446 } else { 00447 if (DMAConfig->DMAIndex == I2S_DMA_1) { 00448 LPC_I2S->I2SDMA1 = (DMAConfig->depth) << 16; 00449 } else { 00450 LPC_I2S->I2SDMA2 = (DMAConfig->depth) << 16; 00451 } 00452 } 00453 } 00454 00455 /********************************************************************//** 00456 * @brief Enable/Disable DMA operation for I2S 00457 * @param[in] I2Sx: I2S peripheral selected, should be: LPC_I2S 00458 * @param[in] DMAIndex chose what DMA is used, should be: 00459 * - I2S_DMA_1 = 0: DMA1 00460 * - I2S_DMA_2 = 1: DMA2 00461 * @param[in] TRMode is transmit/receive mode, should be: 00462 * - I2S_TX_MODE = 0: transmit mode 00463 * - I2S_RX_MODE = 1: receive mode 00464 * @param[in] NewState is new state of DMA operation, should be: 00465 * - ENABLE 00466 * - DISABLE 00467 * @return none 00468 *********************************************************************/ 00469 void I2S_DMACmd(LPC_I2S_TypeDef *I2Sx, uint8_t DMAIndex, uint8_t TRMode, 00470 FunctionalState NewState) 00471 { 00472 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00473 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState)); 00474 CHECK_PARAM(PARAM_I2S_DMA(DMAIndex)); 00475 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00476 00477 if (TRMode == I2S_RX_MODE) { 00478 if (DMAIndex == I2S_DMA_1) { 00479 if (NewState == ENABLE) 00480 I2Sx->I2SDMA1 |= 0x01; 00481 else 00482 I2Sx->I2SDMA1 &= ~0x01; 00483 } else { 00484 if (NewState == ENABLE) 00485 I2Sx->I2SDMA2 |= 0x01; 00486 else 00487 I2Sx->I2SDMA2 &= ~0x01; 00488 } 00489 } else { 00490 if (DMAIndex == I2S_DMA_1) { 00491 if (NewState == ENABLE) 00492 I2Sx->I2SDMA1 |= 0x02; 00493 else 00494 I2Sx->I2SDMA1 &= ~0x02; 00495 } else { 00496 if (NewState == ENABLE) 00497 I2Sx->I2SDMA2 |= 0x02; 00498 else 00499 I2Sx->I2SDMA2 &= ~0x02; 00500 } 00501 } 00502 } 00503 00504 /********************************************************************//** 00505 * @brief Configure IRQ for I2S 00506 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00507 * @param[in] TRMode is transmit/receive mode, should be: 00508 * - I2S_TX_MODE = 0: transmit mode 00509 * - I2S_RX_MODE = 1: receive mode 00510 * @param[in] level is the FIFO level that triggers IRQ request 00511 * @return none 00512 *********************************************************************/ 00513 void I2S_IRQConfig(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, uint8_t level) { 00514 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00515 CHECK_PARAM(PARAM_I2S_TRX(TRMode)); 00516 CHECK_PARAM(PARAM_I2S_IRQ_LEVEL(level)); 00517 00518 if (TRMode == I2S_RX_MODE) { 00519 I2Sx->I2SIRQ |= (level << 8); 00520 } else { 00521 I2Sx->I2SIRQ |= (level << 16); 00522 } 00523 } 00524 00525 /********************************************************************//** 00526 * @brief Enable/Disable IRQ for I2S 00527 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00528 * @param[in] TRMode is transmit/receive mode, should be: 00529 * - I2S_TX_MODE = 0: transmit mode 00530 * - I2S_RX_MODE = 1: receive mode 00531 * @param[in] NewState is new state of DMA operation, should be: 00532 * - ENABLE 00533 * - DISABLE 00534 * @return none 00535 *********************************************************************/ 00536 void I2S_IRQCmd(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, FunctionalState NewState) { 00537 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00538 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState)); 00539 00540 if (TRMode == I2S_RX_MODE) { 00541 if (NewState == ENABLE) 00542 I2Sx->I2SIRQ |= 0x01; 00543 else 00544 I2Sx->I2SIRQ &= ~0x01; 00545 //Enable DMA 00546 00547 } else { 00548 if (NewState == ENABLE) 00549 I2Sx->I2SIRQ |= 0x02; 00550 else 00551 I2Sx->I2SIRQ &= ~0x02; 00552 } 00553 } 00554 00555 /********************************************************************//** 00556 * @brief Get I2S interrupt status 00557 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00558 * @param[in] TRMode is transmit/receive mode, should be: 00559 * - I2S_TX_MODE = 0: transmit mode 00560 * - I2S_RX_MODE = 1: receive mode 00561 * @return FunctionState should be: 00562 * - ENABLE: interrupt is enable 00563 * - DISABLE: interrupt is disable 00564 *********************************************************************/ 00565 FunctionalState I2S_GetIRQStatus(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode) 00566 { 00567 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00568 if(TRMode == I2S_TX_MODE) 00569 return ((FunctionalState)((I2Sx->I2SIRQ >> 1)&0x01)); 00570 else 00571 return ((FunctionalState)((I2Sx->I2SIRQ)&0x01)); 00572 } 00573 00574 /********************************************************************//** 00575 * @brief Get I2S interrupt depth 00576 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S 00577 * @param[in] TRMode is transmit/receive mode, should be: 00578 * - I2S_TX_MODE = 0: transmit mode 00579 * - I2S_RX_MODE = 1: receive mode 00580 * @return depth of FIFO level on which to create an irq request 00581 *********************************************************************/ 00582 uint8_t I2S_GetIRQDepth(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode) 00583 { 00584 CHECK_PARAM(PARAM_I2Sx(I2Sx)); 00585 if(TRMode == I2S_TX_MODE) 00586 return (((I2Sx->I2SIRQ)>>16)&0xFF); 00587 else 00588 return (((I2Sx->I2SIRQ)>>8)&0xFF); 00589 } 00590 /** 00591 * @} 00592 */ 00593 00594 #endif /* _I2S */ 00595 00596 /** 00597 * @} 00598 */ 00599 00600 /* --------------------------------- End Of File ------------------------------ */ 00601
