@@ -40,6 +40,12 @@ enum _sai_transfer_state
40
40
kSAI_Error /*!< Transfer error occured. */
41
41
};
42
42
43
+ /*! @brief Typedef for sai tx interrupt handler. */
44
+ typedef void (* sai_tx_isr_t )(I2S_Type * base , sai_handle_t * saiHandle );
45
+
46
+ /*! @brief Typedef for sai rx interrupt handler. */
47
+ typedef void (* sai_rx_isr_t )(I2S_Type * base , sai_handle_t * saiHandle );
48
+
43
49
/*******************************************************************************
44
50
* Prototypes
45
51
******************************************************************************/
@@ -98,6 +104,10 @@ static const IRQn_Type s_saiTxIRQ[] = I2S_TX_IRQS;
98
104
static const IRQn_Type s_saiRxIRQ [] = I2S_RX_IRQS ;
99
105
/* Clock name array */
100
106
static const clock_ip_name_t s_saiClock [] = SAI_CLOCKS ;
107
+ /*! @brief Pointer to tx IRQ handler for each instance. */
108
+ static sai_tx_isr_t s_saiTxIsr ;
109
+ /*! @brief Pointer to tx IRQ handler for each instance. */
110
+ static sai_rx_isr_t s_saiRxIsr ;
101
111
102
112
/*******************************************************************************
103
113
* Code
@@ -231,12 +241,13 @@ void SAI_TxInit(I2S_Type *base, const sai_config_t *config)
231
241
CLOCK_EnableClock (s_saiClock [SAI_GetInstance (base )]);
232
242
233
243
#if defined(FSL_FEATURE_SAI_HAS_MCR ) && (FSL_FEATURE_SAI_HAS_MCR )
234
- /* Configure Master clock output enable */
235
- base -> MCR = I2S_MCR_MOE (config -> mclkOutputEnable );
236
-
237
244
/* Master clock source setting */
238
245
val = (base -> MCR & ~I2S_MCR_MICS_MASK );
239
246
base -> MCR = (val | I2S_MCR_MICS (config -> mclkSource ));
247
+
248
+ /* Configure Master clock output enable */
249
+ val = (base -> MCR & ~I2S_MCR_MOE_MASK );
250
+ base -> MCR = (val | I2S_MCR_MOE (config -> mclkOutputEnable ));
240
251
#endif /* FSL_FEATURE_SAI_HAS_MCR */
241
252
242
253
/* Configure audio protocol */
@@ -332,12 +343,13 @@ void SAI_RxInit(I2S_Type *base, const sai_config_t *config)
332
343
CLOCK_EnableClock (s_saiClock [SAI_GetInstance (base )]);
333
344
334
345
#if defined(FSL_FEATURE_SAI_HAS_MCR ) && (FSL_FEATURE_SAI_HAS_MCR )
335
- /* Configure Master clock output enable */
336
- base -> MCR = I2S_MCR_MOE (config -> mclkOutputEnable );
337
-
338
346
/* Master clock source setting */
339
347
val = (base -> MCR & ~I2S_MCR_MICS_MASK );
340
348
base -> MCR = (val | I2S_MCR_MICS (config -> mclkSource ));
349
+
350
+ /* Configure Master clock output enable */
351
+ val = (base -> MCR & ~I2S_MCR_MOE_MASK );
352
+ base -> MCR = (val | I2S_MCR_MOE (config -> mclkOutputEnable ));
341
353
#endif /* FSL_FEATURE_SAI_HAS_MCR */
342
354
343
355
/* Configure audio protocol */
@@ -663,6 +675,9 @@ void SAI_TransferTxCreateHandle(I2S_Type *base, sai_handle_t *handle, sai_transf
663
675
handle -> callback = callback ;
664
676
handle -> userData = userData ;
665
677
678
+ /* Set the isr pointer */
679
+ s_saiTxIsr = SAI_TransferTxHandleIRQ ;
680
+
666
681
/* Enable Tx irq */
667
682
EnableIRQ (s_saiTxIRQ [SAI_GetInstance (base )]);
668
683
}
@@ -676,6 +691,9 @@ void SAI_TransferRxCreateHandle(I2S_Type *base, sai_handle_t *handle, sai_transf
676
691
handle -> callback = callback ;
677
692
handle -> userData = userData ;
678
693
694
+ /* Set the isr pointer */
695
+ s_saiRxIsr = SAI_TransferRxHandleIRQ ;
696
+
679
697
/* Enable Rx irq */
680
698
EnableIRQ (s_saiRxIRQ [SAI_GetInstance (base )]);
681
699
}
@@ -1011,24 +1029,24 @@ void I2S0_DriverIRQHandler(void)
1011
1029
{
1012
1030
if ((s_saiHandle [0 ][1 ]) && ((I2S0 -> RCSR & kSAI_FIFOWarningFlag ) || (I2S0 -> RCSR & kSAI_FIFOErrorFlag )))
1013
1031
{
1014
- SAI_TransferRxHandleIRQ (I2S0 , s_saiHandle [0 ][1 ]);
1032
+ s_saiRxIsr (I2S0 , s_saiHandle [0 ][1 ]);
1015
1033
}
1016
1034
if ((s_saiHandle [0 ][0 ]) && ((I2S0 -> TCSR & kSAI_FIFOWarningFlag ) || (I2S0 -> TCSR & kSAI_FIFOErrorFlag )))
1017
1035
{
1018
- SAI_TransferTxHandleIRQ (I2S0 , s_saiHandle [0 ][0 ]);
1036
+ s_saiTxIsr (I2S0 , s_saiHandle [0 ][0 ]);
1019
1037
}
1020
1038
}
1021
1039
#else
1022
1040
void I2S0_Tx_DriverIRQHandler (void )
1023
1041
{
1024
1042
assert (s_saiHandle [0 ][0 ]);
1025
- SAI_TransferTxHandleIRQ (I2S0 , s_saiHandle [0 ][0 ]);
1043
+ s_saiTxIsr (I2S0 , s_saiHandle [0 ][0 ]);
1026
1044
}
1027
1045
1028
1046
void I2S0_Rx_DriverIRQHandler (void )
1029
1047
{
1030
1048
assert (s_saiHandle [0 ][1 ]);
1031
- SAI_TransferRxHandleIRQ (I2S0 , s_saiHandle [0 ][1 ]);
1049
+ s_saiRxIsr (I2S0 , s_saiHandle [0 ][1 ]);
1032
1050
}
1033
1051
#endif /* FSL_FEATURE_SAI_INT_SOURCE_NUM */
1034
1052
#endif /* I2S0*/
@@ -1037,12 +1055,12 @@ void I2S0_Rx_DriverIRQHandler(void)
1037
1055
void I2S1_Tx_DriverIRQHandler (void )
1038
1056
{
1039
1057
assert (s_saiHandle [1 ][0 ]);
1040
- SAI_TransferTxHandleIRQ (I2S1 , s_saiHandle [1 ][0 ]);
1058
+ s_saiTxIsr (I2S1 , s_saiHandle [1 ][0 ]);
1041
1059
}
1042
1060
1043
1061
void I2S1_Rx_DriverIRQHandler (void )
1044
1062
{
1045
1063
assert (s_saiHandle [1 ][1 ]);
1046
- SAI_TransferRxHandleIRQ (I2S1 , s_saiHandle [1 ][1 ]);
1064
+ s_saiRxIsr (I2S1 , s_saiHandle [1 ][1 ]);
1047
1065
}
1048
1066
#endif
0 commit comments