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 Apr 03 11:45:06 2014 +0100
Revision:
149:1fb5f62b92bd
Parent:
targets/hal/TARGET_Freescale/TARGET_KSDK_MCUS/TARGET_KSDK_CODE/hal/sai/fsl_sai_hal.c@146:f64d43ff0c18
Child:
324:406fd2029f23
Synchronized with git revision 220c0bb39ceee40016e1e86350c058963d01ed42

Full URL: https://github.com/mbedmicro/mbed/commit/220c0bb39ceee40016e1e86350c058963d01ed42/

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 /******************************************************************************
mbed_official 146:f64d43ff0c18 35 *Code
mbed_official 146:f64d43ff0c18 36 ******************************************************************************/
mbed_official 146:f64d43ff0c18 37
mbed_official 146:f64d43ff0c18 38 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 39 *
mbed_official 146:f64d43ff0c18 40 * Function Name : sai_hal_init
mbed_official 146:f64d43ff0c18 41 * Description : Initialize the sai register, just set the register vaule to zero.
mbed_official 146:f64d43ff0c18 42 *This function just clear the register value of sai.
mbed_official 146:f64d43ff0c18 43 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 44 void sai_hal_init(uint8_t instance)
mbed_official 146:f64d43ff0c18 45 {
mbed_official 146:f64d43ff0c18 46 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 47 /* Reset the internal logic of sai.*/
mbed_official 146:f64d43ff0c18 48 BW_I2S_TCSR_SR(instance,1);
mbed_official 146:f64d43ff0c18 49 BW_I2S_RCSR_SR(instance,1);
mbed_official 146:f64d43ff0c18 50 /*Clear all the registers.*/
mbed_official 146:f64d43ff0c18 51 HW_I2S_TCSR_WR(instance, 0);
mbed_official 146:f64d43ff0c18 52 HW_I2S_TCR1_WR(instance, 0);
mbed_official 146:f64d43ff0c18 53 HW_I2S_TCR2_WR(instance, 0);
mbed_official 146:f64d43ff0c18 54 HW_I2S_TCR3_WR(instance, 0);
mbed_official 146:f64d43ff0c18 55 HW_I2S_TCR4_WR(instance, 0);
mbed_official 146:f64d43ff0c18 56 HW_I2S_TCR5_WR(instance, 0);
mbed_official 146:f64d43ff0c18 57 HW_I2S_TMR_WR(instance,0);
mbed_official 146:f64d43ff0c18 58 HW_I2S_RCSR_WR(instance, 0);
mbed_official 146:f64d43ff0c18 59 HW_I2S_RCR1_WR(instance, 0);
mbed_official 146:f64d43ff0c18 60 HW_I2S_RCR2_WR(instance, 0);
mbed_official 146:f64d43ff0c18 61 HW_I2S_RCR3_WR(instance, 0);
mbed_official 146:f64d43ff0c18 62 HW_I2S_RCR4_WR(instance, 0);
mbed_official 146:f64d43ff0c18 63 HW_I2S_RCR5_WR(instance, 0);
mbed_official 146:f64d43ff0c18 64 HW_I2S_RMR_WR(instance,0);
mbed_official 146:f64d43ff0c18 65 HW_I2S_MDR_WR(instance,0);
mbed_official 146:f64d43ff0c18 66 HW_I2S_MCR_WR(instance,0);
mbed_official 146:f64d43ff0c18 67 }
mbed_official 146:f64d43ff0c18 68
mbed_official 146:f64d43ff0c18 69 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 70 *
mbed_official 146:f64d43ff0c18 71 * Function Name : sai_hal_set_tx_bus
mbed_official 146:f64d43ff0c18 72 * Description : According to the protocol type to set the registers for tx.
mbed_official 146:f64d43ff0c18 73 *The protocol can be I2S left, I2S right, I2S and so on.
mbed_official 146:f64d43ff0c18 74 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 75 void sai_hal_set_tx_bus(uint8_t instance, sai_bus_t bus_mode)
mbed_official 146:f64d43ff0c18 76 {
mbed_official 146:f64d43ff0c18 77 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 78
mbed_official 146:f64d43ff0c18 79 switch (bus_mode)
mbed_official 146:f64d43ff0c18 80 {
mbed_official 146:f64d43ff0c18 81 case kSaiBusI2SLeft:
mbed_official 146:f64d43ff0c18 82 BW_I2S_TCR2_BCP(instance,1U);/* Bit clock polarity */
mbed_official 146:f64d43ff0c18 83 BW_I2S_TCR4_MF(instance,1U);/* MSB transmitted fisrt */
mbed_official 146:f64d43ff0c18 84 BW_I2S_TCR4_FSE(instance,1U);/*Frame sync one bit early */
mbed_official 146:f64d43ff0c18 85 BW_I2S_TCR4_FSP(instance,1U);/* Frame sync polarity, left channel is high */
mbed_official 146:f64d43ff0c18 86 break;
mbed_official 146:f64d43ff0c18 87
mbed_official 146:f64d43ff0c18 88 case kSaiBusI2SRight:
mbed_official 146:f64d43ff0c18 89 BW_I2S_TCR2_BCP(instance,1U);/* Bit clock polarity */
mbed_official 146:f64d43ff0c18 90 BW_I2S_TCR4_MF(instance,1U);/* MSB transmitted fisrt */
mbed_official 146:f64d43ff0c18 91 BW_I2S_TCR4_FSE(instance,1U);/*Frame sync one bit early */
mbed_official 146:f64d43ff0c18 92 BW_I2S_TCR4_FSP(instance,1U);/* Frame sync polarity, left chennel is high */
mbed_official 146:f64d43ff0c18 93 break;
mbed_official 146:f64d43ff0c18 94
mbed_official 146:f64d43ff0c18 95 case kSaiBusI2SType:
mbed_official 146:f64d43ff0c18 96 BW_I2S_TCR2_BCP(instance,1U);/*Bit clock polarity */
mbed_official 146:f64d43ff0c18 97 BW_I2S_TCR4_MF(instance,1U);/*MSB transmitted fisrt */
mbed_official 146:f64d43ff0c18 98 BW_I2S_TCR4_FSE(instance,1U);/* Frame sync one bit early */
mbed_official 146:f64d43ff0c18 99 BW_I2S_TCR4_FSP(instance,0U);/* Frame sync polarity, left channel is low */
mbed_official 146:f64d43ff0c18 100 break;
mbed_official 146:f64d43ff0c18 101
mbed_official 146:f64d43ff0c18 102 default:
mbed_official 146:f64d43ff0c18 103 break;
mbed_official 146:f64d43ff0c18 104 }
mbed_official 146:f64d43ff0c18 105
mbed_official 146:f64d43ff0c18 106 }
mbed_official 146:f64d43ff0c18 107
mbed_official 146:f64d43ff0c18 108 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 109 *
mbed_official 146:f64d43ff0c18 110 * Function Name : sai_hal_set_rx_bus
mbed_official 146:f64d43ff0c18 111 * Description : According to the protocol type to set the registers for rx.
mbed_official 146:f64d43ff0c18 112 *The protocol can be I2S left, I2S right, I2S and so on.
mbed_official 146:f64d43ff0c18 113 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 114 void sai_hal_set_rx_bus(uint8_t instance, sai_bus_t bus_mode)
mbed_official 146:f64d43ff0c18 115 {
mbed_official 146:f64d43ff0c18 116 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 117
mbed_official 146:f64d43ff0c18 118 switch (bus_mode)
mbed_official 146:f64d43ff0c18 119 {
mbed_official 146:f64d43ff0c18 120 case kSaiBusI2SLeft:
mbed_official 146:f64d43ff0c18 121 BW_I2S_RCR2_BCP(instance,1);/*Bit clock polarity */
mbed_official 146:f64d43ff0c18 122 BW_I2S_RCR4_MF(instance,1);/* MSB transmitted fisrt */
mbed_official 146:f64d43ff0c18 123 BW_I2S_RCR4_FSE(instance,1);/* Frame sync one bit early */
mbed_official 146:f64d43ff0c18 124 BW_I2S_RCR4_FSP(instance,1);/* Frame sync polarity, left chennel is high */
mbed_official 146:f64d43ff0c18 125 break;
mbed_official 146:f64d43ff0c18 126
mbed_official 146:f64d43ff0c18 127 case kSaiBusI2SRight:
mbed_official 146:f64d43ff0c18 128 BW_I2S_RCR2_BCP(instance,1);/* Bit clock polarity */
mbed_official 146:f64d43ff0c18 129 BW_I2S_RCR4_MF(instance,1);/* MSB transmitted fisrt */
mbed_official 146:f64d43ff0c18 130 BW_I2S_RCR4_FSE(instance,1);/* Frame sync one bit early */
mbed_official 146:f64d43ff0c18 131 BW_I2S_RCR4_FSP(instance,1);/* Frame sync polarity, left chennel is high */
mbed_official 146:f64d43ff0c18 132 break;
mbed_official 146:f64d43ff0c18 133
mbed_official 146:f64d43ff0c18 134 case kSaiBusI2SType:
mbed_official 146:f64d43ff0c18 135 BW_I2S_RCR2_BCP(instance,1);/* Bit clock polarity */
mbed_official 146:f64d43ff0c18 136 BW_I2S_RCR4_MF(instance,1);/* MSB transmitted fisrt */
mbed_official 146:f64d43ff0c18 137 BW_I2S_RCR4_FSE(instance,1);/* Frame sync one bit early */
mbed_official 146:f64d43ff0c18 138 BW_I2S_RCR4_FSP(instance,0);/* Frame sync polarity, left channel is low */
mbed_official 146:f64d43ff0c18 139 break;
mbed_official 146:f64d43ff0c18 140
mbed_official 146:f64d43ff0c18 141 default:
mbed_official 146:f64d43ff0c18 142 break;
mbed_official 146:f64d43ff0c18 143 }
mbed_official 146:f64d43ff0c18 144 }
mbed_official 146:f64d43ff0c18 145
mbed_official 146:f64d43ff0c18 146 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 147 *
mbed_official 146:f64d43ff0c18 148 * Function Name : sai_hal_set_mclk_divider
mbed_official 146:f64d43ff0c18 149 * Description : Set the divider from the clock source to get the master clock.
mbed_official 146:f64d43ff0c18 150 *The function would compute the divider number and set the number to the registers.
mbed_official 146:f64d43ff0c18 151 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 152 void sai_hal_set_mclk_divider(uint8_t instance, uint32_t mclk, uint32_t src_clk)
mbed_official 146:f64d43ff0c18 153 {
mbed_official 146:f64d43ff0c18 154 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 155
mbed_official 146:f64d43ff0c18 156 uint32_t freq = src_clk;
mbed_official 146:f64d43ff0c18 157 uint16_t fract, divide;
mbed_official 146:f64d43ff0c18 158 uint32_t remaind = 0;
mbed_official 146:f64d43ff0c18 159 uint32_t current_remainder = 0xffffffff;
mbed_official 146:f64d43ff0c18 160 uint16_t current_fract = 0;
mbed_official 146:f64d43ff0c18 161 uint16_t current_divide = 0;
mbed_official 146:f64d43ff0c18 162 uint32_t mul_freq = 0;
mbed_official 146:f64d43ff0c18 163 uint32_t max_fract = SAI_FRACT_MAX;
mbed_official 146:f64d43ff0c18 164 /*In order to prevent overflow */
mbed_official 146:f64d43ff0c18 165 freq /= 10;
mbed_official 146:f64d43ff0c18 166 mclk/= 10;
mbed_official 146:f64d43ff0c18 167 max_fract = mclk * SAI_DIV_MAX/freq;
mbed_official 146:f64d43ff0c18 168 if(max_fract > SAI_FRACT_MAX)
mbed_official 146:f64d43ff0c18 169 {
mbed_official 146:f64d43ff0c18 170 max_fract = SAI_FRACT_MAX;
mbed_official 146:f64d43ff0c18 171 }
mbed_official 146:f64d43ff0c18 172 /* Looking for the closet frequency */
mbed_official 146:f64d43ff0c18 173 for (fract = 1; fract < max_fract; fract ++)
mbed_official 146:f64d43ff0c18 174 {
mbed_official 146:f64d43ff0c18 175 mul_freq = freq * fract;
mbed_official 146:f64d43ff0c18 176 remaind = mul_freq % mclk;
mbed_official 146:f64d43ff0c18 177 divide = mul_freq/mclk;
mbed_official 146:f64d43ff0c18 178 /* Find the exactly frequency */
mbed_official 146:f64d43ff0c18 179 if (remaind == 0)
mbed_official 146:f64d43ff0c18 180 {
mbed_official 146:f64d43ff0c18 181 current_fract = fract;
mbed_official 146:f64d43ff0c18 182 current_divide = mul_freq/mclk;
mbed_official 146:f64d43ff0c18 183 break;
mbed_official 146:f64d43ff0c18 184 }
mbed_official 146:f64d43ff0c18 185 /* closer to next one */
mbed_official 146:f64d43ff0c18 186 if (remaind > mclk/2)
mbed_official 146:f64d43ff0c18 187 {
mbed_official 146:f64d43ff0c18 188 remaind = mclk - remaind;
mbed_official 146:f64d43ff0c18 189 divide += 1;
mbed_official 146:f64d43ff0c18 190 }
mbed_official 146:f64d43ff0c18 191 /* Update the closest div and fract */
mbed_official 146:f64d43ff0c18 192 if (remaind < current_remainder)
mbed_official 146:f64d43ff0c18 193 {
mbed_official 146:f64d43ff0c18 194 current_fract = fract;
mbed_official 146:f64d43ff0c18 195 current_divide = divide;
mbed_official 146:f64d43ff0c18 196 current_remainder = remaind;
mbed_official 146:f64d43ff0c18 197 }
mbed_official 146:f64d43ff0c18 198 }
mbed_official 146:f64d43ff0c18 199 HW_I2S_MDR_WR(instance,((uint32_t)(current_fract-1) << (uint32_t)I2S_MDR_FRACT_SHIFT| (uint32_t)(current_divide-1)));
mbed_official 146:f64d43ff0c18 200 }
mbed_official 146:f64d43ff0c18 201
mbed_official 146:f64d43ff0c18 202 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 203 *
mbed_official 146:f64d43ff0c18 204 * Function Name : sai_hal_set_tx_master_slave
mbed_official 146:f64d43ff0c18 205 * Description : Set the tx master or slave mode.
mbed_official 146:f64d43ff0c18 206 *The slave or master mode only would affect the clock direction relevant registers.
mbed_official 146:f64d43ff0c18 207 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 208 void sai_hal_set_tx_master_slave(uint8_t instance, sai_master_slave_t master_slave_mode)
mbed_official 146:f64d43ff0c18 209 {
mbed_official 146:f64d43ff0c18 210 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 211
mbed_official 146:f64d43ff0c18 212 if (master_slave_mode == kSaiMaster)
mbed_official 146:f64d43ff0c18 213 {
mbed_official 146:f64d43ff0c18 214 BW_I2S_TCR2_BCD(instance,1);/* Bit clock generated internal */
mbed_official 146:f64d43ff0c18 215 BW_I2S_TCR4_FSD(instance,1);/* Frame sync generated internal */
mbed_official 146:f64d43ff0c18 216 BW_I2S_MCR_MOE(instance,1);/* Master clock generated internal */
mbed_official 146:f64d43ff0c18 217 BW_I2S_TCR4_FSP(instance,1);/*Frame sync polarity */
mbed_official 146:f64d43ff0c18 218 }
mbed_official 146:f64d43ff0c18 219 else
mbed_official 146:f64d43ff0c18 220 {
mbed_official 146:f64d43ff0c18 221 BW_I2S_TCR2_BCD(instance,0);/* Bit clock generated external */
mbed_official 146:f64d43ff0c18 222 BW_I2S_TCR4_FSD(instance,0);/* Frame sync generated external */
mbed_official 146:f64d43ff0c18 223 BW_I2S_MCR_MOE(instance,0);/* Master clock generated external */
mbed_official 146:f64d43ff0c18 224 }
mbed_official 146:f64d43ff0c18 225 }
mbed_official 146:f64d43ff0c18 226
mbed_official 146:f64d43ff0c18 227 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 228 *
mbed_official 146:f64d43ff0c18 229 * Function Name : sai_hal_set_rx_master_slave
mbed_official 146:f64d43ff0c18 230 * Description : Set the rx master or slave mode.
mbed_official 146:f64d43ff0c18 231 *The slave or master mode only would affect the clock direction relevant registers.
mbed_official 146:f64d43ff0c18 232 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 233 void sai_hal_set_rx_master_slave(uint8_t instance, sai_master_slave_t master_slave_mode)
mbed_official 146:f64d43ff0c18 234 {
mbed_official 146:f64d43ff0c18 235 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 236
mbed_official 146:f64d43ff0c18 237 if (master_slave_mode == kSaiMaster)
mbed_official 146:f64d43ff0c18 238 {
mbed_official 146:f64d43ff0c18 239 BW_I2S_RCR2_BCD(instance,1);
mbed_official 146:f64d43ff0c18 240 BW_I2S_RCR4_FSD(instance,1);
mbed_official 146:f64d43ff0c18 241 BW_I2S_MCR_MOE(instance,1);
mbed_official 146:f64d43ff0c18 242 }
mbed_official 146:f64d43ff0c18 243 else
mbed_official 146:f64d43ff0c18 244 {
mbed_official 146:f64d43ff0c18 245 BW_I2S_RCR2_BCD(instance,0);
mbed_official 146:f64d43ff0c18 246 BW_I2S_RCR4_FSD(instance,0);
mbed_official 146:f64d43ff0c18 247 BW_I2S_MCR_MOE(instance,0);
mbed_official 146:f64d43ff0c18 248 }
mbed_official 146:f64d43ff0c18 249 }
mbed_official 146:f64d43ff0c18 250
mbed_official 146:f64d43ff0c18 251 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 252 *
mbed_official 146:f64d43ff0c18 253 * Function Name : sai_hal_set_tx_sync_mode
mbed_official 146:f64d43ff0c18 254 * Description : Set the tx sync mode.
mbed_official 146:f64d43ff0c18 255 *Theer are four kinds of sync mode, async, sync, sync with other sai tx, sync with other sai rx.
mbed_official 146:f64d43ff0c18 256 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 257 void sai_hal_set_tx_sync_mode(uint8_t instance, sai_sync_mode_t sync_mode)
mbed_official 146:f64d43ff0c18 258 {
mbed_official 146:f64d43ff0c18 259 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 260 switch (sync_mode)
mbed_official 146:f64d43ff0c18 261 {
mbed_official 146:f64d43ff0c18 262 case kSaiModeAsync:
mbed_official 146:f64d43ff0c18 263 BW_I2S_TCR2_SYNC(instance,0);
mbed_official 146:f64d43ff0c18 264 break;
mbed_official 146:f64d43ff0c18 265 case kSaiModeSync:
mbed_official 146:f64d43ff0c18 266 BW_I2S_TCR2_SYNC(instance,1);
mbed_official 146:f64d43ff0c18 267 BW_I2S_RCR2_SYNC(instance,0);/* Receiver must be async mode */
mbed_official 146:f64d43ff0c18 268 break;
mbed_official 146:f64d43ff0c18 269 case kSaiModeSyncWithOtherTx:
mbed_official 146:f64d43ff0c18 270 BW_I2S_TCR2_SYNC(instance,2);
mbed_official 146:f64d43ff0c18 271 break;
mbed_official 146:f64d43ff0c18 272 case kSaiModeSyncWithOtherRx:
mbed_official 146:f64d43ff0c18 273 BW_I2S_TCR2_SYNC(instance,3);
mbed_official 146:f64d43ff0c18 274 break;
mbed_official 146:f64d43ff0c18 275 default:
mbed_official 146:f64d43ff0c18 276 break;
mbed_official 146:f64d43ff0c18 277 }
mbed_official 146:f64d43ff0c18 278 }
mbed_official 146:f64d43ff0c18 279
mbed_official 146:f64d43ff0c18 280 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 281 *
mbed_official 146:f64d43ff0c18 282 * Function Name : sai_hal_set_rx_sync_mode
mbed_official 146:f64d43ff0c18 283 * Description : Set the rx sync mode.
mbed_official 146:f64d43ff0c18 284 *Theer are four kinds of sync mode, async, sync, sync with other sai rx, sync with other sai tx.
mbed_official 146:f64d43ff0c18 285 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 286 void sai_hal_set_rx_sync_mode(uint8_t instance, sai_sync_mode_t sync_mode)
mbed_official 146:f64d43ff0c18 287 {
mbed_official 146:f64d43ff0c18 288 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 289 switch (sync_mode)
mbed_official 146:f64d43ff0c18 290 {
mbed_official 146:f64d43ff0c18 291 case kSaiModeAsync:
mbed_official 146:f64d43ff0c18 292 BW_I2S_RCR2_SYNC(instance,0);
mbed_official 146:f64d43ff0c18 293 break;
mbed_official 146:f64d43ff0c18 294 case kSaiModeSync:
mbed_official 146:f64d43ff0c18 295 BW_I2S_RCR2_SYNC(instance,1);
mbed_official 146:f64d43ff0c18 296 BW_I2S_TCR2_SYNC(instance,0);/* TX should be async mode */
mbed_official 146:f64d43ff0c18 297 break;
mbed_official 146:f64d43ff0c18 298 case kSaiModeSyncWithOtherTx:
mbed_official 146:f64d43ff0c18 299 BW_I2S_RCR2_SYNC(instance,3);
mbed_official 146:f64d43ff0c18 300 break;
mbed_official 146:f64d43ff0c18 301 case kSaiModeSyncWithOtherRx:
mbed_official 146:f64d43ff0c18 302 BW_I2S_RCR2_SYNC(instance,2);
mbed_official 146:f64d43ff0c18 303 break;
mbed_official 146:f64d43ff0c18 304 default:
mbed_official 146:f64d43ff0c18 305 break;
mbed_official 146:f64d43ff0c18 306 }
mbed_official 146:f64d43ff0c18 307 }
mbed_official 146:f64d43ff0c18 308
mbed_official 146:f64d43ff0c18 309 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 310 *
mbed_official 146:f64d43ff0c18 311 * Function Name : sai_hal_get_fifo_read_pointer
mbed_official 146:f64d43ff0c18 312 * Description : Get the fifo read pointer.
mbed_official 146:f64d43ff0c18 313 *
mbed_official 146:f64d43ff0c18 314 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 315 uint8_t sai_hal_get_fifo_read_pointer(uint8_t instance, sai_io_mode_t io_mode, uint8_t fifo_channel)
mbed_official 146:f64d43ff0c18 316 {
mbed_official 146:f64d43ff0c18 317 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 318 switch (io_mode)
mbed_official 146:f64d43ff0c18 319 {
mbed_official 146:f64d43ff0c18 320 case kSaiIOModeTransmit:
mbed_official 146:f64d43ff0c18 321 return (uint8_t)BR_I2S_TFRn_RFP(instance,fifo_channel);
mbed_official 146:f64d43ff0c18 322 case kSaiIOModeReceive:
mbed_official 146:f64d43ff0c18 323 return (uint8_t)BR_I2S_RFRn_RFP(instance,fifo_channel);
mbed_official 146:f64d43ff0c18 324 default:
mbed_official 146:f64d43ff0c18 325 break;
mbed_official 146:f64d43ff0c18 326 }
mbed_official 146:f64d43ff0c18 327 return 0;
mbed_official 146:f64d43ff0c18 328 }
mbed_official 146:f64d43ff0c18 329
mbed_official 146:f64d43ff0c18 330 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 331 *
mbed_official 146:f64d43ff0c18 332 * Function Name : sai_hal_get_fifo_write_pointer
mbed_official 146:f64d43ff0c18 333 * Description : Get the fifo write pointer.
mbed_official 146:f64d43ff0c18 334 *
mbed_official 146:f64d43ff0c18 335 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 336 uint8_t sai_hal_get_fifo_write_pointer(uint8_t instance, sai_io_mode_t io_mode, uint8_t fifo_channel)
mbed_official 146:f64d43ff0c18 337 {
mbed_official 146:f64d43ff0c18 338 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 339 switch (io_mode)
mbed_official 146:f64d43ff0c18 340 {
mbed_official 146:f64d43ff0c18 341 case kSaiIOModeTransmit:
mbed_official 146:f64d43ff0c18 342 return (uint8_t)BR_I2S_TFRn_WFP(instance,fifo_channel);
mbed_official 146:f64d43ff0c18 343 case kSaiIOModeReceive:
mbed_official 146:f64d43ff0c18 344 return (uint8_t)BR_I2S_RFRn_WFP(instance,fifo_channel);
mbed_official 146:f64d43ff0c18 345 default:
mbed_official 146:f64d43ff0c18 346 break;
mbed_official 146:f64d43ff0c18 347 }
mbed_official 146:f64d43ff0c18 348 return 0;
mbed_official 146:f64d43ff0c18 349 }
mbed_official 146:f64d43ff0c18 350
mbed_official 146:f64d43ff0c18 351 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 352 *
mbed_official 146:f64d43ff0c18 353 * Function Name : sai_hal_get_fifo_address
mbed_official 146:f64d43ff0c18 354 * Description : Get the fifo access address.
mbed_official 146:f64d43ff0c18 355 *The return value point to TDR/RDR register which is the interface of FIFO.
mbed_official 146:f64d43ff0c18 356 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 357 uint32_t* sai_hal_get_fifo_address(uint8_t instance, sai_io_mode_t io_mode, uint8_t fifo_channel)
mbed_official 146:f64d43ff0c18 358 {
mbed_official 146:f64d43ff0c18 359 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 360 switch (io_mode)
mbed_official 146:f64d43ff0c18 361 {
mbed_official 146:f64d43ff0c18 362 case kSaiIOModeTransmit:
mbed_official 146:f64d43ff0c18 363 return (uint32_t *)HW_I2S_TDRn_ADDR(instance, fifo_channel);
mbed_official 146:f64d43ff0c18 364 case kSaiIOModeReceive:
mbed_official 146:f64d43ff0c18 365 return (uint32_t *)HW_I2S_RDRn_ADDR(instance,fifo_channel);
mbed_official 146:f64d43ff0c18 366 default:
mbed_official 146:f64d43ff0c18 367 break;
mbed_official 146:f64d43ff0c18 368 }
mbed_official 146:f64d43ff0c18 369 return NULL;
mbed_official 146:f64d43ff0c18 370 }
mbed_official 146:f64d43ff0c18 371
mbed_official 146:f64d43ff0c18 372 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 373 *
mbed_official 146:f64d43ff0c18 374 * Function Name : sai_hal_enable_tx_interrupt
mbed_official 146:f64d43ff0c18 375 * Description : Enable the interrupt request source for tx.
mbed_official 146:f64d43ff0c18 376 *The source can be word start, sync error, FIFO empty, FIFO error and FIFO request.
mbed_official 146:f64d43ff0c18 377 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 378 void sai_hal_enable_tx_interrupt(uint8_t instance, sai_interrupt_request_t source)
mbed_official 146:f64d43ff0c18 379 {
mbed_official 146:f64d43ff0c18 380 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 381 switch (source)
mbed_official 146:f64d43ff0c18 382 {
mbed_official 146:f64d43ff0c18 383 case kSaiIntrequestWordStart:
mbed_official 146:f64d43ff0c18 384 BW_I2S_TCSR_WSIE(instance,1);
mbed_official 146:f64d43ff0c18 385 break;
mbed_official 146:f64d43ff0c18 386 case kSaiIntrequestSyncError:
mbed_official 146:f64d43ff0c18 387 BW_I2S_TCSR_SEIE(instance,1);
mbed_official 146:f64d43ff0c18 388 break;
mbed_official 146:f64d43ff0c18 389 case kSaiIntrequestFIFOWarning:
mbed_official 146:f64d43ff0c18 390 BW_I2S_TCSR_FWIE(instance,1);
mbed_official 146:f64d43ff0c18 391 break;
mbed_official 146:f64d43ff0c18 392 case kSaiIntrequestFIFOError:
mbed_official 146:f64d43ff0c18 393 BW_I2S_TCSR_FEIE(instance,1);
mbed_official 146:f64d43ff0c18 394 break;
mbed_official 146:f64d43ff0c18 395 case kSaiIntrequestFIFORequest:
mbed_official 146:f64d43ff0c18 396 BW_I2S_TCSR_FRIE(instance,1);
mbed_official 146:f64d43ff0c18 397 break;
mbed_official 146:f64d43ff0c18 398 default:
mbed_official 146:f64d43ff0c18 399 break;
mbed_official 146:f64d43ff0c18 400 }
mbed_official 146:f64d43ff0c18 401 }
mbed_official 146:f64d43ff0c18 402
mbed_official 146:f64d43ff0c18 403 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 404 *
mbed_official 146:f64d43ff0c18 405 * Function Name : sai_hal_enable_rx_interrupt
mbed_official 146:f64d43ff0c18 406 * Description : Enable the interrupt request source for rx.
mbed_official 146:f64d43ff0c18 407 *The source can be word start, sync error, FIFO empty, FIFO error and FIFO request.
mbed_official 146:f64d43ff0c18 408 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 409 void sai_hal_enable_rx_interrupt(uint8_t instance, sai_interrupt_request_t source)
mbed_official 146:f64d43ff0c18 410 {
mbed_official 146:f64d43ff0c18 411 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 412 switch (source)
mbed_official 146:f64d43ff0c18 413 {
mbed_official 146:f64d43ff0c18 414 case kSaiIntrequestWordStart:
mbed_official 146:f64d43ff0c18 415 BW_I2S_RCSR_WSIE(instance,1);
mbed_official 146:f64d43ff0c18 416 break;
mbed_official 146:f64d43ff0c18 417 case kSaiIntrequestSyncError:
mbed_official 146:f64d43ff0c18 418 BW_I2S_RCSR_SEIE(instance,1);
mbed_official 146:f64d43ff0c18 419 break;
mbed_official 146:f64d43ff0c18 420 case kSaiIntrequestFIFOWarning:
mbed_official 146:f64d43ff0c18 421 BW_I2S_RCSR_FWIE(instance,1);
mbed_official 146:f64d43ff0c18 422 break;
mbed_official 146:f64d43ff0c18 423 case kSaiIntrequestFIFOError:
mbed_official 146:f64d43ff0c18 424 BW_I2S_RCSR_FEIE(instance,1);
mbed_official 146:f64d43ff0c18 425 break;
mbed_official 146:f64d43ff0c18 426 case kSaiIntrequestFIFORequest:
mbed_official 146:f64d43ff0c18 427 BW_I2S_RCSR_FRIE(instance,1);
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 146:f64d43ff0c18 436 * Function Name : sai_hal_disable_tx_interrupt
mbed_official 146:f64d43ff0c18 437 * Description : Disable the interrupt request source for tx.
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 146:f64d43ff0c18 440 void sai_hal_disable_tx_interrupt(uint8_t instance, sai_interrupt_request_t source)
mbed_official 146:f64d43ff0c18 441 {
mbed_official 146:f64d43ff0c18 442 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 443 switch (source)
mbed_official 146:f64d43ff0c18 444 {
mbed_official 146:f64d43ff0c18 445 case kSaiIntrequestWordStart:
mbed_official 146:f64d43ff0c18 446 BW_I2S_TCSR_WSIE(instance,0);
mbed_official 146:f64d43ff0c18 447 break;
mbed_official 146:f64d43ff0c18 448 case kSaiIntrequestSyncError:
mbed_official 146:f64d43ff0c18 449 BW_I2S_TCSR_SEIE(instance,0);
mbed_official 146:f64d43ff0c18 450 break;
mbed_official 146:f64d43ff0c18 451 case kSaiIntrequestFIFOWarning:
mbed_official 146:f64d43ff0c18 452 BW_I2S_TCSR_FWIE(instance,0);
mbed_official 146:f64d43ff0c18 453 break;
mbed_official 146:f64d43ff0c18 454 case kSaiIntrequestFIFOError:
mbed_official 146:f64d43ff0c18 455 BW_I2S_TCSR_FEIE(instance,0);
mbed_official 146:f64d43ff0c18 456 break;
mbed_official 146:f64d43ff0c18 457 case kSaiIntrequestFIFORequest:
mbed_official 146:f64d43ff0c18 458 BW_I2S_TCSR_FRIE(instance,0);
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 146:f64d43ff0c18 463 }
mbed_official 146:f64d43ff0c18 464
mbed_official 146:f64d43ff0c18 465 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 466 *
mbed_official 146:f64d43ff0c18 467 * Function Name : sai_hal_disable_rx_interrupt
mbed_official 146:f64d43ff0c18 468 * Description : Disable the interrupt request source for tx.
mbed_official 146:f64d43ff0c18 469 *The source can be word start, sync error, FIFO empty, FIFO error and FIFO request.
mbed_official 146:f64d43ff0c18 470 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 471 void sai_hal_disable_rx_interrupt(uint8_t instance, sai_interrupt_request_t source)
mbed_official 146:f64d43ff0c18 472 {
mbed_official 146:f64d43ff0c18 473 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 474 switch (source)
mbed_official 146:f64d43ff0c18 475 {
mbed_official 146:f64d43ff0c18 476 case kSaiIntrequestWordStart:
mbed_official 146:f64d43ff0c18 477 BW_I2S_RCSR_WSIE(instance,0);
mbed_official 146:f64d43ff0c18 478 break;
mbed_official 146:f64d43ff0c18 479 case kSaiIntrequestSyncError:
mbed_official 146:f64d43ff0c18 480 BW_I2S_RCSR_SEIE(instance,0);
mbed_official 146:f64d43ff0c18 481 break;
mbed_official 146:f64d43ff0c18 482 case kSaiIntrequestFIFOWarning:
mbed_official 146:f64d43ff0c18 483 BW_I2S_RCSR_FWIE(instance,0);
mbed_official 146:f64d43ff0c18 484 break;
mbed_official 146:f64d43ff0c18 485 case kSaiIntrequestFIFOError:
mbed_official 146:f64d43ff0c18 486 BW_I2S_RCSR_FEIE(instance,0);
mbed_official 146:f64d43ff0c18 487 break;
mbed_official 146:f64d43ff0c18 488 case kSaiIntrequestFIFORequest:
mbed_official 146:f64d43ff0c18 489 BW_I2S_RCSR_FRIE(instance,0);
mbed_official 146:f64d43ff0c18 490 break;
mbed_official 146:f64d43ff0c18 491 default:
mbed_official 146:f64d43ff0c18 492 break;
mbed_official 146:f64d43ff0c18 493 }
mbed_official 146:f64d43ff0c18 494 }
mbed_official 146:f64d43ff0c18 495
mbed_official 146:f64d43ff0c18 496 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 497 *
mbed_official 146:f64d43ff0c18 498 * Function Name : sai_hal_enable_tx_dma
mbed_official 146:f64d43ff0c18 499 * Description : Enable the dma request source for tx.
mbed_official 146:f64d43ff0c18 500 *The source can be FIFO empty or FIFO request.
mbed_official 146:f64d43ff0c18 501 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 502 void sai_hal_enable_tx_dma(uint8_t instance, sai_dma_request_t request)
mbed_official 146:f64d43ff0c18 503 {
mbed_official 146:f64d43ff0c18 504 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 505 switch (request)
mbed_official 146:f64d43ff0c18 506 {
mbed_official 146:f64d43ff0c18 507 case kSaiDmaReqFIFOWarning:
mbed_official 146:f64d43ff0c18 508 BW_I2S_TCSR_FWDE(instance,1);
mbed_official 146:f64d43ff0c18 509 break;
mbed_official 146:f64d43ff0c18 510 case kSaiDmaReqFIFORequest:
mbed_official 146:f64d43ff0c18 511 BW_I2S_TCSR_FRDE(instance,1);
mbed_official 146:f64d43ff0c18 512 break;
mbed_official 146:f64d43ff0c18 513 default:
mbed_official 146:f64d43ff0c18 514 break;
mbed_official 146:f64d43ff0c18 515 }
mbed_official 146:f64d43ff0c18 516 }
mbed_official 146:f64d43ff0c18 517
mbed_official 146:f64d43ff0c18 518 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 519 *
mbed_official 146:f64d43ff0c18 520 * Function Name : sai_hal_enable_rx_dma
mbed_official 146:f64d43ff0c18 521 * Description : Enable the dma request source for rx.
mbed_official 146:f64d43ff0c18 522 *The source can be FIFO empty or FIFO request.
mbed_official 146:f64d43ff0c18 523 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 524 void sai_hal_enable_rx_dma(uint8_t instance, sai_dma_request_t request)
mbed_official 146:f64d43ff0c18 525 {
mbed_official 146:f64d43ff0c18 526 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 527 switch (request)
mbed_official 146:f64d43ff0c18 528 {
mbed_official 146:f64d43ff0c18 529 case kSaiDmaReqFIFOWarning:
mbed_official 146:f64d43ff0c18 530 BW_I2S_RCSR_FWDE(instance,1);
mbed_official 146:f64d43ff0c18 531 break;
mbed_official 146:f64d43ff0c18 532 case kSaiDmaReqFIFORequest:
mbed_official 146:f64d43ff0c18 533 BW_I2S_RCSR_FRDE(instance,1);
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 146:f64d43ff0c18 542 * Function Name : sai_hal_disable_tx_dma
mbed_official 146:f64d43ff0c18 543 * Description : Disable the dma request source for tx.
mbed_official 146:f64d43ff0c18 544 *The source can be FIFO empty or FIFO request.
mbed_official 146:f64d43ff0c18 545 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 546 void sai_hal_disable_tx_dma(uint8_t instance, sai_dma_request_t request)
mbed_official 146:f64d43ff0c18 547 {
mbed_official 146:f64d43ff0c18 548 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 549 switch (request)
mbed_official 146:f64d43ff0c18 550 {
mbed_official 146:f64d43ff0c18 551 case kSaiDmaReqFIFOWarning:
mbed_official 146:f64d43ff0c18 552 BW_I2S_TCSR_FWDE(instance,0);
mbed_official 146:f64d43ff0c18 553 break;
mbed_official 146:f64d43ff0c18 554 case kSaiDmaReqFIFORequest:
mbed_official 146:f64d43ff0c18 555 BW_I2S_TCSR_FRDE(instance,0);
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 146:f64d43ff0c18 560 }
mbed_official 146:f64d43ff0c18 561
mbed_official 146:f64d43ff0c18 562 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 563 *
mbed_official 146:f64d43ff0c18 564 * Function Name : sai_hal_disable_rx_dma
mbed_official 146:f64d43ff0c18 565 * Description : Disable the dma request source for rx.
mbed_official 146:f64d43ff0c18 566 *The source can be FIFO empty or FIFO request.
mbed_official 146:f64d43ff0c18 567 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 568 void sai_hal_disable_rx_dma(uint8_t instance, sai_dma_request_t request)
mbed_official 146:f64d43ff0c18 569 {
mbed_official 146:f64d43ff0c18 570 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 571 switch (request)
mbed_official 146:f64d43ff0c18 572 {
mbed_official 146:f64d43ff0c18 573 case kSaiDmaReqFIFOWarning:
mbed_official 146:f64d43ff0c18 574 BW_I2S_RCSR_FWDE(instance,0);
mbed_official 146:f64d43ff0c18 575 break;
mbed_official 146:f64d43ff0c18 576 case kSaiDmaReqFIFORequest:
mbed_official 146:f64d43ff0c18 577 BW_I2S_RCSR_FRDE(instance,0);
mbed_official 146:f64d43ff0c18 578 break;
mbed_official 146:f64d43ff0c18 579 default:
mbed_official 146:f64d43ff0c18 580 break;
mbed_official 146:f64d43ff0c18 581 }
mbed_official 146:f64d43ff0c18 582 }
mbed_official 146:f64d43ff0c18 583
mbed_official 146:f64d43ff0c18 584 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 585 *
mbed_official 146:f64d43ff0c18 586 * Function Name : sai_hal_clear_tx_state_flag
mbed_official 146:f64d43ff0c18 587 * Description : Clear the state flag of tx registers.
mbed_official 146:f64d43ff0c18 588 *The state flag incudes word start flag, sync error flag and fifo error flag.
mbed_official 146:f64d43ff0c18 589 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 590 void sai_hal_clear_tx_state_flag(uint8_t instance, sai_state_flag_t flag)
mbed_official 146:f64d43ff0c18 591 {
mbed_official 146:f64d43ff0c18 592 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 593 switch (flag)
mbed_official 146:f64d43ff0c18 594 {
mbed_official 146:f64d43ff0c18 595 case kSaiStateFlagWordStart:
mbed_official 146:f64d43ff0c18 596 BW_I2S_TCSR_WSF(instance,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 597 break;
mbed_official 146:f64d43ff0c18 598 case kSaiStateFlagSyncError:
mbed_official 146:f64d43ff0c18 599 BW_I2S_TCSR_SEF(instance,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 600 break;
mbed_official 146:f64d43ff0c18 601 case kSaiStateFlagFIFOError:
mbed_official 146:f64d43ff0c18 602 BW_I2S_TCSR_FEF(instance,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 603 break;
mbed_official 146:f64d43ff0c18 604 case kSaiStateFlagSoftReset:
mbed_official 146:f64d43ff0c18 605 BW_I2S_TCSR_SR(instance, 0);
mbed_official 146:f64d43ff0c18 606 break;
mbed_official 146:f64d43ff0c18 607 default:
mbed_official 146:f64d43ff0c18 608 break;
mbed_official 146:f64d43ff0c18 609 }
mbed_official 146:f64d43ff0c18 610 }
mbed_official 146:f64d43ff0c18 611
mbed_official 146:f64d43ff0c18 612 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 613 *
mbed_official 146:f64d43ff0c18 614 * Function Name : sai_hal_clear_rx_state_flag
mbed_official 146:f64d43ff0c18 615 * Description : Clear the state flag of rx registers.
mbed_official 146:f64d43ff0c18 616 *The state flag incudes word start flag, sync error flag and fifo error flag.
mbed_official 146:f64d43ff0c18 617 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 618 void sai_hal_clear_rx_state_flag(uint8_t instance, sai_state_flag_t flag)
mbed_official 146:f64d43ff0c18 619 {
mbed_official 146:f64d43ff0c18 620 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 621 switch (flag)
mbed_official 146:f64d43ff0c18 622 {
mbed_official 146:f64d43ff0c18 623 case kSaiStateFlagWordStart:
mbed_official 146:f64d43ff0c18 624 BW_I2S_RCSR_WSF(instance,1);/* Write logic 1 to clear this bit */
mbed_official 146:f64d43ff0c18 625 break;
mbed_official 146:f64d43ff0c18 626 case kSaiStateFlagSyncError:
mbed_official 146:f64d43ff0c18 627 BW_I2S_RCSR_SEF(instance,1);
mbed_official 146:f64d43ff0c18 628 break;
mbed_official 146:f64d43ff0c18 629 case kSaiStateFlagFIFOError:
mbed_official 146:f64d43ff0c18 630 BW_I2S_RCSR_FEF(instance,1);
mbed_official 146:f64d43ff0c18 631 break;
mbed_official 146:f64d43ff0c18 632 case kSaiStateFlagSoftReset:
mbed_official 146:f64d43ff0c18 633 BW_I2S_RCSR_SR(instance, 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 146:f64d43ff0c18 642 * Function Name : sai_hal_reset_tx
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 146:f64d43ff0c18 646 void sai_hal_reset_tx(uint8_t instance, sai_reset_type_t mode)
mbed_official 146:f64d43ff0c18 647 {
mbed_official 146:f64d43ff0c18 648 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 649 uint32_t val = 0;
mbed_official 146:f64d43ff0c18 650 switch (mode)
mbed_official 146:f64d43ff0c18 651 {
mbed_official 146:f64d43ff0c18 652 case kSaiResetTypeSoftware:
mbed_official 146:f64d43ff0c18 653 BW_I2S_TCSR_SR(instance,1);
mbed_official 146:f64d43ff0c18 654 break;
mbed_official 146:f64d43ff0c18 655 case kSaiResetTypeFIFO:
mbed_official 146:f64d43ff0c18 656 val = HW_I2S_TCSR_RD(instance);
mbed_official 146:f64d43ff0c18 657 val |= I2S_TCSR_FR_MASK;
mbed_official 146:f64d43ff0c18 658 HW_I2S_TCSR_WR(instance,val);
mbed_official 146:f64d43ff0c18 659 break;
mbed_official 146:f64d43ff0c18 660 default:
mbed_official 146:f64d43ff0c18 661 break;
mbed_official 146:f64d43ff0c18 662 }
mbed_official 146:f64d43ff0c18 663 }
mbed_official 146:f64d43ff0c18 664
mbed_official 146:f64d43ff0c18 665 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 666 *
mbed_official 146:f64d43ff0c18 667 * Function Name : sai_hal_reset_rx
mbed_official 146:f64d43ff0c18 668 * Description : Reset rx according to reset mode.
mbed_official 146:f64d43ff0c18 669 *The reset mode can be software reset and FIFO reset.
mbed_official 146:f64d43ff0c18 670 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 671 void sai_hal_reset_rx(uint8_t instance, sai_reset_type_t mode)
mbed_official 146:f64d43ff0c18 672 {
mbed_official 146:f64d43ff0c18 673 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 674 uint32_t val = 0;
mbed_official 146:f64d43ff0c18 675 switch (mode)
mbed_official 146:f64d43ff0c18 676 {
mbed_official 146:f64d43ff0c18 677 case kSaiResetTypeSoftware:
mbed_official 146:f64d43ff0c18 678 BW_I2S_RCSR_SR(instance,1);
mbed_official 146:f64d43ff0c18 679 break;
mbed_official 146:f64d43ff0c18 680 case kSaiResetTypeFIFO:
mbed_official 146:f64d43ff0c18 681 val = HW_I2S_TCSR_RD(instance);
mbed_official 146:f64d43ff0c18 682 val |= I2S_TCSR_FR_MASK;
mbed_official 146:f64d43ff0c18 683 HW_I2S_TCSR_WR(instance,val);
mbed_official 146:f64d43ff0c18 684 break;
mbed_official 146:f64d43ff0c18 685 default:
mbed_official 146:f64d43ff0c18 686 break;
mbed_official 146:f64d43ff0c18 687 }
mbed_official 146:f64d43ff0c18 688 }
mbed_official 146:f64d43ff0c18 689
mbed_official 146:f64d43ff0c18 690 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 691 *
mbed_official 146:f64d43ff0c18 692 * Function Name : sai_hal_set_tx_mode
mbed_official 146:f64d43ff0c18 693 * Description : Set the work mode for tx.
mbed_official 146:f64d43ff0c18 694 *The work mode have stop mode, debug mode and normal mode.
mbed_official 146:f64d43ff0c18 695 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 696 void sai_hal_set_tx_mode(uint8_t instance, sai_mode_t mode)
mbed_official 146:f64d43ff0c18 697 {
mbed_official 146:f64d43ff0c18 698 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 699 switch (mode)
mbed_official 146:f64d43ff0c18 700 {
mbed_official 146:f64d43ff0c18 701 case kSaiRunModeStop:
mbed_official 146:f64d43ff0c18 702 BW_I2S_TCSR_STOPE(instance,1);/* Stop mode */
mbed_official 146:f64d43ff0c18 703 break;
mbed_official 146:f64d43ff0c18 704 case kSaiRunModeDebug:
mbed_official 146:f64d43ff0c18 705 BW_I2S_TCSR_DBGE(instance,1);/* Debug mode */
mbed_official 146:f64d43ff0c18 706 break;
mbed_official 146:f64d43ff0c18 707 default:
mbed_official 146:f64d43ff0c18 708 break;
mbed_official 146:f64d43ff0c18 709 }
mbed_official 146:f64d43ff0c18 710 }
mbed_official 146:f64d43ff0c18 711
mbed_official 146:f64d43ff0c18 712 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 713 *
mbed_official 146:f64d43ff0c18 714 * Function Name : sai_hal_set_rx_mode
mbed_official 146:f64d43ff0c18 715 * Description : Set the work mode for rx.
mbed_official 146:f64d43ff0c18 716 *The work mode have stop mode, debug mode and normal mode.
mbed_official 146:f64d43ff0c18 717 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 718 void sai_hal_set_rx_mode(uint8_t instance, sai_mode_t mode)
mbed_official 146:f64d43ff0c18 719 {
mbed_official 146:f64d43ff0c18 720 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 721 switch (mode)
mbed_official 146:f64d43ff0c18 722 {
mbed_official 146:f64d43ff0c18 723 case kSaiRunModeStop:
mbed_official 146:f64d43ff0c18 724 BW_I2S_RCSR_STOPE(instance,1);
mbed_official 146:f64d43ff0c18 725 break;
mbed_official 146:f64d43ff0c18 726 case kSaiRunModeDebug:
mbed_official 146:f64d43ff0c18 727 BW_I2S_RCSR_DBGE(instance,1);
mbed_official 146:f64d43ff0c18 728 break;
mbed_official 146:f64d43ff0c18 729 default:
mbed_official 146:f64d43ff0c18 730 break;
mbed_official 146:f64d43ff0c18 731 }
mbed_official 146:f64d43ff0c18 732 }
mbed_official 146:f64d43ff0c18 733
mbed_official 146:f64d43ff0c18 734 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 735 *
mbed_official 146:f64d43ff0c18 736 * Function Name : sai_hal_set_tx_bclk_swap
mbed_official 146:f64d43ff0c18 737 * Description : Swap the tx bit clock.
mbed_official 146:f64d43ff0c18 738 *If the user want to swap the bit clock, just set bool variable to true.
mbed_official 146:f64d43ff0c18 739 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 740 void sai_hal_set_tx_bclk_swap(uint8_t instance, bool ifswap)
mbed_official 146:f64d43ff0c18 741 {
mbed_official 146:f64d43ff0c18 742 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 743 if (ifswap)/* Swap the bit clock */
mbed_official 146:f64d43ff0c18 744 {
mbed_official 146:f64d43ff0c18 745 BW_I2S_TCR2_BCS(instance,1);
mbed_official 146:f64d43ff0c18 746 }
mbed_official 146:f64d43ff0c18 747 else
mbed_official 146:f64d43ff0c18 748 {
mbed_official 146:f64d43ff0c18 749 BW_I2S_TCR2_BCS(instance,0);
mbed_official 146:f64d43ff0c18 750 }
mbed_official 146:f64d43ff0c18 751 }
mbed_official 146:f64d43ff0c18 752
mbed_official 146:f64d43ff0c18 753 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 754 *
mbed_official 146:f64d43ff0c18 755 * Function Name : sai_hal_set_rx_bclk_swap
mbed_official 146:f64d43ff0c18 756 * Description : Swap the rx bit clock.
mbed_official 146:f64d43ff0c18 757 *If the user want to swap the bit clock, just set bool variable to true.
mbed_official 146:f64d43ff0c18 758 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 759 void sai_hal_set_rx_bclk_swap(uint8_t instance, bool ifswap)
mbed_official 146:f64d43ff0c18 760 {
mbed_official 146:f64d43ff0c18 761 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 762 if (ifswap)/* Swap the bit clock */
mbed_official 146:f64d43ff0c18 763 {
mbed_official 146:f64d43ff0c18 764 BW_I2S_RCR2_BCS(instance,1);
mbed_official 146:f64d43ff0c18 765 }
mbed_official 146:f64d43ff0c18 766 else
mbed_official 146:f64d43ff0c18 767 {
mbed_official 146:f64d43ff0c18 768 BW_I2S_RCR2_BCS(instance,0);
mbed_official 146:f64d43ff0c18 769 }
mbed_official 146:f64d43ff0c18 770 }
mbed_official 146:f64d43ff0c18 771
mbed_official 146:f64d43ff0c18 772 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 773 *
mbed_official 146:f64d43ff0c18 774 * Function Name : sai_hal_mclk_divider_is_update
mbed_official 146:f64d43ff0c18 775 * Description :Get the state if the master clock divider is updating.
mbed_official 146:f64d43ff0c18 776 *
mbed_official 146:f64d43ff0c18 777 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 778 bool sai_hal_mclk_divider_is_update(uint8_t instance)
mbed_official 146:f64d43ff0c18 779 {
mbed_official 146:f64d43ff0c18 780 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 781 return BR_I2S_MCR_DUF(instance);
mbed_official 146:f64d43ff0c18 782 }
mbed_official 146:f64d43ff0c18 783
mbed_official 146:f64d43ff0c18 784 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 785 *
mbed_official 146:f64d43ff0c18 786 * Function Name : sai_hal_word_start_is_detected
mbed_official 146:f64d43ff0c18 787 * Description : The function would tell the user if the word start bit is set.
mbed_official 146:f64d43ff0c18 788 * The bit is set by hardware.
mbed_official 146:f64d43ff0c18 789 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 790 bool sai_hal_word_start_is_detected(uint8_t instance, sai_io_mode_t io_mode)
mbed_official 146:f64d43ff0c18 791 {
mbed_official 146:f64d43ff0c18 792 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 793 switch (io_mode)
mbed_official 146:f64d43ff0c18 794 {
mbed_official 146:f64d43ff0c18 795 case kSaiIOModeTransmit:
mbed_official 146:f64d43ff0c18 796 return BR_I2S_TCSR_WSF(instance);
mbed_official 146:f64d43ff0c18 797 case kSaiIOModeReceive:
mbed_official 146:f64d43ff0c18 798 return BR_I2S_RCSR_WSF(instance);
mbed_official 146:f64d43ff0c18 799 default:
mbed_official 146:f64d43ff0c18 800 break;
mbed_official 146:f64d43ff0c18 801 }
mbed_official 146:f64d43ff0c18 802 return false;
mbed_official 146:f64d43ff0c18 803 }
mbed_official 146:f64d43ff0c18 804
mbed_official 146:f64d43ff0c18 805 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 806 *
mbed_official 146:f64d43ff0c18 807 * Function Name : sai_hal_sync_error_is_detected
mbed_official 146:f64d43ff0c18 808 * Description : The function would tell the user if the sync error bit is set.
mbed_official 146:f64d43ff0c18 809 * The bit is set by hardware.
mbed_official 146:f64d43ff0c18 810 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 811 bool sai_hal_sync_error_is_detected(uint8_t instance, sai_io_mode_t io_mode)
mbed_official 146:f64d43ff0c18 812 {
mbed_official 146:f64d43ff0c18 813 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 814 switch (io_mode)
mbed_official 146:f64d43ff0c18 815 {
mbed_official 146:f64d43ff0c18 816 case kSaiIOModeTransmit:
mbed_official 146:f64d43ff0c18 817 return BR_I2S_TCSR_SEF(instance);
mbed_official 146:f64d43ff0c18 818 case kSaiIOModeReceive:
mbed_official 146:f64d43ff0c18 819 return BR_I2S_RCSR_SEF(instance);
mbed_official 146:f64d43ff0c18 820 default:
mbed_official 146:f64d43ff0c18 821 break;
mbed_official 146:f64d43ff0c18 822 }
mbed_official 146:f64d43ff0c18 823 return false;
mbed_official 146:f64d43ff0c18 824 }
mbed_official 146:f64d43ff0c18 825
mbed_official 146:f64d43ff0c18 826 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 827 *
mbed_official 146:f64d43ff0c18 828 * Function Name : sai_hal_fifo_warning_is_detected
mbed_official 146:f64d43ff0c18 829 * Description : The function would tell the user if the fifo warning bit is set.
mbed_official 146:f64d43ff0c18 830 * The bit is set by hardware.
mbed_official 146:f64d43ff0c18 831 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 832 bool sai_hal_fifo_warning_is_detected(uint8_t instance, sai_io_mode_t io_mode)
mbed_official 146:f64d43ff0c18 833 {
mbed_official 146:f64d43ff0c18 834 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 835 switch (io_mode)
mbed_official 146:f64d43ff0c18 836 {
mbed_official 146:f64d43ff0c18 837 case kSaiIOModeTransmit:
mbed_official 146:f64d43ff0c18 838 return BR_I2S_TCSR_FWF(instance);
mbed_official 146:f64d43ff0c18 839 case kSaiIOModeReceive:
mbed_official 146:f64d43ff0c18 840 return BR_I2S_RCSR_FWF(instance);
mbed_official 146:f64d43ff0c18 841 default:
mbed_official 146:f64d43ff0c18 842 break;
mbed_official 146:f64d43ff0c18 843 }
mbed_official 146:f64d43ff0c18 844 return false;
mbed_official 146:f64d43ff0c18 845 }
mbed_official 146:f64d43ff0c18 846
mbed_official 146:f64d43ff0c18 847 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 848 *
mbed_official 146:f64d43ff0c18 849 * Function Name : sai_hal_fifo_error_is_detected
mbed_official 146:f64d43ff0c18 850 * Description : The function would tell the user if the fifo error bit is set.
mbed_official 146:f64d43ff0c18 851 * The bit is set by hardware.
mbed_official 146:f64d43ff0c18 852 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 853 bool sai_hal_fifo_error_is_detected(uint8_t instance, sai_io_mode_t io_mode)
mbed_official 146:f64d43ff0c18 854 {
mbed_official 146:f64d43ff0c18 855 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 856 switch (io_mode)
mbed_official 146:f64d43ff0c18 857 {
mbed_official 146:f64d43ff0c18 858 case kSaiIOModeTransmit:
mbed_official 146:f64d43ff0c18 859 return BR_I2S_TCSR_FEF(instance);
mbed_official 146:f64d43ff0c18 860 case kSaiIOModeReceive:
mbed_official 146:f64d43ff0c18 861 return BR_I2S_RCSR_FEF(instance);
mbed_official 146:f64d43ff0c18 862 default:
mbed_official 146:f64d43ff0c18 863 break;
mbed_official 146:f64d43ff0c18 864 }
mbed_official 146:f64d43ff0c18 865 return false;
mbed_official 146:f64d43ff0c18 866 }
mbed_official 146:f64d43ff0c18 867
mbed_official 146:f64d43ff0c18 868 /*FUNCTION**********************************************************************
mbed_official 146:f64d43ff0c18 869 *
mbed_official 146:f64d43ff0c18 870 * Function Name : sai_hal_fifo_request_is_detected
mbed_official 146:f64d43ff0c18 871 * Description : The function would tell the user if the fifo request bit is set.
mbed_official 146:f64d43ff0c18 872 * The bit is set by hardware.
mbed_official 146:f64d43ff0c18 873 *END**************************************************************************/
mbed_official 146:f64d43ff0c18 874 bool sai_hal_fifo_request_is_detected(uint8_t instance, sai_io_mode_t io_mode)
mbed_official 146:f64d43ff0c18 875 {
mbed_official 146:f64d43ff0c18 876 assert(instance < HW_I2S_INSTANCE_COUNT);
mbed_official 146:f64d43ff0c18 877 switch (io_mode)
mbed_official 146:f64d43ff0c18 878 {
mbed_official 146:f64d43ff0c18 879 case kSaiIOModeTransmit:
mbed_official 146:f64d43ff0c18 880 return BR_I2S_TCSR_FRF(instance);
mbed_official 146:f64d43ff0c18 881 case kSaiIOModeReceive:
mbed_official 146:f64d43ff0c18 882 return BR_I2S_RCSR_FRF(instance);
mbed_official 146:f64d43ff0c18 883 default:
mbed_official 146:f64d43ff0c18 884 break;
mbed_official 146:f64d43ff0c18 885 }
mbed_official 146:f64d43ff0c18 886 return false;
mbed_official 146:f64d43ff0c18 887 }
mbed_official 146:f64d43ff0c18 888
mbed_official 146:f64d43ff0c18 889 /******************************************************************************
mbed_official 146:f64d43ff0c18 890 *EOF
mbed_official 146:f64d43ff0c18 891 ******************************************************************************/
mbed_official 146:f64d43ff0c18 892