1 /*
2 * Copyright 2023 NXP
3 * All rights reserved.
4 *
5 *
6 * SPDX-License-Identifier: BSD-3-Clause
7 */
8
9 #include "fsl_i2s_bridge.h"
10
11 /*******************************************************************************
12 * Definitions
13 ******************************************************************************/
14
15 /* Component ID definition, used by tools. */
16 #ifndef FSL_COMPONENT_ID
17 #define FSL_COMPONENT_ID "platform.drivers.i2s_bridge"
18 #endif
19
20 /*******************************************************************************
21 * Prototypes
22 ******************************************************************************/
23
24 /*******************************************************************************
25 * Variables
26 ******************************************************************************/
27
28 /*******************************************************************************
29 * Code
30 ******************************************************************************/
I2S_BRIDGE_SetFlexcommSignalShareSet(uint32_t flexCommIndex,i2s_bridge_signal_t signal,uint32_t set)31 void I2S_BRIDGE_SetFlexcommSignalShareSet(uint32_t flexCommIndex, i2s_bridge_signal_t signal, uint32_t set)
32 {
33 uint32_t tempReg = SYSCTL1->FCCTRLSEL[flexCommIndex];
34
35 tempReg &= ~((uint32_t)SYSCTL1_FCCTRLSEL_SCKINSEL_MASK << ((uint32_t)signal * 8U));
36 tempReg |= set << ((uint32_t)signal * 8U);
37
38 SYSCTL1->FCCTRLSEL[flexCommIndex] = tempReg;
39 }
40
I2S_BRIDGE_SetFlexcommShareSet(uint32_t flexCommIndex,uint32_t sckSet,uint32_t wsSet,uint32_t dataInSet,uint32_t dataOutSet)41 void I2S_BRIDGE_SetFlexcommShareSet(
42 uint32_t flexCommIndex, uint32_t sckSet, uint32_t wsSet, uint32_t dataInSet, uint32_t dataOutSet)
43 {
44 uint32_t tempReg = SYSCTL1->FCCTRLSEL[flexCommIndex];
45
46 tempReg &= ~(SYSCTL1_FCCTRLSEL_SCKINSEL_MASK | SYSCTL1_FCCTRLSEL_WSINSEL_MASK | SYSCTL1_FCCTRLSEL_DATAINSEL_MASK |
47 SYSCTL1_FCCTRLSEL_DATAOUTSEL_MASK);
48 tempReg |= SYSCTL1_FCCTRLSEL_SCKINSEL(sckSet) | SYSCTL1_FCCTRLSEL_WSINSEL(wsSet) |
49 SYSCTL1_FCCTRLSEL_DATAINSEL(dataInSet) | SYSCTL1_FCCTRLSEL_DATAOUTSEL(dataOutSet);
50
51 SYSCTL1->FCCTRLSEL[flexCommIndex] = tempReg;
52 }
53
I2S_BRIDGE_SetShareSetSrc(uint32_t setIndex,uint32_t sckShareSrc,uint32_t wsShareSrc,uint32_t dataInShareSrc,uint32_t dataOutShareSrc)54 void I2S_BRIDGE_SetShareSetSrc(
55 uint32_t setIndex, uint32_t sckShareSrc, uint32_t wsShareSrc, uint32_t dataInShareSrc, uint32_t dataOutShareSrc)
56 {
57 if (setIndex > 0U)
58 {
59 uint32_t tempReg = 0U;
60
61 /* WS,SCK,DATA IN */
62 tempReg |= SYSCTL1_SHAREDCTRLSET_SHAREDSCKSEL(sckShareSrc) | SYSCTL1_SHAREDCTRLSET_SHAREDWSSEL(wsShareSrc) |
63 SYSCTL1_SHAREDCTRLSET_SHAREDDATASEL(dataInShareSrc);
64 /* data out */
65 tempReg |= dataOutShareSrc;
66
67 SYSCTL1->SHAREDCTRLSET[setIndex - 1U] = tempReg;
68 }
69 }
70
I2S_BRIDGE_SetShareSignalSrc(uint32_t setIndex,i2s_bridge_signal_t signal,uint32_t shareSrc)71 void I2S_BRIDGE_SetShareSignalSrc(uint32_t setIndex, i2s_bridge_signal_t signal, uint32_t shareSrc)
72 {
73 if (setIndex > 0U)
74 {
75 uint32_t tempReg = SYSCTL1->SHAREDCTRLSET[setIndex - 1U];
76
77 if (signal == kI2S_BRIDGE_SignalDataOut)
78 {
79 tempReg |= 1UL << (SYSCTL1_SHAREDCTRLSET_FC0DATAOUTEN_SHIFT + shareSrc);
80 }
81 else
82 {
83 tempReg &= ~((uint32_t)SYSCTL1_SHAREDCTRLSET_SHAREDSCKSEL_MASK << ((uint32_t)signal * 4U));
84 tempReg |= shareSrc << ((uint32_t)signal * 4U);
85 }
86
87 SYSCTL1->SHAREDCTRLSET[setIndex - 1U] = tempReg;
88 }
89 }