mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Thu Sep 18 14:00:17 2014 +0100
Revision:
324:406fd2029f23
Parent:
149:1fb5f62b92bd
Synchronized with git revision a73f28e6fbca9559fbed2726410eeb4c0534a4a5

Full URL: https://github.com/mbedmicro/mbed/commit/a73f28e6fbca9559fbed2726410eeb4c0534a4a5/

Extended #476, which does not break ethernet for K64F

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 146:f64d43ff0c18 1 /*
mbed_official 146:f64d43ff0c18 2 * Copyright (c) 2013 - 2014, Freescale Semiconductor, Inc.
mbed_official 146:f64d43ff0c18 3 * All rights reserved.
mbed_official 146:f64d43ff0c18 4 *
mbed_official 146:f64d43ff0c18 5 * Redistribution and use in source and binary forms, with or without modification,
mbed_official 146:f64d43ff0c18 6 * are permitted provided that the following conditions are met:
mbed_official 146:f64d43ff0c18 7 *
mbed_official 146:f64d43ff0c18 8 * o Redistributions of source code must retain the above copyright notice, this list
mbed_official 146:f64d43ff0c18 9 * of conditions and the following disclaimer.
mbed_official 146:f64d43ff0c18 10 *
mbed_official 146:f64d43ff0c18 11 * o Redistributions in binary form must reproduce the above copyright notice, this
mbed_official 146:f64d43ff0c18 12 * list of conditions and the following disclaimer in the documentation and/or
mbed_official 146:f64d43ff0c18 13 * other materials provided with the distribution.
mbed_official 146:f64d43ff0c18 14 *
mbed_official 146:f64d43ff0c18 15 * o Neither the name of Freescale Semiconductor, Inc. nor the names of its
mbed_official 146:f64d43ff0c18 16 * contributors may be used to endorse or promote products derived from this
mbed_official 146:f64d43ff0c18 17 * software without specific prior written permission.
mbed_official 146:f64d43ff0c18 18 *
mbed_official 146:f64d43ff0c18 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
mbed_official 146:f64d43ff0c18 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
mbed_official 146:f64d43ff0c18 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
mbed_official 146:f64d43ff0c18 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
mbed_official 146:f64d43ff0c18 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
mbed_official 146:f64d43ff0c18 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
mbed_official 146:f64d43ff0c18 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
mbed_official 146:f64d43ff0c18 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
mbed_official 146:f64d43ff0c18 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
mbed_official 146:f64d43ff0c18 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
mbed_official 146:f64d43ff0c18 29 */
mbed_official 146:f64d43ff0c18 30
mbed_official 146:f64d43ff0c18 31 #include "fsl_sai_hal.h"
mbed_official 146:f64d43ff0c18 32
mbed_official 146:f64d43ff0c18 33 /******************************************************************************
mbed_official 146:f64d43ff0c18 34 *Code
mbed_official 146:f64d43ff0c18 35 ******************************************************************************/
mbed_official 146:f64d43ff0c18 36
mbed_official 146:f64d43ff0c18 37 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 38 *
mbed_official 324:406fd2029f23 39 * Function Name : SAI_HAL_TxInit
mbed_official 324:406fd2029f23 40 * Description : Initialize the sai Tx register, just set the register vaule to zero.
mbed_official 146:f64d43ff0c18 41 *This function just clear the register value of sai.
mbed_official 146:f64d43ff0c18 42 *END**************************************************************************/
mbed_official 324:406fd2029f23 43 void SAI_HAL_TxInit(uint32_t saiBaseAddr)
mbed_official 146:f64d43ff0c18 44 {
mbed_official 324:406fd2029f23 45 /* Software reset and FIFO reset */
mbed_official 324:406fd2029f23 46 BW_I2S_TCSR_SR(saiBaseAddr, 1);
mbed_official 324:406fd2029f23 47 BW_I2S_TCSR_FR(saiBaseAddr, 1);
mbed_official 324:406fd2029f23 48 /* Clear all registers */
mbed_official 324:406fd2029f23 49 HW_I2S_TCSR_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 50 HW_I2S_TCR1_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 51 HW_I2S_TCR2_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 52 HW_I2S_TCR3_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 53 HW_I2S_TCR4_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 54 HW_I2S_TCR5_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 55 HW_I2S_TMR_WR(saiBaseAddr,0);
mbed_official 324:406fd2029f23 56 }
mbed_official 324:406fd2029f23 57
mbed_official 324:406fd2029f23 58 /*FUNCTION**********************************************************************
mbed_official 324:406fd2029f23 59 *
mbed_official 324:406fd2029f23 60 * Function Name : SAI_HAL_RxInit
mbed_official 324:406fd2029f23 61 * Description : Initialize the sai Rx register, just set the register vaule to zero.
mbed_official 324:406fd2029f23 62 *This function just clear the register value of sai.
mbed_official 324:406fd2029f23 63 *END**************************************************************************/
mbed_official 324:406fd2029f23 64 void SAI_HAL_RxInit(uint32_t saiBaseAddr)
mbed_official 324:406fd2029f23 65 {
mbed_official 324:406fd2029f23 66 /* Software reset and FIFO reset */
mbed_official 324:406fd2029f23 67 BW_I2S_RCSR_SR(saiBaseAddr, 1);
mbed_official 324:406fd2029f23 68 BW_I2S_RCSR_FR(saiBaseAddr, 1);
mbed_official 324:406fd2029f23 69 /* Clear all registers */
mbed_official 324:406fd2029f23 70 HW_I2S_RCSR_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 71 HW_I2S_RCR1_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 72 HW_I2S_RCR2_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 73 HW_I2S_RCR3_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 74 HW_I2S_RCR4_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 75 HW_I2S_RCR5_WR(saiBaseAddr, 0);
mbed_official 324:406fd2029f23 76 HW_I2S_RMR_WR(saiBaseAddr,0);
mbed_official 146:f64d43ff0c18 77 }
mbed_official 146:f64d43ff0c18 78
mbed_official 146:f64d43ff0c18 79 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 80 *
mbed_official 324:406fd2029f23 81 * Function Name : SAI_HAL_TxSetProtocol
mbed_official 146:f64d43ff0c18 82 * Description : According to the protocol type to set the registers for tx.
mbed_official 146:f64d43ff0c18 83 *The protocol can be I2S left, I2S right, I2S and so on.
mbed_official 146:f64d43ff0c18 84 *END**************************************************************************/
mbed_official 324:406fd2029f23 85 void SAI_HAL_TxSetProtocol(uint32_t saiBaseAddr,sai_protocol_t protocol)
mbed_official 146:f64d43ff0c18 86 {
mbed_official 324:406fd2029f23 87 switch (protocol)
mbed_official 146:f64d43ff0c18 88 {
mbed_official 146:f64d43ff0c18 89 case kSaiBusI2SLeft:
mbed_official 324:406fd2029f23 90 BW_I2S_TCR2_BCP(saiBaseAddr,1);/* Bit clock polarity */
mbed_official 324:406fd2029f23 91 BW_I2S_TCR4_MF(saiBaseAddr,1);/* MSB transmitted fisrt */
mbed_official 324:406fd2029f23 92 BW_I2S_TCR4_FSE(saiBaseAddr,0);/*Frame sync not early */
mbed_official 324:406fd2029f23 93 BW_I2S_TCR4_FSP(saiBaseAddr,0);/* Frame sync polarity, left channel is high */
mbed_official 324:406fd2029f23 94 BW_I2S_TCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 146:f64d43ff0c18 95 break;
mbed_official 146:f64d43ff0c18 96
mbed_official 146:f64d43ff0c18 97 case kSaiBusI2SRight:
mbed_official 324:406fd2029f23 98 BW_I2S_TCR2_BCP(saiBaseAddr,1);/* Bit clock polarity */
mbed_official 324:406fd2029f23 99 BW_I2S_TCR4_MF(saiBaseAddr,1);/* MSB transmitted firsrt */
mbed_official 324:406fd2029f23 100 BW_I2S_TCR4_FSE(saiBaseAddr,0);/*Frame sync not early */
mbed_official 324:406fd2029f23 101 BW_I2S_TCR4_FSP(saiBaseAddr,0);/* Frame sync polarity, left chennel is high */
mbed_official 324:406fd2029f23 102 BW_I2S_TCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 146:f64d43ff0c18 103 break;
mbed_official 146:f64d43ff0c18 104
mbed_official 146:f64d43ff0c18 105 case kSaiBusI2SType:
mbed_official 324:406fd2029f23 106 BW_I2S_TCR2_BCP(saiBaseAddr,1);/*Bit clock polarity */
mbed_official 324:406fd2029f23 107 BW_I2S_TCR4_MF(saiBaseAddr,1);/*MSB transmitted firsrt */
mbed_official 324:406fd2029f23 108 BW_I2S_TCR4_FSE(saiBaseAddr,1);/* Frame sync one bit early */
mbed_official 324:406fd2029f23 109 BW_I2S_TCR4_FSP(saiBaseAddr,1);/* Frame sync polarity, left channel is low */
mbed_official 324:406fd2029f23 110 BW_I2S_TCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 146:f64d43ff0c18 111 break;
mbed_official 146:f64d43ff0c18 112
mbed_official 324:406fd2029f23 113 case kSaiBusPCMA:
mbed_official 324:406fd2029f23 114 BW_I2S_TCR2_BCP(saiBaseAddr,0); /* Bit clock active low */
mbed_official 324:406fd2029f23 115 BW_I2S_TCR4_MF(saiBaseAddr, 1); /* MSB transmitted first */
mbed_official 324:406fd2029f23 116 BW_I2S_TCR4_SYWD(saiBaseAddr, 0); /* Only one bit clock in a frame sync */
mbed_official 324:406fd2029f23 117 BW_I2S_TCR4_FSE(saiBaseAddr,1);/* Frame sync one bit early */
mbed_official 324:406fd2029f23 118 BW_I2S_TCR4_FSP(saiBaseAddr,0);/* Frame sync polarity, left chennel is high */
mbed_official 324:406fd2029f23 119 BW_I2S_TCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 324:406fd2029f23 120 break;
mbed_official 324:406fd2029f23 121
mbed_official 324:406fd2029f23 122 case kSaiBusPCMB:
mbed_official 324:406fd2029f23 123 BW_I2S_TCR2_BCP(saiBaseAddr,0); /* Bit clock active high */
mbed_official 324:406fd2029f23 124 BW_I2S_TCR4_MF(saiBaseAddr, 1); /* MSB transmitted first */
mbed_official 324:406fd2029f23 125 BW_I2S_TCR4_FSE(saiBaseAddr,0);/* Frame sync not early */
mbed_official 324:406fd2029f23 126 BW_I2S_TCR4_SYWD(saiBaseAddr, 0); /* Only one bit clock in a frame sync */
mbed_official 324:406fd2029f23 127 BW_I2S_TCR4_FSP(saiBaseAddr,0);/* Frame sync polarity, left chennel is high */
mbed_official 324:406fd2029f23 128 BW_I2S_TCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 324:406fd2029f23 129 break;
mbed_official 324:406fd2029f23 130
mbed_official 324:406fd2029f23 131 case kSaiBusAC97:
mbed_official 324:406fd2029f23 132 BW_I2S_TCR2_BCP(saiBaseAddr,1); /* Bit clock active high */
mbed_official 324:406fd2029f23 133 BW_I2S_TCR4_MF(saiBaseAddr,1); /* MSB transmitted first */
mbed_official 324:406fd2029f23 134 BW_I2S_TCR4_FSE(saiBaseAddr,1);/* Frame sync one bit early */
mbed_official 324:406fd2029f23 135 BW_I2S_TCR4_FRSZ(saiBaseAddr,12); /* There are 13 words in a frame in AC'97 */
mbed_official 324:406fd2029f23 136 BW_I2S_TCR4_SYWD(saiBaseAddr,15); /* Length of frame sync, 16 bit transmitted in first word */
mbed_official 324:406fd2029f23 137 BW_I2S_TCR5_W0W(saiBaseAddr,15); /* The first word have 16 bits */
mbed_official 324:406fd2029f23 138 BW_I2S_TCR5_WNW(saiBaseAddr,19); /* Other word is 20 bits */
mbed_official 324:406fd2029f23 139 break;
mbed_official 324:406fd2029f23 140
mbed_official 146:f64d43ff0c18 141 default:
mbed_official 146:f64d43ff0c18 142 break;
mbed_official 324:406fd2029f23 143 }
mbed_official 324:406fd2029f23 144 }
mbed_official 146:f64d43ff0c18 145
mbed_official 146:f64d43ff0c18 146 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 147 *
mbed_official 324:406fd2029f23 148 * Function Name : SAI_HAL_RxSetProtocol
mbed_official 146:f64d43ff0c18 149 * Description : According to the protocol type to set the registers for rx.
mbed_official 146:f64d43ff0c18 150 *The protocol can be I2S left, I2S right, I2S and so on.
mbed_official 146:f64d43ff0c18 151 *END**************************************************************************/
mbed_official 324:406fd2029f23 152 void SAI_HAL_RxSetProtocol(uint32_t saiBaseAddr,sai_protocol_t protocol)
mbed_official 146:f64d43ff0c18 153 {
mbed_official 324:406fd2029f23 154 switch (protocol)
mbed_official 146:f64d43ff0c18 155 {
mbed_official 146:f64d43ff0c18 156 case kSaiBusI2SLeft:
mbed_official 324:406fd2029f23 157 BW_I2S_RCR2_BCP(saiBaseAddr,1);/* Bit clock polarity */
mbed_official 324:406fd2029f23 158 BW_I2S_RCR4_MF(saiBaseAddr,1);/* MSB transmitted fisrt */
mbed_official 324:406fd2029f23 159 BW_I2S_RCR4_FSE(saiBaseAddr,0);/*Frame sync one bit early */
mbed_official 324:406fd2029f23 160 BW_I2S_RCR4_FSP(saiBaseAddr,0);/* Frame sync polarity, left channel is high */
mbed_official 324:406fd2029f23 161 BW_I2S_RCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 146:f64d43ff0c18 162 break;
mbed_official 146:f64d43ff0c18 163
mbed_official 146:f64d43ff0c18 164 case kSaiBusI2SRight:
mbed_official 324:406fd2029f23 165 BW_I2S_RCR2_BCP(saiBaseAddr,1);/* Bit clock polarity */
mbed_official 324:406fd2029f23 166 BW_I2S_RCR4_MF(saiBaseAddr,1);/* MSB transmitted fisrt */
mbed_official 324:406fd2029f23 167 BW_I2S_RCR4_FSE(saiBaseAddr,0);/*Frame sync one bit early */
mbed_official 324:406fd2029f23 168 BW_I2S_RCR4_FSP(saiBaseAddr,0);/* Frame sync polarity, left chennel is high */
mbed_official 324:406fd2029f23 169 BW_I2S_RCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 146:f64d43ff0c18 170 break;
mbed_official 146:f64d43ff0c18 171
mbed_official 146:f64d43ff0c18 172 case kSaiBusI2SType:
mbed_official 324:406fd2029f23 173 BW_I2S_RCR2_BCP(saiBaseAddr,1);/*Bit clock polarity */
mbed_official 324:406fd2029f23 174 BW_I2S_RCR4_MF(saiBaseAddr,1);/*MSB transmitted fisrt */
mbed_official 324:406fd2029f23 175 BW_I2S_RCR4_FSE(saiBaseAddr,1);/* Frame sync one bit early */
mbed_official 324:406fd2029f23 176 BW_I2S_RCR4_FSP(saiBaseAddr,1);/* Frame sync polarity, left channel is low */
mbed_official 324:406fd2029f23 177 BW_I2S_RCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 324:406fd2029f23 178 break;
mbed_official 324:406fd2029f23 179
mbed_official 324:406fd2029f23 180 case kSaiBusPCMA:
mbed_official 324:406fd2029f23 181 BW_I2S_RCR2_BCP(saiBaseAddr,0); /* Bit clock active high */
mbed_official 324:406fd2029f23 182 BW_I2S_RCR4_MF(saiBaseAddr, 1); /* MSB transmitted first */
mbed_official 324:406fd2029f23 183 BW_I2S_RCR4_SYWD(saiBaseAddr, 0); /* Only one bit clock in a frame sync */
mbed_official 324:406fd2029f23 184 BW_I2S_RCR4_FSE(saiBaseAddr,1);/* Frame sync one bit early */
mbed_official 324:406fd2029f23 185 BW_I2S_RCR4_FSP(saiBaseAddr,0);/* Frame sync polarity, left chennel is high */
mbed_official 324:406fd2029f23 186 BW_I2S_RCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 324:406fd2029f23 187 break;
mbed_official 324:406fd2029f23 188
mbed_official 324:406fd2029f23 189 case kSaiBusPCMB:
mbed_official 324:406fd2029f23 190 BW_I2S_RCR2_BCP(saiBaseAddr,0); /* Bit clock active high */
mbed_official 324:406fd2029f23 191 BW_I2S_RCR4_MF(saiBaseAddr, 1); /* MSB transmitted first */
mbed_official 324:406fd2029f23 192 BW_I2S_RCR4_FSE(saiBaseAddr,0);/* Frame sync not early */
mbed_official 324:406fd2029f23 193 BW_I2S_RCR4_SYWD(saiBaseAddr, 0); /* Only one bit clock in a frame sync */
mbed_official 324:406fd2029f23 194 BW_I2S_RCR4_FSP(saiBaseAddr,0);/* Frame sync polarity, left chennel is high */
mbed_official 324:406fd2029f23 195 BW_I2S_RCR4_FRSZ(saiBaseAddr,1);/* I2S uses 2 word in a frame */
mbed_official 324:406fd2029f23 196 break;
mbed_official 324:406fd2029f23 197
mbed_official 324:406fd2029f23 198 case kSaiBusAC97:
mbed_official 324:406fd2029f23 199 BW_I2S_RCR2_BCP(saiBaseAddr,1); /* Bit clock active high */
mbed_official 324:406fd2029f23 200 BW_I2S_RCR4_MF(saiBaseAddr,1); /* MSB transmitted first */
mbed_official 324:406fd2029f23 201 BW_I2S_RCR4_FSE(saiBaseAddr,1);/* Frame sync one bit early */
mbed_official 324:406fd2029f23 202 BW_I2S_RCR4_FRSZ(saiBaseAddr,12); /* There are 13 words in a frame in AC'97 */
mbed_official 324:406fd2029f23 203 BW_I2S_RCR4_SYWD(saiBaseAddr,15); /* Length of frame sync, 16 bit transmitted in first word */
mbed_official 324:406fd2029f23 204 BW_I2S_RCR5_W0W(saiBaseAddr,15); /* The first word have 16 bits */
mbed_official 324:406fd2029f23 205 BW_I2S_RCR5_WNW(saiBaseAddr,19); /* Other word is 20 bits */
mbed_official 146:f64d43ff0c18 206 break;
mbed_official 146:f64d43ff0c18 207
mbed_official 146:f64d43ff0c18 208 default:
mbed_official 146:f64d43ff0c18 209 break;
mbed_official 146:f64d43ff0c18 210 }
mbed_official 146:f64d43ff0c18 211 }
mbed_official 146:f64d43ff0c18 212
mbed_official 146:f64d43ff0c18 213 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 214 *
mbed_official 324:406fd2029f23 215 * Function Name : SAI_HAL_SetMclkDiv
mbed_official 146:f64d43ff0c18 216 * Description : Set the divider from the clock source to get the master clock.
mbed_official 146:f64d43ff0c18 217 *The function would compute the divider number and set the number to the registers.
mbed_official 146:f64d43ff0c18 218 *END**************************************************************************/
mbed_official 324:406fd2029f23 219 void SAI_HAL_SetMclkDiv(uint32_t saiBaseAddr, uint32_t mclk, uint32_t src_clk)
mbed_official 146:f64d43ff0c18 220 {
mbed_official 146:f64d43ff0c18 221 uint32_t freq = src_clk;
mbed_official 146:f64d43ff0c18 222 uint16_t fract, divide;
mbed_official 146:f64d43ff0c18 223 uint32_t remaind = 0;
mbed_official 146:f64d43ff0c18 224 uint32_t current_remainder = 0xffffffff;
mbed_official 146:f64d43ff0c18 225 uint16_t current_fract = 0;
mbed_official 146:f64d43ff0c18 226 uint16_t current_divide = 0;
mbed_official 146:f64d43ff0c18 227 uint32_t mul_freq = 0;
mbed_official 146:f64d43ff0c18 228 uint32_t max_fract = SAI_FRACT_MAX;
mbed_official 146:f64d43ff0c18 229 /*In order to prevent overflow */
mbed_official 146:f64d43ff0c18 230 freq /= 10;
mbed_official 146:f64d43ff0c18 231 mclk/= 10;
mbed_official 146:f64d43ff0c18 232 max_fract = mclk * SAI_DIV_MAX/freq;
mbed_official 146:f64d43ff0c18 233 if(max_fract > SAI_FRACT_MAX)
mbed_official 146:f64d43ff0c18 234 {
mbed_official 146:f64d43ff0c18 235 max_fract = SAI_FRACT_MAX;
mbed_official 146:f64d43ff0c18 236 }
mbed_official 146:f64d43ff0c18 237 /* Looking for the closet frequency */
mbed_official 146:f64d43ff0c18 238 for (fract = 1; fract < max_fract; fract ++)
mbed_official 146:f64d43ff0c18 239 {
mbed_official 146:f64d43ff0c18 240 mul_freq = freq * fract;
mbed_official 146:f64d43ff0c18 241 remaind = mul_freq % mclk;
mbed_official 146:f64d43ff0c18 242 divide = mul_freq/mclk;
mbed_official 146:f64d43ff0c18 243 /* Find the exactly frequency */
mbed_official 146:f64d43ff0c18 244 if (remaind == 0)
mbed_official 146:f64d43ff0c18 245 {
mbed_official 146:f64d43ff0c18 246 current_fract = fract;
mbed_official 146:f64d43ff0c18 247 current_divide = mul_freq/mclk;
mbed_official 146:f64d43ff0c18 248 break;
mbed_official 146:f64d43ff0c18 249 }
mbed_official 146:f64d43ff0c18 250 /* closer to next one */
mbed_official 146:f64d43ff0c18 251 if (remaind > mclk/2)
mbed_official 146:f64d43ff0c18 252 {
mbed_official 146:f64d43ff0c18 253 remaind = mclk - remaind;
mbed_official 146:f64d43ff0c18 254 divide += 1;
mbed_official 146:f64d43ff0c18 255 }
mbed_official 146:f64d43ff0c18 256 /* Update the closest div and fract */
mbed_official 146:f64d43ff0c18 257 if (remaind < current_remainder)
mbed_official 146:f64d43ff0c18 258 {
mbed_official 146:f64d43ff0c18 259 current_fract = fract;
mbed_official 146:f64d43ff0c18 260 current_divide = divide;
mbed_official 146:f64d43ff0c18 261 current_remainder = remaind;
mbed_official 146:f64d43ff0c18 262 }
mbed_official 146:f64d43ff0c18 263 }
mbed_official 324:406fd2029f23 264 BW_I2S_MDR_DIVIDE(saiBaseAddr, current_divide -1);
mbed_official 324:406fd2029f23 265 /* Waiting for the divider updated */
mbed_official 324:406fd2029f23 266 while(BR_I2S_MCR_DUF(saiBaseAddr))
mbed_official 324:406fd2029f23 267 {}
mbed_official 324:406fd2029f23 268 BW_I2S_MDR_FRACT(saiBaseAddr, current_fract - 1);
mbed_official 324:406fd2029f23 269 /* Waiting for the divider updated */
mbed_official 324:406fd2029f23 270 while(BR_I2S_MCR_DUF(saiBaseAddr))
mbed_official 324:406fd2029f23 271 {}
mbed_official 146:f64d43ff0c18 272 }
mbed_official 146:f64d43ff0c18 273
mbed_official 146:f64d43ff0c18 274 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 275 *
mbed_official 324:406fd2029f23 276 * Function Name : SAI_HAL_TxSetMasterSlave
mbed_official 146:f64d43ff0c18 277 * Description : Set the tx master or slave mode.
mbed_official 146:f64d43ff0c18 278 *The slave or master mode only would affect the clock direction relevant registers.
mbed_official 146:f64d43ff0c18 279 *END**************************************************************************/
mbed_official 324:406fd2029f23 280 void SAI_HAL_TxSetMasterSlave(uint32_t saiBaseAddr, sai_master_slave_t master_slave_mode)
mbed_official 146:f64d43ff0c18 281 {
mbed_official 146:f64d43ff0c18 282 if (master_slave_mode == kSaiMaster)
mbed_official 146:f64d43ff0c18 283 {
mbed_official 324:406fd2029f23 284 BW_I2S_TCR2_BCD(saiBaseAddr,1);/* Bit clock generated internal */
mbed_official 324:406fd2029f23 285 BW_I2S_TCR4_FSD(saiBaseAddr,1);/* Frame sync generated internal */
mbed_official 324:406fd2029f23 286 BW_I2S_MCR_MOE(saiBaseAddr,1);/* Master clock generated internal */
mbed_official 146:f64d43ff0c18 287 }
mbed_official 146:f64d43ff0c18 288 else
mbed_official 146:f64d43ff0c18 289 {
mbed_official 324:406fd2029f23 290 BW_I2S_TCR2_BCD(saiBaseAddr,0);/* Bit clock generated external */
mbed_official 324:406fd2029f23 291 BW_I2S_TCR4_FSD(saiBaseAddr,0);/* Frame sync generated external */
mbed_official 324:406fd2029f23 292 BW_I2S_MCR_MOE(saiBaseAddr,0);/* Master clock generated external */
mbed_official 146:f64d43ff0c18 293 }
mbed_official 146:f64d43ff0c18 294 }
mbed_official 146:f64d43ff0c18 295
mbed_official 146:f64d43ff0c18 296 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 297 *
mbed_official 324:406fd2029f23 298 * Function Name : SAI_HAL_RxSetMasterSlave
mbed_official 146:f64d43ff0c18 299 * Description : Set the rx master or slave mode.
mbed_official 146:f64d43ff0c18 300 *The slave or master mode only would affect the clock direction relevant registers.
mbed_official 146:f64d43ff0c18 301 *END**************************************************************************/
mbed_official 324:406fd2029f23 302 void SAI_HAL_RxSetMasterSlave(uint32_t saiBaseAddr, sai_master_slave_t master_slave_mode)
mbed_official 146:f64d43ff0c18 303 {
mbed_official 146:f64d43ff0c18 304 if (master_slave_mode == kSaiMaster)
mbed_official 146:f64d43ff0c18 305 {
mbed_official 324:406fd2029f23 306 BW_I2S_RCR2_BCD(saiBaseAddr,1);/* Bit clock generated internal */
mbed_official 324:406fd2029f23 307 BW_I2S_RCR4_FSD(saiBaseAddr,1);/* Frame sync generated internal */
mbed_official 324:406fd2029f23 308 BW_I2S_MCR_MOE(saiBaseAddr,1);/* Master clock generated internal */
mbed_official 146:f64d43ff0c18 309 }
mbed_official 146:f64d43ff0c18 310 else
mbed_official 146:f64d43ff0c18 311 {
mbed_official 324:406fd2029f23 312 BW_I2S_RCR2_BCD(saiBaseAddr,0);/* Bit clock generated external */
mbed_official 324:406fd2029f23 313 BW_I2S_RCR4_FSD(saiBaseAddr,0);/* Frame sync generated external */
mbed_official 324:406fd2029f23 314 BW_I2S_MCR_MOE(saiBaseAddr,0);/* Master clock generated external */
mbed_official 146:f64d43ff0c18 315 }
mbed_official 146:f64d43ff0c18 316 }
mbed_official 146:f64d43ff0c18 317
mbed_official 146:f64d43ff0c18 318 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 319 *
mbed_official 324:406fd2029f23 320 * Function Name : SAI_HAL_TxSetSyncMode
mbed_official 146:f64d43ff0c18 321 * Description : Set the tx sync mode.
mbed_official 146:f64d43ff0c18 322 *Theer are four kinds of sync mode, async, sync, sync with other sai tx, sync with other sai rx.
mbed_official 146:f64d43ff0c18 323 *END**************************************************************************/
mbed_official 324:406fd2029f23 324 void SAI_HAL_TxSetSyncMode(uint32_t saiBaseAddr, sai_sync_mode_t sync_mode)
mbed_official 146:f64d43ff0c18 325 {
mbed_official 146:f64d43ff0c18 326 switch (sync_mode)
mbed_official 146:f64d43ff0c18 327 {
mbed_official 146:f64d43ff0c18 328 case kSaiModeAsync:
mbed_official 324:406fd2029f23 329 BW_I2S_TCR2_SYNC(saiBaseAddr,0);
mbed_official 146:f64d43ff0c18 330 break;
mbed_official 146:f64d43ff0c18 331 case kSaiModeSync:
mbed_official 324:406fd2029f23 332 BW_I2S_TCR2_SYNC(saiBaseAddr,1);
mbed_official 324:406fd2029f23 333 BW_I2S_RCR2_SYNC(saiBaseAddr,0);/* Receiver must be async mode */
mbed_official 146:f64d43ff0c18 334 break;
mbed_official 146:f64d43ff0c18 335 case kSaiModeSyncWithOtherTx:
mbed_official 324:406fd2029f23 336 BW_I2S_TCR2_SYNC(saiBaseAddr,2);
mbed_official 146:f64d43ff0c18 337 break;
mbed_official 146:f64d43ff0c18 338 case kSaiModeSyncWithOtherRx:
mbed_official 324:406fd2029f23 339 BW_I2S_TCR2_SYNC(saiBaseAddr,3);
mbed_official 146:f64d43ff0c18 340 break;
mbed_official 146:f64d43ff0c18 341 default:
mbed_official 146:f64d43ff0c18 342 break;
mbed_official 146:f64d43ff0c18 343 }
mbed_official 146:f64d43ff0c18 344 }
mbed_official 146:f64d43ff0c18 345
mbed_official 146:f64d43ff0c18 346 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 347 *
mbed_official 324:406fd2029f23 348 * Function Name : SAI_HAL_RxSetSyncMode
mbed_official 324:406fd2029f23 349 * Description : Set the rx sync mode.
mbed_official 324:406fd2029f23 350 *Theer are four kinds of sync mode, async, sync, sync with other sai tx, sync with other sai rx.
mbed_official 146:f64d43ff0c18 351 *END**************************************************************************/
mbed_official 324:406fd2029f23 352 void SAI_HAL_RxSetSyncMode(uint32_t saiBaseAddr,sai_sync_mode_t sync_mode)
mbed_official 146:f64d43ff0c18 353 {
mbed_official 324:406fd2029f23 354 switch (sync_mode)
mbed_official 146:f64d43ff0c18 355 {
mbed_official 324:406fd2029f23 356 case kSaiModeAsync:
mbed_official 324:406fd2029f23 357 BW_I2S_RCR2_SYNC(saiBaseAddr,0);
mbed_official 324:406fd2029f23 358 break;
mbed_official 324:406fd2029f23 359 case kSaiModeSync:
mbed_official 324:406fd2029f23 360 BW_I2S_RCR2_SYNC(saiBaseAddr,1);
mbed_official 324:406fd2029f23 361 BW_I2S_TCR2_SYNC(saiBaseAddr,0);/* Receiver must be async mode */
mbed_official 324:406fd2029f23 362 break;
mbed_official 324:406fd2029f23 363 case kSaiModeSyncWithOtherTx:
mbed_official 324:406fd2029f23 364 BW_I2S_RCR2_SYNC(saiBaseAddr,3);
mbed_official 324:406fd2029f23 365 break;
mbed_official 324:406fd2029f23 366 case kSaiModeSyncWithOtherRx:
mbed_official 324:406fd2029f23 367 BW_I2S_RCR2_SYNC(saiBaseAddr,2);
mbed_official 324:406fd2029f23 368 break;
mbed_official 146:f64d43ff0c18 369 default:
mbed_official 146:f64d43ff0c18 370 break;
mbed_official 324:406fd2029f23 371 }
mbed_official 146:f64d43ff0c18 372 }
mbed_official 146:f64d43ff0c18 373
mbed_official 146:f64d43ff0c18 374 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 375 *
mbed_official 324:406fd2029f23 376 * Function Name : SAI_HAL_TxSetIntCmd
mbed_official 324:406fd2029f23 377 * Description : Enable the interrupt request source for tx.
mbed_official 324:406fd2029f23 378 *The source can be word start, sync error, FIFO empty, FIFO error and FIFO request.
mbed_official 146:f64d43ff0c18 379 *END**************************************************************************/
mbed_official 324:406fd2029f23 380 void SAI_HAL_TxSetIntCmd(uint32_t saiBaseAddr, sai_interrupt_request_t source, bool enable)
mbed_official 146:f64d43ff0c18 381 {
mbed_official 324:406fd2029f23 382 switch (source)
mbed_official 146:f64d43ff0c18 383 {
mbed_official 324:406fd2029f23 384 case kSaiIntrequestWordStart:
mbed_official 324:406fd2029f23 385 BW_I2S_TCSR_WSIE(saiBaseAddr, enable);
mbed_official 324:406fd2029f23 386 break;
mbed_official 324:406fd2029f23 387 case kSaiIntrequestSyncError:
mbed_official 324:406fd2029f23 388 BW_I2S_TCSR_SEIE(saiBaseAddr, enable);
mbed_official 324:406fd2029f23 389 break;
mbed_official 324:406fd2029f23 390 case kSaiIntrequestFIFOWarning:
mbed_official 324:406fd2029f23 391 BW_I2S_TCSR_FWIE(saiBaseAddr, enable);
mbed_official 324:406fd2029f23 392 break;
mbed_official 324:406fd2029f23 393 case kSaiIntrequestFIFOError:
mbed_official 324:406fd2029f23 394 BW_I2S_TCSR_FEIE(saiBaseAddr, enable);
mbed_official 324:406fd2029f23 395 break;
mbed_official 324:406fd2029f23 396 case kSaiIntrequestFIFORequest:
mbed_official 324:406fd2029f23 397 BW_I2S_TCSR_FRIE(saiBaseAddr, enable);
mbed_official 324:406fd2029f23 398 break;
mbed_official 146:f64d43ff0c18 399 default:
mbed_official 146:f64d43ff0c18 400 break;
mbed_official 146:f64d43ff0c18 401 }
mbed_official 146:f64d43ff0c18 402 }
mbed_official 146:f64d43ff0c18 403
mbed_official 146:f64d43ff0c18 404 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 405 *
mbed_official 324:406fd2029f23 406 * Function Name : SAI_HAL_RxSetIntCmd
mbed_official 324:406fd2029f23 407 * Description : Enable the interrupt request source for rx.
mbed_official 146:f64d43ff0c18 408 *The source can be word start, sync error, FIFO empty, FIFO error and FIFO request.
mbed_official 146:f64d43ff0c18 409 *END**************************************************************************/
mbed_official 324:406fd2029f23 410 void SAI_HAL_RxSetIntCmd(uint32_t saiBaseAddr,sai_interrupt_request_t source,bool enable)
mbed_official 146:f64d43ff0c18 411 {
mbed_official 324:406fd2029f23 412 switch(source)
mbed_official 146:f64d43ff0c18 413 {
mbed_official 146:f64d43ff0c18 414 case kSaiIntrequestWordStart:
mbed_official 324:406fd2029f23 415 BW_I2S_RCSR_WSIE(saiBaseAddr, enable);
mbed_official 146:f64d43ff0c18 416 break;
mbed_official 146:f64d43ff0c18 417 case kSaiIntrequestSyncError:
mbed_official 324:406fd2029f23 418 BW_I2S_RCSR_SEIE(saiBaseAddr, enable);
mbed_official 146:f64d43ff0c18 419 break;
mbed_official 146:f64d43ff0c18 420 case kSaiIntrequestFIFOWarning:
mbed_official 324:406fd2029f23 421 BW_I2S_RCSR_FWIE(saiBaseAddr, enable);
mbed_official 146:f64d43ff0c18 422 break;
mbed_official 146:f64d43ff0c18 423 case kSaiIntrequestFIFOError:
mbed_official 324:406fd2029f23 424 BW_I2S_RCSR_FEIE(saiBaseAddr, enable);
mbed_official 146:f64d43ff0c18 425 break;
mbed_official 146:f64d43ff0c18 426 case kSaiIntrequestFIFORequest:
mbed_official 324:406fd2029f23 427 BW_I2S_RCSR_FRIE(saiBaseAddr, enable);
mbed_official 146:f64d43ff0c18 428 break;
mbed_official 146:f64d43ff0c18 429 default:
mbed_official 146:f64d43ff0c18 430 break;
mbed_official 146:f64d43ff0c18 431 }
mbed_official 146:f64d43ff0c18 432 }
mbed_official 146:f64d43ff0c18 433
mbed_official 146:f64d43ff0c18 434 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 435 *
mbed_official 324:406fd2029f23 436 * Function Name : SAI_HAL_TxGetIntCmd
mbed_official 324:406fd2029f23 437 * Description : Gets state of tx interrupt source.
mbed_official 146:f64d43ff0c18 438 *The source can be word start, sync error, FIFO empty, FIFO error and FIFO request.
mbed_official 146:f64d43ff0c18 439 *END**************************************************************************/
mbed_official 324:406fd2029f23 440 bool SAI_HAL_TxGetIntCmd(uint32_t saiBaseAddr, sai_interrupt_request_t source)
mbed_official 146:f64d43ff0c18 441 {
mbed_official 324:406fd2029f23 442 bool ret = false;
mbed_official 146:f64d43ff0c18 443 switch (source)
mbed_official 146:f64d43ff0c18 444 {
mbed_official 146:f64d43ff0c18 445 case kSaiIntrequestWordStart:
mbed_official 324:406fd2029f23 446 ret = BR_I2S_TCSR_WSIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 447 break;
mbed_official 146:f64d43ff0c18 448 case kSaiIntrequestSyncError:
mbed_official 324:406fd2029f23 449 ret = BR_I2S_TCSR_SEIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 450 break;
mbed_official 146:f64d43ff0c18 451 case kSaiIntrequestFIFOWarning:
mbed_official 324:406fd2029f23 452 ret = BR_I2S_TCSR_FWIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 453 break;
mbed_official 146:f64d43ff0c18 454 case kSaiIntrequestFIFOError:
mbed_official 324:406fd2029f23 455 ret = BR_I2S_TCSR_FEIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 456 break;
mbed_official 146:f64d43ff0c18 457 case kSaiIntrequestFIFORequest:
mbed_official 324:406fd2029f23 458 ret = BR_I2S_TCSR_FRIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 459 break;
mbed_official 146:f64d43ff0c18 460 default:
mbed_official 146:f64d43ff0c18 461 break;
mbed_official 146:f64d43ff0c18 462 }
mbed_official 324:406fd2029f23 463 return ret;
mbed_official 146:f64d43ff0c18 464 }
mbed_official 146:f64d43ff0c18 465
mbed_official 146:f64d43ff0c18 466 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 467 *
mbed_official 324:406fd2029f23 468 * Function Name : SAI_HAL_RxGetIntCmd
mbed_official 324:406fd2029f23 469 * Description : Gets state of rx interrupt source.
mbed_official 146:f64d43ff0c18 470 *The source can be word start, sync error, FIFO empty, FIFO error and FIFO request.
mbed_official 146:f64d43ff0c18 471 *END**************************************************************************/
mbed_official 324:406fd2029f23 472 bool SAI_HAL_RxGetIntCmd(uint32_t saiBaseAddr,sai_interrupt_request_t source)
mbed_official 146:f64d43ff0c18 473 {
mbed_official 324:406fd2029f23 474 bool ret = false;
mbed_official 324:406fd2029f23 475 switch(source)
mbed_official 146:f64d43ff0c18 476 {
mbed_official 146:f64d43ff0c18 477 case kSaiIntrequestWordStart:
mbed_official 324:406fd2029f23 478 ret = BR_I2S_RCSR_WSIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 479 break;
mbed_official 146:f64d43ff0c18 480 case kSaiIntrequestSyncError:
mbed_official 324:406fd2029f23 481 ret = BR_I2S_RCSR_SEIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 482 break;
mbed_official 146:f64d43ff0c18 483 case kSaiIntrequestFIFOWarning:
mbed_official 324:406fd2029f23 484 ret = BR_I2S_RCSR_FWIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 485 break;
mbed_official 146:f64d43ff0c18 486 case kSaiIntrequestFIFOError:
mbed_official 324:406fd2029f23 487 ret = BR_I2S_RCSR_FEIE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 488 break;
mbed_official 146:f64d43ff0c18 489 case kSaiIntrequestFIFORequest:
mbed_official 324:406fd2029f23 490 ret= BR_I2S_RCSR_FRIE(saiBaseAddr);
mbed_official 324:406fd2029f23 491 break;
mbed_official 324:406fd2029f23 492 default:
mbed_official 324:406fd2029f23 493 break;
mbed_official 324:406fd2029f23 494 }
mbed_official 324:406fd2029f23 495 return ret;
mbed_official 324:406fd2029f23 496 }
mbed_official 324:406fd2029f23 497
mbed_official 324:406fd2029f23 498 /*FUNCTION**********************************************************************
mbed_official 324:406fd2029f23 499 *
mbed_official 324:406fd2029f23 500 * Function Name : SAI_HAL_TxSetDmaCmd
mbed_official 324:406fd2029f23 501 * Description : Enable the dma request source for tx.
mbed_official 324:406fd2029f23 502 *The source can be FIFO empty or FIFO request.
mbed_official 324:406fd2029f23 503 *END**************************************************************************/
mbed_official 324:406fd2029f23 504 void SAI_HAL_TxSetDmaCmd(uint32_t saiBaseAddr, sai_dma_request_t source, bool enable)
mbed_official 324:406fd2029f23 505 {
mbed_official 324:406fd2029f23 506 switch (source)
mbed_official 324:406fd2029f23 507 {
mbed_official 324:406fd2029f23 508 case kSaiDmaReqFIFOWarning:
mbed_official 324:406fd2029f23 509 BW_I2S_TCSR_FWDE(saiBaseAddr, enable);
mbed_official 324:406fd2029f23 510 break;
mbed_official 324:406fd2029f23 511 case kSaiDmaReqFIFORequest:
mbed_official 324:406fd2029f23 512 BW_I2S_TCSR_FRDE(saiBaseAddr, enable);
mbed_official 146:f64d43ff0c18 513 break;
mbed_official 146:f64d43ff0c18 514 default:
mbed_official 146:f64d43ff0c18 515 break;
mbed_official 146:f64d43ff0c18 516 }
mbed_official 146:f64d43ff0c18 517 }
mbed_official 146:f64d43ff0c18 518
mbed_official 146:f64d43ff0c18 519 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 520 *
mbed_official 324:406fd2029f23 521 * Function Name : SAI_HAL_RxSetDmaCmd
mbed_official 146:f64d43ff0c18 522 * Description : Enable the dma request source for rx.
mbed_official 146:f64d43ff0c18 523 *The source can be FIFO empty or FIFO request.
mbed_official 146:f64d43ff0c18 524 *END**************************************************************************/
mbed_official 324:406fd2029f23 525 void SAI_HAL_RxSetDmaCmd(uint32_t saiBaseAddr,sai_dma_request_t source,bool enable)
mbed_official 146:f64d43ff0c18 526 {
mbed_official 324:406fd2029f23 527 switch (source)
mbed_official 146:f64d43ff0c18 528 {
mbed_official 146:f64d43ff0c18 529 case kSaiDmaReqFIFOWarning:
mbed_official 324:406fd2029f23 530 BW_I2S_RCSR_FWDE(saiBaseAddr,enable);
mbed_official 146:f64d43ff0c18 531 break;
mbed_official 146:f64d43ff0c18 532 case kSaiDmaReqFIFORequest:
mbed_official 324:406fd2029f23 533 BW_I2S_RCSR_FRDE(saiBaseAddr,enable);
mbed_official 146:f64d43ff0c18 534 break;
mbed_official 146:f64d43ff0c18 535 default:
mbed_official 146:f64d43ff0c18 536 break;
mbed_official 146:f64d43ff0c18 537 }
mbed_official 146:f64d43ff0c18 538 }
mbed_official 146:f64d43ff0c18 539
mbed_official 146:f64d43ff0c18 540 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 541 *
mbed_official 324:406fd2029f23 542 * Function Name : SAI_HAL_TxGetDmaCmd
mbed_official 324:406fd2029f23 543 * Description : Gets state of tx dma request source.
mbed_official 146:f64d43ff0c18 544 *The source can be FIFO empty or FIFO request.
mbed_official 146:f64d43ff0c18 545 *END**************************************************************************/
mbed_official 324:406fd2029f23 546 bool SAI_HAL_TxGetDmaCmd(uint32_t saiBaseAddr, sai_dma_request_t source)
mbed_official 146:f64d43ff0c18 547 {
mbed_official 324:406fd2029f23 548 bool ret = false;
mbed_official 324:406fd2029f23 549 switch (source)
mbed_official 146:f64d43ff0c18 550 {
mbed_official 146:f64d43ff0c18 551 case kSaiDmaReqFIFOWarning:
mbed_official 324:406fd2029f23 552 ret = BR_I2S_TCSR_FWDE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 553 break;
mbed_official 146:f64d43ff0c18 554 case kSaiDmaReqFIFORequest:
mbed_official 324:406fd2029f23 555 ret = BR_I2S_TCSR_FRDE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 556 break;
mbed_official 146:f64d43ff0c18 557 default:
mbed_official 146:f64d43ff0c18 558 break;
mbed_official 146:f64d43ff0c18 559 }
mbed_official 324:406fd2029f23 560 return ret;
mbed_official 146:f64d43ff0c18 561 }
mbed_official 146:f64d43ff0c18 562
mbed_official 146:f64d43ff0c18 563 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 564 *
mbed_official 324:406fd2029f23 565 * Function Name : SAI_HAL_RxGetDmaCmd
mbed_official 324:406fd2029f23 566 * Description : Gets state of rx dma request source.
mbed_official 146:f64d43ff0c18 567 *The source can be FIFO empty or FIFO request.
mbed_official 146:f64d43ff0c18 568 *END**************************************************************************/
mbed_official 324:406fd2029f23 569 bool SAI_HAL_RxGetDmaCmd(uint32_t saiBaseAddr,sai_dma_request_t source)
mbed_official 146:f64d43ff0c18 570 {
mbed_official 324:406fd2029f23 571 bool ret = false;
mbed_official 324:406fd2029f23 572 switch (source)
mbed_official 146:f64d43ff0c18 573 {
mbed_official 146:f64d43ff0c18 574 case kSaiDmaReqFIFOWarning:
mbed_official 324:406fd2029f23 575 ret = BR_I2S_RCSR_FWDE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 576 break;
mbed_official 146:f64d43ff0c18 577 case kSaiDmaReqFIFORequest:
mbed_official 324:406fd2029f23 578 ret = BR_I2S_RCSR_FRDE(saiBaseAddr);
mbed_official 146:f64d43ff0c18 579 break;
mbed_official 146:f64d43ff0c18 580 default:
mbed_official 146:f64d43ff0c18 581 break;
mbed_official 146:f64d43ff0c18 582 }
mbed_official 324:406fd2029f23 583 return ret;
mbed_official 146:f64d43ff0c18 584 }
mbed_official 146:f64d43ff0c18 585
mbed_official 146:f64d43ff0c18 586 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 587 *
mbed_official 324:406fd2029f23 588 * Function Name : SAI_HAL_TxClearStateFlag
mbed_official 146:f64d43ff0c18 589 * Description : Clear the state flag of tx registers.
mbed_official 146:f64d43ff0c18 590 *The state flag incudes word start flag, sync error flag and fifo error flag.
mbed_official 146:f64d43ff0c18 591 *END**************************************************************************/
mbed_official 324:406fd2029f23 592 void SAI_HAL_TxClearStateFlag(uint32_t saiBaseAddr, sai_state_flag_t flag)
mbed_official 146:f64d43ff0c18 593 {
mbed_official 146:f64d43ff0c18 594 switch (flag)
mbed_official 146:f64d43ff0c18 595 {
mbed_official 146:f64d43ff0c18 596 case kSaiStateFlagWordStart:
mbed_official 324:406fd2029f23 597 BW_I2S_TCSR_WSF(saiBaseAddr,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 598 break;
mbed_official 146:f64d43ff0c18 599 case kSaiStateFlagSyncError:
mbed_official 324:406fd2029f23 600 BW_I2S_TCSR_SEF(saiBaseAddr,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 601 break;
mbed_official 146:f64d43ff0c18 602 case kSaiStateFlagFIFOError:
mbed_official 324:406fd2029f23 603 BW_I2S_TCSR_FEF(saiBaseAddr,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 604 break;
mbed_official 146:f64d43ff0c18 605 case kSaiStateFlagSoftReset:
mbed_official 324:406fd2029f23 606 BW_I2S_TCSR_SR(saiBaseAddr, 0);
mbed_official 146:f64d43ff0c18 607 break;
mbed_official 146:f64d43ff0c18 608 default:
mbed_official 146:f64d43ff0c18 609 break;
mbed_official 146:f64d43ff0c18 610 }
mbed_official 146:f64d43ff0c18 611 }
mbed_official 146:f64d43ff0c18 612
mbed_official 146:f64d43ff0c18 613 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 614 *
mbed_official 324:406fd2029f23 615 * Function Name : SAI_HAL_RxClearStateFlag
mbed_official 146:f64d43ff0c18 616 * Description : Clear the state flag of rx registers.
mbed_official 146:f64d43ff0c18 617 *The state flag incudes word start flag, sync error flag and fifo error flag.
mbed_official 146:f64d43ff0c18 618 *END**************************************************************************/
mbed_official 324:406fd2029f23 619 void SAI_HAL_RxClearStateFlag(uint32_t saiBaseAddr,sai_state_flag_t flag)
mbed_official 146:f64d43ff0c18 620 {
mbed_official 146:f64d43ff0c18 621 switch (flag)
mbed_official 146:f64d43ff0c18 622 {
mbed_official 146:f64d43ff0c18 623 case kSaiStateFlagWordStart:
mbed_official 324:406fd2029f23 624 BW_I2S_RCSR_WSF(saiBaseAddr,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 625 break;
mbed_official 146:f64d43ff0c18 626 case kSaiStateFlagSyncError:
mbed_official 324:406fd2029f23 627 BW_I2S_RCSR_SEF(saiBaseAddr,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 628 break;
mbed_official 146:f64d43ff0c18 629 case kSaiStateFlagFIFOError:
mbed_official 324:406fd2029f23 630 BW_I2S_RCSR_FEF(saiBaseAddr,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 631 break;
mbed_official 146:f64d43ff0c18 632 case kSaiStateFlagSoftReset:
mbed_official 324:406fd2029f23 633 BW_I2S_RCSR_SR(saiBaseAddr, 0);
mbed_official 146:f64d43ff0c18 634 break;
mbed_official 146:f64d43ff0c18 635 default:
mbed_official 146:f64d43ff0c18 636 break;
mbed_official 146:f64d43ff0c18 637 }
mbed_official 146:f64d43ff0c18 638 }
mbed_official 146:f64d43ff0c18 639
mbed_official 146:f64d43ff0c18 640 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 641 *
mbed_official 324:406fd2029f23 642 * Function Name : SAI_HAL_TxSetReset
mbed_official 146:f64d43ff0c18 643 * Description : Reset tx according to reset mode.
mbed_official 146:f64d43ff0c18 644 *The reset mode can be software reset and FIFO reset.
mbed_official 146:f64d43ff0c18 645 *END**************************************************************************/
mbed_official 324:406fd2029f23 646 void SAI_HAL_TxSetReset(uint32_t saiBaseAddr, sai_reset_type_t type)
mbed_official 146:f64d43ff0c18 647 {
mbed_official 324:406fd2029f23 648 switch (type)
mbed_official 146:f64d43ff0c18 649 {
mbed_official 146:f64d43ff0c18 650 case kSaiResetTypeSoftware:
mbed_official 324:406fd2029f23 651 BW_I2S_TCSR_SR(saiBaseAddr,1);
mbed_official 146:f64d43ff0c18 652 break;
mbed_official 146:f64d43ff0c18 653 case kSaiResetTypeFIFO:
mbed_official 324:406fd2029f23 654 BW_I2S_TCSR_FR(saiBaseAddr, 1);
mbed_official 146:f64d43ff0c18 655 break;
mbed_official 146:f64d43ff0c18 656 default:
mbed_official 146:f64d43ff0c18 657 break;
mbed_official 146:f64d43ff0c18 658 }
mbed_official 146:f64d43ff0c18 659 }
mbed_official 146:f64d43ff0c18 660
mbed_official 146:f64d43ff0c18 661 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 662 *
mbed_official 324:406fd2029f23 663 * Function Name : SAI_HAL_RxSetReset
mbed_official 146:f64d43ff0c18 664 * Description : Reset rx according to reset mode.
mbed_official 146:f64d43ff0c18 665 *The reset mode can be software reset and FIFO reset.
mbed_official 146:f64d43ff0c18 666 *END**************************************************************************/
mbed_official 324:406fd2029f23 667 void SAI_HAL_RxSetReset(uint32_t saiBaseAddr,sai_reset_type_t type)
mbed_official 146:f64d43ff0c18 668 {
mbed_official 324:406fd2029f23 669 switch (type)
mbed_official 146:f64d43ff0c18 670 {
mbed_official 146:f64d43ff0c18 671 case kSaiResetTypeSoftware:
mbed_official 324:406fd2029f23 672 BW_I2S_RCSR_SR(saiBaseAddr,1);
mbed_official 146:f64d43ff0c18 673 break;
mbed_official 146:f64d43ff0c18 674 case kSaiResetTypeFIFO:
mbed_official 324:406fd2029f23 675 BW_I2S_RCSR_FR(saiBaseAddr, 1);
mbed_official 146:f64d43ff0c18 676 break;
mbed_official 146:f64d43ff0c18 677 default:
mbed_official 146:f64d43ff0c18 678 break;
mbed_official 146:f64d43ff0c18 679 }
mbed_official 146:f64d43ff0c18 680 }
mbed_official 146:f64d43ff0c18 681
mbed_official 146:f64d43ff0c18 682 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 683 *
mbed_official 324:406fd2029f23 684 * Function Name : SAI_HAL_TxSetRunModeCmd
mbed_official 324:406fd2029f23 685 * Description : Set the work mode for tx.
mbed_official 324:406fd2029f23 686 *The work mode have stop mode, debug mode and normal mode.
mbed_official 324:406fd2029f23 687 *END**************************************************************************/
mbed_official 324:406fd2029f23 688 void SAI_HAL_TxSetRunModeCmd(uint32_t saiBaseAddr, sai_run_mode_t run_mode, bool enable)
mbed_official 324:406fd2029f23 689 {
mbed_official 324:406fd2029f23 690 switch (run_mode)
mbed_official 324:406fd2029f23 691 {
mbed_official 324:406fd2029f23 692 case kSaiRunModeStop:
mbed_official 324:406fd2029f23 693 BW_I2S_TCSR_STOPE(saiBaseAddr, enable);/* Stop mode */
mbed_official 324:406fd2029f23 694 break;
mbed_official 324:406fd2029f23 695 case kSaiRunModeDebug:
mbed_official 324:406fd2029f23 696 BW_I2S_TCSR_DBGE(saiBaseAddr, enable);/* Debug mode */
mbed_official 324:406fd2029f23 697 break;
mbed_official 324:406fd2029f23 698 default:
mbed_official 324:406fd2029f23 699 break;
mbed_official 324:406fd2029f23 700 }
mbed_official 324:406fd2029f23 701 }
mbed_official 324:406fd2029f23 702
mbed_official 324:406fd2029f23 703 /*FUNCTION**********************************************************************
mbed_official 324:406fd2029f23 704 *
mbed_official 324:406fd2029f23 705 * Function Name : SAI_HAL_RxSetRunModeCmd
mbed_official 146:f64d43ff0c18 706 * Description : Set the work mode for rx.
mbed_official 146:f64d43ff0c18 707 *The work mode have stop mode, debug mode and normal mode.
mbed_official 146:f64d43ff0c18 708 *END**************************************************************************/
mbed_official 324:406fd2029f23 709 void SAI_HAL_RxSetRunModeCmd(uint32_t saiBaseAddr,sai_run_mode_t run_mode,bool enable)
mbed_official 146:f64d43ff0c18 710 {
mbed_official 324:406fd2029f23 711 switch (run_mode)
mbed_official 146:f64d43ff0c18 712 {
mbed_official 146:f64d43ff0c18 713 case kSaiRunModeStop:
mbed_official 324:406fd2029f23 714 BW_I2S_RCSR_STOPE(saiBaseAddr, enable);/* Stop mode */
mbed_official 146:f64d43ff0c18 715 break;
mbed_official 146:f64d43ff0c18 716 case kSaiRunModeDebug:
mbed_official 324:406fd2029f23 717 BW_I2S_RCSR_DBGE(saiBaseAddr, enable);/* Debug mode */
mbed_official 146:f64d43ff0c18 718 break;
mbed_official 146:f64d43ff0c18 719 default:
mbed_official 146:f64d43ff0c18 720 break;
mbed_official 146:f64d43ff0c18 721 }
mbed_official 146:f64d43ff0c18 722 }
mbed_official 146:f64d43ff0c18 723
mbed_official 146:f64d43ff0c18 724 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 725 *
mbed_official 324:406fd2029f23 726 * Function Name : SAI_HAL_TxGetFlagState
mbed_official 324:406fd2029f23 727 * Description : Get the state flag value of tx.
mbed_official 324:406fd2029f23 728 *The state flag includes fifo error, fifo warning, fifo request, software reset,
mbed_official 324:406fd2029f23 729 * sync error and word start.
mbed_official 146:f64d43ff0c18 730 *END**************************************************************************/
mbed_official 324:406fd2029f23 731 bool SAI_HAL_TxGetStateFlag(uint32_t saiBaseAddr,sai_state_flag_t flag)
mbed_official 146:f64d43ff0c18 732 {
mbed_official 324:406fd2029f23 733 bool ret = false;
mbed_official 324:406fd2029f23 734 switch(flag)
mbed_official 146:f64d43ff0c18 735 {
mbed_official 324:406fd2029f23 736 case kSaiStateFlagFIFOError:
mbed_official 324:406fd2029f23 737 ret = BR_I2S_TCSR_FEF(saiBaseAddr);
mbed_official 324:406fd2029f23 738 break;
mbed_official 324:406fd2029f23 739 case kSaiStateFlagFIFORequest:
mbed_official 324:406fd2029f23 740 ret = BR_I2S_TCSR_FRF(saiBaseAddr);
mbed_official 324:406fd2029f23 741 break;
mbed_official 324:406fd2029f23 742 case kSaiStateFlagFIFOWarning:
mbed_official 324:406fd2029f23 743 ret = BR_I2S_TCSR_FWF(saiBaseAddr);
mbed_official 324:406fd2029f23 744 break;
mbed_official 324:406fd2029f23 745 case kSaiStateFlagSoftReset:
mbed_official 324:406fd2029f23 746 ret = BR_I2S_TCSR_SR(saiBaseAddr);
mbed_official 324:406fd2029f23 747 break;
mbed_official 324:406fd2029f23 748 case kSaiStateFlagSyncError:
mbed_official 324:406fd2029f23 749 ret = BR_I2S_TCSR_SEF(saiBaseAddr);
mbed_official 324:406fd2029f23 750 break;
mbed_official 324:406fd2029f23 751 case kSaiStateFlagWordStart:
mbed_official 324:406fd2029f23 752 ret = BR_I2S_TCSR_WSF(saiBaseAddr);
mbed_official 324:406fd2029f23 753 break;
mbed_official 146:f64d43ff0c18 754 default:
mbed_official 146:f64d43ff0c18 755 break;
mbed_official 146:f64d43ff0c18 756 }
mbed_official 324:406fd2029f23 757 return ret;
mbed_official 146:f64d43ff0c18 758 }
mbed_official 146:f64d43ff0c18 759
mbed_official 146:f64d43ff0c18 760 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 761 *
mbed_official 324:406fd2029f23 762 * Function Name : SAI_HAL_RxGetFlagState
mbed_official 324:406fd2029f23 763 * Description : Get the state flag value of rx.
mbed_official 324:406fd2029f23 764 *The state flag includes fifo error, fifo warning, fifo request, software reset,
mbed_official 324:406fd2029f23 765 * sync error and word start.
mbed_official 146:f64d43ff0c18 766 *END**************************************************************************/
mbed_official 324:406fd2029f23 767 bool SAI_HAL_RxGetStateFlag(uint32_t saiBaseAddr,sai_state_flag_t flag)
mbed_official 146:f64d43ff0c18 768 {
mbed_official 324:406fd2029f23 769 bool ret = false;
mbed_official 324:406fd2029f23 770 switch(flag)
mbed_official 146:f64d43ff0c18 771 {
mbed_official 324:406fd2029f23 772 case kSaiStateFlagFIFOError:
mbed_official 324:406fd2029f23 773 ret = BR_I2S_RCSR_FEF(saiBaseAddr);
mbed_official 324:406fd2029f23 774 break;
mbed_official 324:406fd2029f23 775 case kSaiStateFlagFIFORequest:
mbed_official 324:406fd2029f23 776 ret = BR_I2S_RCSR_FRF(saiBaseAddr);
mbed_official 324:406fd2029f23 777 break;
mbed_official 324:406fd2029f23 778 case kSaiStateFlagFIFOWarning:
mbed_official 324:406fd2029f23 779 ret = BR_I2S_RCSR_FWF(saiBaseAddr);
mbed_official 324:406fd2029f23 780 break;
mbed_official 324:406fd2029f23 781 case kSaiStateFlagSoftReset:
mbed_official 324:406fd2029f23 782 ret = BR_I2S_RCSR_SR(saiBaseAddr);
mbed_official 324:406fd2029f23 783 break;
mbed_official 324:406fd2029f23 784 case kSaiStateFlagSyncError:
mbed_official 324:406fd2029f23 785 ret = BR_I2S_RCSR_SEF(saiBaseAddr);
mbed_official 324:406fd2029f23 786 break;
mbed_official 324:406fd2029f23 787 case kSaiStateFlagWordStart:
mbed_official 324:406fd2029f23 788 ret = BR_I2S_RCSR_WSF(saiBaseAddr);
mbed_official 324:406fd2029f23 789 break;
mbed_official 146:f64d43ff0c18 790 default:
mbed_official 146:f64d43ff0c18 791 break;
mbed_official 146:f64d43ff0c18 792 }
mbed_official 324:406fd2029f23 793 return ret;
mbed_official 146:f64d43ff0c18 794 }
mbed_official 146:f64d43ff0c18 795
mbed_official 146:f64d43ff0c18 796 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 797 *
mbed_official 324:406fd2029f23 798 * Function Name : SAI_HAL_ReceiveDataBlocking
mbed_official 324:406fd2029f23 799 * Description : Receive data in blocking way.
mbed_official 324:406fd2029f23 800 *The sending would wait until there is vaild data in FIFO for reading.
mbed_official 146:f64d43ff0c18 801 *END**************************************************************************/
mbed_official 324:406fd2029f23 802 uint32_t SAI_HAL_ReceiveDataBlocking(uint32_t saiBaseAddr,uint32_t rx_channel)
mbed_official 146:f64d43ff0c18 803 {
mbed_official 324:406fd2029f23 804 assert(rx_channel < FSL_FEATURE_SAI_CHANNEL_COUNT);
mbed_official 324:406fd2029f23 805 /* Wait while fifo is empty */
mbed_official 324:406fd2029f23 806 uint8_t w_ptr = BR_I2S_RFRn_WFP(saiBaseAddr,rx_channel);
mbed_official 324:406fd2029f23 807 uint8_t r_ptr = BR_I2S_RFRn_RFP(saiBaseAddr,rx_channel);
mbed_official 324:406fd2029f23 808 while(w_ptr == r_ptr)
mbed_official 146:f64d43ff0c18 809 {
mbed_official 324:406fd2029f23 810 w_ptr = BR_I2S_RFRn_WFP(saiBaseAddr,rx_channel);
mbed_official 324:406fd2029f23 811 r_ptr = BR_I2S_RFRn_RFP(saiBaseAddr,rx_channel);
mbed_official 146:f64d43ff0c18 812 }
mbed_official 324:406fd2029f23 813 return BR_I2S_RDRn_RDR(saiBaseAddr,rx_channel);
mbed_official 146:f64d43ff0c18 814 }
mbed_official 146:f64d43ff0c18 815
mbed_official 146:f64d43ff0c18 816 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 817 *
mbed_official 324:406fd2029f23 818 * Function Name : SAI_HAL_SendDataBlocking
mbed_official 324:406fd2029f23 819 * Description : Send data in blocking way.
mbed_official 324:406fd2029f23 820 *The sending would wait until there is space for writing.
mbed_official 146:f64d43ff0c18 821 *END**************************************************************************/
mbed_official 324:406fd2029f23 822 void SAI_HAL_SendDataBlocking(uint32_t saiBaseAddr,uint32_t tx_channel,uint32_t data)
mbed_official 146:f64d43ff0c18 823 {
mbed_official 324:406fd2029f23 824 assert(tx_channel < FSL_FEATURE_SAI_CHANNEL_COUNT);
mbed_official 324:406fd2029f23 825 /* Wait while fifo is full */
mbed_official 324:406fd2029f23 826 uint8_t w_ptr = BR_I2S_TFRn_WFP(saiBaseAddr,tx_channel);
mbed_official 324:406fd2029f23 827 uint8_t r_ptr = BR_I2S_TFRn_RFP(saiBaseAddr,tx_channel);
mbed_official 324:406fd2029f23 828 while((w_ptr ^ r_ptr) == 0x8)
mbed_official 146:f64d43ff0c18 829 {
mbed_official 324:406fd2029f23 830 w_ptr = BR_I2S_TFRn_WFP(saiBaseAddr,tx_channel);
mbed_official 324:406fd2029f23 831 r_ptr = BR_I2S_TFRn_RFP(saiBaseAddr,tx_channel);
mbed_official 146:f64d43ff0c18 832 }
mbed_official 324:406fd2029f23 833 BW_I2S_TDRn_TDR(saiBaseAddr, tx_channel, data);
mbed_official 146:f64d43ff0c18 834 }
mbed_official 146:f64d43ff0c18 835