Date: March 20, 2011 This library is created from "LPC17xx CMSIS-Compliant Standard Peripheral Firmware Driver Library (GNU, Keil, IAR) (Jan 28, 2011)", available from NXP's website, under "All microcontrollers support documents" [[http://ics.nxp.com/support/documents/microcontrollers/?type=software]] You will need to follow [[/projects/libraries/svn/mbed/trunk/LPC1768/LPC17xx.h]] while using this library Examples provided here [[/users/frank26080115/programs/LPC1700CMSIS_Examples/]] The beautiful thing is that NXP does not place copyright protection on any of the files in here Only a few modifications are made to make it compile with the mbed online compiler, I fixed some warnings as well. This is untested as of March 20, 2011 Forum post about this library: [[/forum/mbed/topic/2030/]]

Committer:
frank26080115
Date:
Sun Mar 20 18:45:15 2011 +0000
Revision:
0:84d7747641aa

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frank26080115 0:84d7747641aa 1 /***********************************************************************//**
frank26080115 0:84d7747641aa 2 * @file lpc17xx_i2s.c
frank26080115 0:84d7747641aa 3 * @brief Contains all functions support for I2S firmware library on LPC17xx
frank26080115 0:84d7747641aa 4 * @version 3.1
frank26080115 0:84d7747641aa 5 * @date 23. Sep. 2010
frank26080115 0:84d7747641aa 6 * @author NXP MCU SW Application Team
frank26080115 0:84d7747641aa 7 **************************************************************************
frank26080115 0:84d7747641aa 8 * Software that is described herein is for illustrative purposes only
frank26080115 0:84d7747641aa 9 * which provides customers with programming information regarding the
frank26080115 0:84d7747641aa 10 * products. This software is supplied "AS IS" without any warranties.
frank26080115 0:84d7747641aa 11 * NXP Semiconductors assumes no responsibility or liability for the
frank26080115 0:84d7747641aa 12 * use of the software, conveys no license or title under any patent,
frank26080115 0:84d7747641aa 13 * copyright, or mask work right to the product. NXP Semiconductors
frank26080115 0:84d7747641aa 14 * reserves the right to make changes in the software without
frank26080115 0:84d7747641aa 15 * notification. NXP Semiconductors also make no representation or
frank26080115 0:84d7747641aa 16 * warranty that such application will be suitable for the specified
frank26080115 0:84d7747641aa 17 * use without further testing or modification.
frank26080115 0:84d7747641aa 18 **********************************************************************/
frank26080115 0:84d7747641aa 19
frank26080115 0:84d7747641aa 20 /* Peripheral group ----------------------------------------------------------- */
frank26080115 0:84d7747641aa 21 /** @addtogroup I2S
frank26080115 0:84d7747641aa 22 * @{
frank26080115 0:84d7747641aa 23 */
frank26080115 0:84d7747641aa 24
frank26080115 0:84d7747641aa 25 /* Includes ------------------------------------------------------------------- */
frank26080115 0:84d7747641aa 26 #include "lpc17xx_i2s.h"
frank26080115 0:84d7747641aa 27 #include "lpc17xx_clkpwr.h"
frank26080115 0:84d7747641aa 28
frank26080115 0:84d7747641aa 29
frank26080115 0:84d7747641aa 30 /* If this source file built with example, the LPC17xx FW library configuration
frank26080115 0:84d7747641aa 31 * file in each example directory ("lpc17xx_libcfg.h") must be included,
frank26080115 0:84d7747641aa 32 * otherwise the default FW library configuration file must be included instead
frank26080115 0:84d7747641aa 33 */
frank26080115 0:84d7747641aa 34 #ifdef __BUILD_WITH_EXAMPLE__
frank26080115 0:84d7747641aa 35 #include "lpc17xx_libcfg.h"
frank26080115 0:84d7747641aa 36 #else
frank26080115 0:84d7747641aa 37 #include "lpc17xx_libcfg_default.h"
frank26080115 0:84d7747641aa 38 #endif /* __BUILD_WITH_EXAMPLE__ */
frank26080115 0:84d7747641aa 39
frank26080115 0:84d7747641aa 40
frank26080115 0:84d7747641aa 41 #ifdef _I2S
frank26080115 0:84d7747641aa 42
frank26080115 0:84d7747641aa 43 /* Private Functions ---------------------------------------------------------- */
frank26080115 0:84d7747641aa 44
frank26080115 0:84d7747641aa 45 static uint8_t i2s_GetWordWidth(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode);
frank26080115 0:84d7747641aa 46 static uint8_t i2s_GetChannel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode);
frank26080115 0:84d7747641aa 47
frank26080115 0:84d7747641aa 48 /********************************************************************//**
frank26080115 0:84d7747641aa 49 * @brief Get I2S wordwidth value
frank26080115 0:84d7747641aa 50 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 51 * @param[in] TRMode is the I2S mode, should be:
frank26080115 0:84d7747641aa 52 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 53 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 54 * @return The wordwidth value, should be: 8,16 or 32
frank26080115 0:84d7747641aa 55 *********************************************************************/
frank26080115 0:84d7747641aa 56 static uint8_t i2s_GetWordWidth(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
frank26080115 0:84d7747641aa 57 uint8_t value;
frank26080115 0:84d7747641aa 58
frank26080115 0:84d7747641aa 59 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 60 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 61
frank26080115 0:84d7747641aa 62 if (TRMode == I2S_TX_MODE) {
frank26080115 0:84d7747641aa 63 value = (I2Sx->I2SDAO) & 0x03; /* get wordwidth bit */
frank26080115 0:84d7747641aa 64 } else {
frank26080115 0:84d7747641aa 65 value = (I2Sx->I2SDAI) & 0x03; /* get wordwidth bit */
frank26080115 0:84d7747641aa 66 }
frank26080115 0:84d7747641aa 67 switch (value) {
frank26080115 0:84d7747641aa 68 case I2S_WORDWIDTH_8:
frank26080115 0:84d7747641aa 69 return 8;
frank26080115 0:84d7747641aa 70 case I2S_WORDWIDTH_16:
frank26080115 0:84d7747641aa 71 return 16;
frank26080115 0:84d7747641aa 72 default:
frank26080115 0:84d7747641aa 73 return 32;
frank26080115 0:84d7747641aa 74 }
frank26080115 0:84d7747641aa 75 }
frank26080115 0:84d7747641aa 76
frank26080115 0:84d7747641aa 77 /********************************************************************//**
frank26080115 0:84d7747641aa 78 * @brief Get I2S channel value
frank26080115 0:84d7747641aa 79 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 80 * @param[in] TRMode is the I2S mode, should be:
frank26080115 0:84d7747641aa 81 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 82 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 83 * @return The channel value, should be: 1(mono) or 2(stereo)
frank26080115 0:84d7747641aa 84 *********************************************************************/
frank26080115 0:84d7747641aa 85 static uint8_t i2s_GetChannel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
frank26080115 0:84d7747641aa 86 uint8_t value;
frank26080115 0:84d7747641aa 87
frank26080115 0:84d7747641aa 88 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 89 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 90
frank26080115 0:84d7747641aa 91 if (TRMode == I2S_TX_MODE) {
frank26080115 0:84d7747641aa 92 value = ((I2Sx->I2SDAO) & 0x04)>>2; /* get bit[2] */
frank26080115 0:84d7747641aa 93 } else {
frank26080115 0:84d7747641aa 94 value = ((I2Sx->I2SDAI) & 0x04)>>2; /* get bit[2] */
frank26080115 0:84d7747641aa 95 }
frank26080115 0:84d7747641aa 96 if(value == I2S_MONO) return 1;
frank26080115 0:84d7747641aa 97 return 2;
frank26080115 0:84d7747641aa 98 }
frank26080115 0:84d7747641aa 99
frank26080115 0:84d7747641aa 100 /* End of Private Functions --------------------------------------------------- */
frank26080115 0:84d7747641aa 101
frank26080115 0:84d7747641aa 102
frank26080115 0:84d7747641aa 103 /* Public Functions ----------------------------------------------------------- */
frank26080115 0:84d7747641aa 104 /** @addtogroup I2S_Public_Functions
frank26080115 0:84d7747641aa 105 * @{
frank26080115 0:84d7747641aa 106 */
frank26080115 0:84d7747641aa 107
frank26080115 0:84d7747641aa 108 /********************************************************************//**
frank26080115 0:84d7747641aa 109 * @brief Initialize I2S
frank26080115 0:84d7747641aa 110 * - Turn on power and clock
frank26080115 0:84d7747641aa 111 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 112 * @return none
frank26080115 0:84d7747641aa 113 *********************************************************************/
frank26080115 0:84d7747641aa 114 void I2S_Init(LPC_I2S_TypeDef *I2Sx) {
frank26080115 0:84d7747641aa 115 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 116
frank26080115 0:84d7747641aa 117 // Turn on power and clock
frank26080115 0:84d7747641aa 118 CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCI2S, ENABLE);
frank26080115 0:84d7747641aa 119 LPC_I2S->I2SDAI = LPC_I2S->I2SDAO = 0x00;
frank26080115 0:84d7747641aa 120 }
frank26080115 0:84d7747641aa 121
frank26080115 0:84d7747641aa 122 /********************************************************************//**
frank26080115 0:84d7747641aa 123 * @brief Configuration I2S, setting:
frank26080115 0:84d7747641aa 124 * - master/slave mode
frank26080115 0:84d7747641aa 125 * - wordwidth value
frank26080115 0:84d7747641aa 126 * - channel mode
frank26080115 0:84d7747641aa 127 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 128 * @param[in] TRMode transmit/receive mode, should be:
frank26080115 0:84d7747641aa 129 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 130 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 131 * @param[in] ConfigStruct pointer to I2S_CFG_Type structure
frank26080115 0:84d7747641aa 132 * which will be initialized.
frank26080115 0:84d7747641aa 133 * @return none
frank26080115 0:84d7747641aa 134 *********************************************************************/
frank26080115 0:84d7747641aa 135 void I2S_Config(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, I2S_CFG_Type* ConfigStruct)
frank26080115 0:84d7747641aa 136 {
frank26080115 0:84d7747641aa 137 uint32_t bps, config;
frank26080115 0:84d7747641aa 138
frank26080115 0:84d7747641aa 139 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 140
frank26080115 0:84d7747641aa 141 CHECK_PARAM(PARAM_I2S_WORDWIDTH(ConfigStruct->wordwidth));
frank26080115 0:84d7747641aa 142 CHECK_PARAM(PARAM_I2S_CHANNEL(ConfigStruct->mono));
frank26080115 0:84d7747641aa 143 CHECK_PARAM(PARAM_I2S_STOP(ConfigStruct->stop));
frank26080115 0:84d7747641aa 144 CHECK_PARAM(PARAM_I2S_RESET(ConfigStruct->reset));
frank26080115 0:84d7747641aa 145 CHECK_PARAM(PARAM_I2S_WS_SEL(ConfigStruct->ws_sel));
frank26080115 0:84d7747641aa 146 CHECK_PARAM(PARAM_I2S_MUTE(ConfigStruct->mute));
frank26080115 0:84d7747641aa 147
frank26080115 0:84d7747641aa 148 /* Setup clock */
frank26080115 0:84d7747641aa 149 bps = (ConfigStruct->wordwidth +1)*8;
frank26080115 0:84d7747641aa 150
frank26080115 0:84d7747641aa 151 /* Calculate audio config */
frank26080115 0:84d7747641aa 152 config = (bps - 1)<<6 | (ConfigStruct->ws_sel)<<5 | (ConfigStruct->reset)<<4 |
frank26080115 0:84d7747641aa 153 (ConfigStruct->stop)<<3 | (ConfigStruct->mono)<<2 | (ConfigStruct->wordwidth);
frank26080115 0:84d7747641aa 154
frank26080115 0:84d7747641aa 155 if(TRMode == I2S_RX_MODE){
frank26080115 0:84d7747641aa 156 LPC_I2S->I2SDAI = config;
frank26080115 0:84d7747641aa 157 }else{
frank26080115 0:84d7747641aa 158 LPC_I2S->I2SDAO = config;
frank26080115 0:84d7747641aa 159 }
frank26080115 0:84d7747641aa 160 }
frank26080115 0:84d7747641aa 161
frank26080115 0:84d7747641aa 162 /********************************************************************//**
frank26080115 0:84d7747641aa 163 * @brief DeInitial both I2S transmit or receive
frank26080115 0:84d7747641aa 164 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 165 * @return none
frank26080115 0:84d7747641aa 166 *********************************************************************/
frank26080115 0:84d7747641aa 167 void I2S_DeInit(LPC_I2S_TypeDef *I2Sx) {
frank26080115 0:84d7747641aa 168 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 169
frank26080115 0:84d7747641aa 170 // Turn off power and clock
frank26080115 0:84d7747641aa 171 CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCI2S, DISABLE);
frank26080115 0:84d7747641aa 172 }
frank26080115 0:84d7747641aa 173
frank26080115 0:84d7747641aa 174 /********************************************************************//**
frank26080115 0:84d7747641aa 175 * @brief Get I2S Buffer Level
frank26080115 0:84d7747641aa 176 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 177 * @param[in] TRMode Transmit/receive mode, should be:
frank26080115 0:84d7747641aa 178 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 179 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 180 * @return current level of Transmit/Receive Buffer
frank26080115 0:84d7747641aa 181 *********************************************************************/
frank26080115 0:84d7747641aa 182 uint8_t I2S_GetLevel(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode)
frank26080115 0:84d7747641aa 183 {
frank26080115 0:84d7747641aa 184 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 185 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 186
frank26080115 0:84d7747641aa 187 if(TRMode == I2S_TX_MODE)
frank26080115 0:84d7747641aa 188 {
frank26080115 0:84d7747641aa 189 return ((I2Sx->I2SSTATE >> 16) & 0xFF);
frank26080115 0:84d7747641aa 190 }
frank26080115 0:84d7747641aa 191 else
frank26080115 0:84d7747641aa 192 {
frank26080115 0:84d7747641aa 193 return ((I2Sx->I2SSTATE >> 8) & 0xFF);
frank26080115 0:84d7747641aa 194 }
frank26080115 0:84d7747641aa 195 }
frank26080115 0:84d7747641aa 196
frank26080115 0:84d7747641aa 197 /********************************************************************//**
frank26080115 0:84d7747641aa 198 * @brief I2S Start: clear all STOP,RESET and MUTE bit, ready to operate
frank26080115 0:84d7747641aa 199 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 200 * @return none
frank26080115 0:84d7747641aa 201 *********************************************************************/
frank26080115 0:84d7747641aa 202 void I2S_Start(LPC_I2S_TypeDef *I2Sx)
frank26080115 0:84d7747641aa 203 {
frank26080115 0:84d7747641aa 204 //Clear STOP,RESET and MUTE bit
frank26080115 0:84d7747641aa 205 I2Sx->I2SDAO &= ~I2S_DAI_RESET;
frank26080115 0:84d7747641aa 206 I2Sx->I2SDAI &= ~I2S_DAI_RESET;
frank26080115 0:84d7747641aa 207 I2Sx->I2SDAO &= ~I2S_DAI_STOP;
frank26080115 0:84d7747641aa 208 I2Sx->I2SDAI &= ~I2S_DAI_STOP;
frank26080115 0:84d7747641aa 209 I2Sx->I2SDAO &= ~I2S_DAI_MUTE;
frank26080115 0:84d7747641aa 210 }
frank26080115 0:84d7747641aa 211
frank26080115 0:84d7747641aa 212 /********************************************************************//**
frank26080115 0:84d7747641aa 213 * @brief I2S Send data
frank26080115 0:84d7747641aa 214 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 215 * @param[in] BufferData pointer to uint32_t is the data will be send
frank26080115 0:84d7747641aa 216 * @return none
frank26080115 0:84d7747641aa 217 *********************************************************************/
frank26080115 0:84d7747641aa 218 void I2S_Send(LPC_I2S_TypeDef *I2Sx, uint32_t BufferData) {
frank26080115 0:84d7747641aa 219 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 220
frank26080115 0:84d7747641aa 221 I2Sx->I2STXFIFO = BufferData;
frank26080115 0:84d7747641aa 222 }
frank26080115 0:84d7747641aa 223
frank26080115 0:84d7747641aa 224 /********************************************************************//**
frank26080115 0:84d7747641aa 225 * @brief I2S Receive Data
frank26080115 0:84d7747641aa 226 * @param[in] I2Sx pointer to LPC_I2S_TypeDef
frank26080115 0:84d7747641aa 227 * @return received value
frank26080115 0:84d7747641aa 228 *********************************************************************/
frank26080115 0:84d7747641aa 229 uint32_t I2S_Receive(LPC_I2S_TypeDef* I2Sx) {
frank26080115 0:84d7747641aa 230 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 231
frank26080115 0:84d7747641aa 232 return (I2Sx->I2SRXFIFO);
frank26080115 0:84d7747641aa 233
frank26080115 0:84d7747641aa 234 }
frank26080115 0:84d7747641aa 235
frank26080115 0:84d7747641aa 236 /********************************************************************//**
frank26080115 0:84d7747641aa 237 * @brief I2S Pause
frank26080115 0:84d7747641aa 238 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 239 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 240 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 241 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 242 * @return none
frank26080115 0:84d7747641aa 243 *********************************************************************/
frank26080115 0:84d7747641aa 244 void I2S_Pause(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
frank26080115 0:84d7747641aa 245 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 246 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 247
frank26080115 0:84d7747641aa 248 if (TRMode == I2S_TX_MODE) //Transmit mode
frank26080115 0:84d7747641aa 249 {
frank26080115 0:84d7747641aa 250 I2Sx->I2SDAO |= I2S_DAO_STOP;
frank26080115 0:84d7747641aa 251 } else //Receive mode
frank26080115 0:84d7747641aa 252 {
frank26080115 0:84d7747641aa 253 I2Sx->I2SDAI |= I2S_DAI_STOP;
frank26080115 0:84d7747641aa 254 }
frank26080115 0:84d7747641aa 255 }
frank26080115 0:84d7747641aa 256
frank26080115 0:84d7747641aa 257 /********************************************************************//**
frank26080115 0:84d7747641aa 258 * @brief I2S Mute
frank26080115 0:84d7747641aa 259 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 260 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 261 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 262 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 263 * @return none
frank26080115 0:84d7747641aa 264 *********************************************************************/
frank26080115 0:84d7747641aa 265 void I2S_Mute(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
frank26080115 0:84d7747641aa 266 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 267 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 268
frank26080115 0:84d7747641aa 269 if (TRMode == I2S_TX_MODE) //Transmit mode
frank26080115 0:84d7747641aa 270 {
frank26080115 0:84d7747641aa 271 I2Sx->I2SDAO |= I2S_DAO_MUTE;
frank26080115 0:84d7747641aa 272 } else //Receive mode
frank26080115 0:84d7747641aa 273 {
frank26080115 0:84d7747641aa 274 I2Sx->I2SDAI |= I2S_DAI_MUTE;
frank26080115 0:84d7747641aa 275 }
frank26080115 0:84d7747641aa 276 }
frank26080115 0:84d7747641aa 277
frank26080115 0:84d7747641aa 278 /********************************************************************//**
frank26080115 0:84d7747641aa 279 * @brief I2S Stop
frank26080115 0:84d7747641aa 280 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 281 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 282 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 283 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 284 * @return none
frank26080115 0:84d7747641aa 285 *********************************************************************/
frank26080115 0:84d7747641aa 286 void I2S_Stop(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode) {
frank26080115 0:84d7747641aa 287 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 288 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 289
frank26080115 0:84d7747641aa 290 if (TRMode == I2S_TX_MODE) //Transmit mode
frank26080115 0:84d7747641aa 291 {
frank26080115 0:84d7747641aa 292 I2Sx->I2SDAO &= ~I2S_DAO_MUTE;
frank26080115 0:84d7747641aa 293 I2Sx->I2SDAO |= I2S_DAO_STOP;
frank26080115 0:84d7747641aa 294 I2Sx->I2SDAO |= I2S_DAO_RESET;
frank26080115 0:84d7747641aa 295 } else //Receive mode
frank26080115 0:84d7747641aa 296 {
frank26080115 0:84d7747641aa 297 I2Sx->I2SDAI |= I2S_DAI_STOP;
frank26080115 0:84d7747641aa 298 I2Sx->I2SDAI |= I2S_DAI_RESET;
frank26080115 0:84d7747641aa 299 }
frank26080115 0:84d7747641aa 300 }
frank26080115 0:84d7747641aa 301
frank26080115 0:84d7747641aa 302 /********************************************************************//**
frank26080115 0:84d7747641aa 303 * @brief Set frequency for I2S
frank26080115 0:84d7747641aa 304 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 305 * @param[in] Freq is the frequency for I2S will be set. It can range
frank26080115 0:84d7747641aa 306 * from 16-96 kHz(16, 22.05, 32, 44.1, 48, 96kHz)
frank26080115 0:84d7747641aa 307 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 308 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 309 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 310 * @return Status: ERROR or SUCCESS
frank26080115 0:84d7747641aa 311 *********************************************************************/
frank26080115 0:84d7747641aa 312 Status I2S_FreqConfig(LPC_I2S_TypeDef *I2Sx, uint32_t Freq, uint8_t TRMode) {
frank26080115 0:84d7747641aa 313
frank26080115 0:84d7747641aa 314 uint32_t i2sMclk;
frank26080115 0:84d7747641aa 315 uint8_t bitrate, channel, wordwidth;
frank26080115 0:84d7747641aa 316
frank26080115 0:84d7747641aa 317 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 318 CHECK_PARAM(PRAM_I2S_FREQ(Freq));
frank26080115 0:84d7747641aa 319 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 320
frank26080115 0:84d7747641aa 321 //set i2s reference is i2s_pclk/2 as default
frank26080115 0:84d7747641aa 322 i2sMclk = CLKPWR_GetPCLK(CLKPWR_PCLKSEL_I2S)/2;
frank26080115 0:84d7747641aa 323 I2Sx->I2STXRATE = 1 | (1<<8);
frank26080115 0:84d7747641aa 324 I2Sx->I2SRXRATE = 1 | (1<<8);
frank26080115 0:84d7747641aa 325 if(TRMode == I2S_TX_MODE)
frank26080115 0:84d7747641aa 326 {
frank26080115 0:84d7747641aa 327 channel = i2s_GetChannel(I2Sx,I2S_TX_MODE);
frank26080115 0:84d7747641aa 328 wordwidth = i2s_GetWordWidth(I2Sx,I2S_TX_MODE);
frank26080115 0:84d7747641aa 329 }
frank26080115 0:84d7747641aa 330 else
frank26080115 0:84d7747641aa 331 {
frank26080115 0:84d7747641aa 332 channel = i2s_GetChannel(I2Sx,I2S_RX_MODE);
frank26080115 0:84d7747641aa 333 wordwidth = i2s_GetWordWidth(I2Sx,I2S_RX_MODE);
frank26080115 0:84d7747641aa 334 }
frank26080115 0:84d7747641aa 335 bitrate = i2sMclk/(Freq * channel * wordwidth) - 1;
frank26080115 0:84d7747641aa 336 if (TRMode == I2S_TX_MODE)// Transmitter
frank26080115 0:84d7747641aa 337 {
frank26080115 0:84d7747641aa 338 I2Sx->I2STXBITRATE = bitrate;
frank26080115 0:84d7747641aa 339 } else //Receiver
frank26080115 0:84d7747641aa 340 {
frank26080115 0:84d7747641aa 341 I2Sx->I2SRXBITRATE = bitrate;
frank26080115 0:84d7747641aa 342 }
frank26080115 0:84d7747641aa 343 return SUCCESS;
frank26080115 0:84d7747641aa 344 }
frank26080115 0:84d7747641aa 345
frank26080115 0:84d7747641aa 346 /********************************************************************//**
frank26080115 0:84d7747641aa 347 * @brief I2S set bitrate
frank26080115 0:84d7747641aa 348 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 349 * @param[in] bitrate value will be set
frank26080115 0:84d7747641aa 350 * bitrate value should be in range: 0 .. 63
frank26080115 0:84d7747641aa 351 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 352 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 353 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 354 * @return none
frank26080115 0:84d7747641aa 355 *********************************************************************/
frank26080115 0:84d7747641aa 356 void I2S_SetBitRate(LPC_I2S_TypeDef *I2Sx, uint8_t bitrate, uint8_t TRMode)
frank26080115 0:84d7747641aa 357 {
frank26080115 0:84d7747641aa 358 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 359 CHECK_PARAM(PARAM_I2S_BITRATE(bitrate));
frank26080115 0:84d7747641aa 360 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 361
frank26080115 0:84d7747641aa 362 if(TRMode == I2S_TX_MODE)
frank26080115 0:84d7747641aa 363 {
frank26080115 0:84d7747641aa 364 I2Sx->I2STXBITRATE = bitrate;
frank26080115 0:84d7747641aa 365 }
frank26080115 0:84d7747641aa 366 else
frank26080115 0:84d7747641aa 367 {
frank26080115 0:84d7747641aa 368 I2Sx->I2SRXBITRATE = bitrate;
frank26080115 0:84d7747641aa 369 }
frank26080115 0:84d7747641aa 370 }
frank26080115 0:84d7747641aa 371
frank26080115 0:84d7747641aa 372 /********************************************************************//**
frank26080115 0:84d7747641aa 373 * @brief Configuration operating mode for I2S
frank26080115 0:84d7747641aa 374 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 375 * @param[in] ModeConfig pointer to I2S_MODEConf_Type will be used to
frank26080115 0:84d7747641aa 376 * configure
frank26080115 0:84d7747641aa 377 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 378 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 379 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 380 * @return none
frank26080115 0:84d7747641aa 381 *********************************************************************/
frank26080115 0:84d7747641aa 382 void I2S_ModeConfig(LPC_I2S_TypeDef *I2Sx, I2S_MODEConf_Type* ModeConfig,
frank26080115 0:84d7747641aa 383 uint8_t TRMode)
frank26080115 0:84d7747641aa 384 {
frank26080115 0:84d7747641aa 385 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 386 CHECK_PARAM(PARAM_I2S_CLKSEL(ModeConfig->clksel));
frank26080115 0:84d7747641aa 387 CHECK_PARAM(PARAM_I2S_4PIN(ModeConfig->fpin));
frank26080115 0:84d7747641aa 388 CHECK_PARAM(PARAM_I2S_MCLK(ModeConfig->mcena));
frank26080115 0:84d7747641aa 389 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 390
frank26080115 0:84d7747641aa 391 if (TRMode == I2S_TX_MODE) {
frank26080115 0:84d7747641aa 392 I2Sx->I2STXMODE &= ~0x0F; //clear bit 3:0 in I2STXMODE register
frank26080115 0:84d7747641aa 393 if (ModeConfig->clksel == I2S_CLKSEL_MCLK) {
frank26080115 0:84d7747641aa 394 I2Sx->I2STXMODE |= 0x02;
frank26080115 0:84d7747641aa 395 }
frank26080115 0:84d7747641aa 396 if (ModeConfig->fpin == I2S_4PIN_ENABLE) {
frank26080115 0:84d7747641aa 397 I2Sx->I2STXMODE |= (1 << 2);
frank26080115 0:84d7747641aa 398 }
frank26080115 0:84d7747641aa 399 if (ModeConfig->mcena == I2S_MCLK_ENABLE) {
frank26080115 0:84d7747641aa 400 I2Sx->I2STXMODE |= (1 << 3);
frank26080115 0:84d7747641aa 401 }
frank26080115 0:84d7747641aa 402 } else {
frank26080115 0:84d7747641aa 403 I2Sx->I2SRXMODE &= ~0x0F; //clear bit 3:0 in I2STXMODE register
frank26080115 0:84d7747641aa 404 if (ModeConfig->clksel == I2S_CLKSEL_MCLK) {
frank26080115 0:84d7747641aa 405 I2Sx->I2SRXMODE |= 0x02;
frank26080115 0:84d7747641aa 406 }
frank26080115 0:84d7747641aa 407 if (ModeConfig->fpin == I2S_4PIN_ENABLE) {
frank26080115 0:84d7747641aa 408 I2Sx->I2SRXMODE |= (1 << 2);
frank26080115 0:84d7747641aa 409 }
frank26080115 0:84d7747641aa 410 if (ModeConfig->mcena == I2S_MCLK_ENABLE) {
frank26080115 0:84d7747641aa 411 I2Sx->I2SRXMODE |= (1 << 3);
frank26080115 0:84d7747641aa 412 }
frank26080115 0:84d7747641aa 413 }
frank26080115 0:84d7747641aa 414 }
frank26080115 0:84d7747641aa 415
frank26080115 0:84d7747641aa 416 /********************************************************************//**
frank26080115 0:84d7747641aa 417 * @brief Configure DMA operation for I2S
frank26080115 0:84d7747641aa 418 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 419 * @param[in] DMAConfig pointer to I2S_DMAConf_Type will be used to configure
frank26080115 0:84d7747641aa 420 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 421 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 422 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 423 * @return none
frank26080115 0:84d7747641aa 424 *********************************************************************/
frank26080115 0:84d7747641aa 425 void I2S_DMAConfig(LPC_I2S_TypeDef *I2Sx, I2S_DMAConf_Type* DMAConfig,
frank26080115 0:84d7747641aa 426 uint8_t TRMode)
frank26080115 0:84d7747641aa 427 {
frank26080115 0:84d7747641aa 428 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 429 CHECK_PARAM(PARAM_I2S_DMA(DMAConfig->DMAIndex));
frank26080115 0:84d7747641aa 430 CHECK_PARAM(PARAM_I2S_DMA_DEPTH(DMAConfig->depth));
frank26080115 0:84d7747641aa 431 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 432
frank26080115 0:84d7747641aa 433 if (TRMode == I2S_RX_MODE) {
frank26080115 0:84d7747641aa 434 if (DMAConfig->DMAIndex == I2S_DMA_1) {
frank26080115 0:84d7747641aa 435 LPC_I2S->I2SDMA1 = (DMAConfig->depth) << 8;
frank26080115 0:84d7747641aa 436 } else {
frank26080115 0:84d7747641aa 437 LPC_I2S->I2SDMA2 = (DMAConfig->depth) << 8;
frank26080115 0:84d7747641aa 438 }
frank26080115 0:84d7747641aa 439 } else {
frank26080115 0:84d7747641aa 440 if (DMAConfig->DMAIndex == I2S_DMA_1) {
frank26080115 0:84d7747641aa 441 LPC_I2S->I2SDMA1 = (DMAConfig->depth) << 16;
frank26080115 0:84d7747641aa 442 } else {
frank26080115 0:84d7747641aa 443 LPC_I2S->I2SDMA2 = (DMAConfig->depth) << 16;
frank26080115 0:84d7747641aa 444 }
frank26080115 0:84d7747641aa 445 }
frank26080115 0:84d7747641aa 446 }
frank26080115 0:84d7747641aa 447
frank26080115 0:84d7747641aa 448 /********************************************************************//**
frank26080115 0:84d7747641aa 449 * @brief Enable/Disable DMA operation for I2S
frank26080115 0:84d7747641aa 450 * @param[in] I2Sx: I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 451 * @param[in] DMAIndex chose what DMA is used, should be:
frank26080115 0:84d7747641aa 452 * - I2S_DMA_1 = 0: DMA1
frank26080115 0:84d7747641aa 453 * - I2S_DMA_2 = 1: DMA2
frank26080115 0:84d7747641aa 454 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 455 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 456 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 457 * @param[in] NewState is new state of DMA operation, should be:
frank26080115 0:84d7747641aa 458 * - ENABLE
frank26080115 0:84d7747641aa 459 * - DISABLE
frank26080115 0:84d7747641aa 460 * @return none
frank26080115 0:84d7747641aa 461 *********************************************************************/
frank26080115 0:84d7747641aa 462 void I2S_DMACmd(LPC_I2S_TypeDef *I2Sx, uint8_t DMAIndex, uint8_t TRMode,
frank26080115 0:84d7747641aa 463 FunctionalState NewState)
frank26080115 0:84d7747641aa 464 {
frank26080115 0:84d7747641aa 465 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 466 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState));
frank26080115 0:84d7747641aa 467 CHECK_PARAM(PARAM_I2S_DMA(DMAIndex));
frank26080115 0:84d7747641aa 468 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 469
frank26080115 0:84d7747641aa 470 if (TRMode == I2S_RX_MODE) {
frank26080115 0:84d7747641aa 471 if (DMAIndex == I2S_DMA_1) {
frank26080115 0:84d7747641aa 472 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 473 I2Sx->I2SDMA1 |= 0x01;
frank26080115 0:84d7747641aa 474 else
frank26080115 0:84d7747641aa 475 I2Sx->I2SDMA1 &= ~0x01;
frank26080115 0:84d7747641aa 476 } else {
frank26080115 0:84d7747641aa 477 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 478 I2Sx->I2SDMA2 |= 0x01;
frank26080115 0:84d7747641aa 479 else
frank26080115 0:84d7747641aa 480 I2Sx->I2SDMA2 &= ~0x01;
frank26080115 0:84d7747641aa 481 }
frank26080115 0:84d7747641aa 482 } else {
frank26080115 0:84d7747641aa 483 if (DMAIndex == I2S_DMA_1) {
frank26080115 0:84d7747641aa 484 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 485 I2Sx->I2SDMA1 |= 0x02;
frank26080115 0:84d7747641aa 486 else
frank26080115 0:84d7747641aa 487 I2Sx->I2SDMA1 &= ~0x02;
frank26080115 0:84d7747641aa 488 } else {
frank26080115 0:84d7747641aa 489 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 490 I2Sx->I2SDMA2 |= 0x02;
frank26080115 0:84d7747641aa 491 else
frank26080115 0:84d7747641aa 492 I2Sx->I2SDMA2 &= ~0x02;
frank26080115 0:84d7747641aa 493 }
frank26080115 0:84d7747641aa 494 }
frank26080115 0:84d7747641aa 495 }
frank26080115 0:84d7747641aa 496
frank26080115 0:84d7747641aa 497 /********************************************************************//**
frank26080115 0:84d7747641aa 498 * @brief Configure IRQ for I2S
frank26080115 0:84d7747641aa 499 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 500 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 501 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 502 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 503 * @param[in] level is the FIFO level that triggers IRQ request
frank26080115 0:84d7747641aa 504 * @return none
frank26080115 0:84d7747641aa 505 *********************************************************************/
frank26080115 0:84d7747641aa 506 void I2S_IRQConfig(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, uint8_t level) {
frank26080115 0:84d7747641aa 507 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 508 CHECK_PARAM(PARAM_I2S_TRX(TRMode));
frank26080115 0:84d7747641aa 509 CHECK_PARAM(PARAM_I2S_IRQ_LEVEL(level));
frank26080115 0:84d7747641aa 510
frank26080115 0:84d7747641aa 511 if (TRMode == I2S_RX_MODE) {
frank26080115 0:84d7747641aa 512 I2Sx->I2SIRQ |= (level << 8);
frank26080115 0:84d7747641aa 513 } else {
frank26080115 0:84d7747641aa 514 I2Sx->I2SIRQ |= (level << 16);
frank26080115 0:84d7747641aa 515 }
frank26080115 0:84d7747641aa 516 }
frank26080115 0:84d7747641aa 517
frank26080115 0:84d7747641aa 518 /********************************************************************//**
frank26080115 0:84d7747641aa 519 * @brief Enable/Disable IRQ for I2S
frank26080115 0:84d7747641aa 520 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 521 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 522 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 523 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 524 * @param[in] NewState is new state of DMA operation, should be:
frank26080115 0:84d7747641aa 525 * - ENABLE
frank26080115 0:84d7747641aa 526 * - DISABLE
frank26080115 0:84d7747641aa 527 * @return none
frank26080115 0:84d7747641aa 528 *********************************************************************/
frank26080115 0:84d7747641aa 529 void I2S_IRQCmd(LPC_I2S_TypeDef *I2Sx, uint8_t TRMode, FunctionalState NewState) {
frank26080115 0:84d7747641aa 530 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 531 CHECK_PARAM(PARAM_FUNCTIONALSTATE(NewState));
frank26080115 0:84d7747641aa 532
frank26080115 0:84d7747641aa 533 if (TRMode == I2S_RX_MODE) {
frank26080115 0:84d7747641aa 534 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 535 I2Sx->I2SIRQ |= 0x01;
frank26080115 0:84d7747641aa 536 else
frank26080115 0:84d7747641aa 537 I2Sx->I2SIRQ &= ~0x01;
frank26080115 0:84d7747641aa 538 //Enable DMA
frank26080115 0:84d7747641aa 539
frank26080115 0:84d7747641aa 540 } else {
frank26080115 0:84d7747641aa 541 if (NewState == ENABLE)
frank26080115 0:84d7747641aa 542 I2Sx->I2SIRQ |= 0x02;
frank26080115 0:84d7747641aa 543 else
frank26080115 0:84d7747641aa 544 I2Sx->I2SIRQ &= ~0x02;
frank26080115 0:84d7747641aa 545 }
frank26080115 0:84d7747641aa 546 }
frank26080115 0:84d7747641aa 547
frank26080115 0:84d7747641aa 548 /********************************************************************//**
frank26080115 0:84d7747641aa 549 * @brief Get I2S interrupt status
frank26080115 0:84d7747641aa 550 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 551 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 552 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 553 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 554 * @return FunctionState should be:
frank26080115 0:84d7747641aa 555 * - ENABLE: interrupt is enable
frank26080115 0:84d7747641aa 556 * - DISABLE: interrupt is disable
frank26080115 0:84d7747641aa 557 *********************************************************************/
frank26080115 0:84d7747641aa 558 FunctionalState I2S_GetIRQStatus(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode)
frank26080115 0:84d7747641aa 559 {
frank26080115 0:84d7747641aa 560 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 561 if(TRMode == I2S_TX_MODE)
frank26080115 0:84d7747641aa 562 return (FunctionalState)((I2Sx->I2SIRQ >> 1)&0x01);
frank26080115 0:84d7747641aa 563 else
frank26080115 0:84d7747641aa 564 return (FunctionalState)((I2Sx->I2SIRQ)&0x01);
frank26080115 0:84d7747641aa 565 }
frank26080115 0:84d7747641aa 566
frank26080115 0:84d7747641aa 567 /********************************************************************//**
frank26080115 0:84d7747641aa 568 * @brief Get I2S interrupt depth
frank26080115 0:84d7747641aa 569 * @param[in] I2Sx I2S peripheral selected, should be: LPC_I2S
frank26080115 0:84d7747641aa 570 * @param[in] TRMode is transmit/receive mode, should be:
frank26080115 0:84d7747641aa 571 * - I2S_TX_MODE = 0: transmit mode
frank26080115 0:84d7747641aa 572 * - I2S_RX_MODE = 1: receive mode
frank26080115 0:84d7747641aa 573 * @return depth of FIFO level on which to create an irq request
frank26080115 0:84d7747641aa 574 *********************************************************************/
frank26080115 0:84d7747641aa 575 uint8_t I2S_GetIRQDepth(LPC_I2S_TypeDef *I2Sx,uint8_t TRMode)
frank26080115 0:84d7747641aa 576 {
frank26080115 0:84d7747641aa 577 CHECK_PARAM(PARAM_I2Sx(I2Sx));
frank26080115 0:84d7747641aa 578 if(TRMode == I2S_TX_MODE)
frank26080115 0:84d7747641aa 579 return (((I2Sx->I2SIRQ)>>16)&0xFF);
frank26080115 0:84d7747641aa 580 else
frank26080115 0:84d7747641aa 581 return (((I2Sx->I2SIRQ)>>8)&0xFF);
frank26080115 0:84d7747641aa 582 }
frank26080115 0:84d7747641aa 583 /**
frank26080115 0:84d7747641aa 584 * @}
frank26080115 0:84d7747641aa 585 */
frank26080115 0:84d7747641aa 586
frank26080115 0:84d7747641aa 587 #endif /* _I2S */
frank26080115 0:84d7747641aa 588
frank26080115 0:84d7747641aa 589 /**
frank26080115 0:84d7747641aa 590 * @}
frank26080115 0:84d7747641aa 591 */
frank26080115 0:84d7747641aa 592
frank26080115 0:84d7747641aa 593 /* --------------------------------- End Of File ------------------------------ */
frank26080115 0:84d7747641aa 594