📄 drvi2s.c
字号:
/* I2S MCLK (Master Clock) frequency */
/* */
/* Description: */
/* Get I2S MCLK (Master Clock) frequency. MCLK = I2S source clock / (2xMCLK_DIV) */
/*---------------------------------------------------------------------------------------------------------*/
uint32_t DrvI2S_GetMCLKFreq(void)
{
uint32_t u32Reg, u32SrcClk;
u32Reg = I2S->I2SCLKDIV.MCLK_DIV;
u32SrcClk = DrvI2S_GetSourceClockFreq();
if (u32Reg == 0)
return u32SrcClk;
else
return ((u32SrcClk >> 1) / u32Reg);
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_SetMCLKFreq */
/* */
/* Parameters: */
/* u32Mclk - [in] I2S master clock output ftequency (Hz) */
/* */
/* Returns: */
/* None */
/* */
/* Description: */
/* Set master clock divider. MCLK = I2S source clock / (2xMCLK_DIV) */
/*---------------------------------------------------------------------------------------------------------*/
void DrvI2S_SetMCLKFreq(uint32_t u32Mclk)
{
uint8_t u8Divider;
uint32_t u32SrcClk;
u32SrcClk = DrvI2S_GetSourceClockFreq();
if (u32Mclk == u32SrcClk)
{
u8Divider = 0;
}
else
{
u8Divider = (u32SrcClk/u32Mclk) >> 1;
}
I2S->I2SCLKDIV.MCLK_DIV = u8Divider;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_SetChannelZeroCrossDetect */
/* */
/* Parameters: */
/* channel - [in] I2S_LEFT_CHANNEL / I2S_RIGHT_CHANNEL */
/* i32flag - [out] 1:Enable / 0:Disable */
/* */
/* Returns: */
/* 0 Success */
/* <0 Incorrect Argument */
/* */
/* Description: */
/* Enable/Disable left/right channel zero cross detect function */
/*---------------------------------------------------------------------------------------------------------*/
int32_t DrvI2S_SetChannelZeroCrossDetect(E_I2S_CHANNEL channel, int32_t i32flag)
{
if (channel == I2S_LEFT_CHANNEL)
{
I2S->I2SCON.LCHZCEN = i32flag;
}
else if (channel == I2S_RIGHT_CHANNEL)
{
I2S->I2SCON.RCHZCEN = i32flag;
}
else
return E_DRVI2S_ERR_ARGUMENT;
return E_SUCCESS;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_EnableTxDMA */
/* */
/* Parameters: */
/* None */
/* */
/* Returns: */
/* None */
/* */
/* Description: */
/* Enable I2S Tx DMA function. I2S requests DMA to transfer data to Tx FIFO */
/*---------------------------------------------------------------------------------------------------------*/
void DrvI2S_EnableTxDMA(void)
{
I2S->I2SCON.TXDMA = 1;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_DisableTxDMA */
/* */
/* Parameters: */
/* None */
/* */
/* Returns: */
/* None */
/* */
/* Description: */
/* Disable I2S Tx DMA function. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvI2S_DisableTxDMA(void)
{
I2S->I2SCON.TXDMA = 0;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_EnableRxDMA */
/* */
/* Parameters: */
/* None */
/* */
/* Returns: */
/* None */
/* */
/* Description: */
/* Enable I2S Rx DMA function. I2S requests DMA to transfer data from Rx FIFO */
/*---------------------------------------------------------------------------------------------------------*/
void DrvI2S_EnableRxDMA(void)
{
I2S->I2SCON.RXDMA = 1;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_DisableRxDMA */
/* */
/* Parameters: */
/* None */
/* */
/* Returns: */
/* None */
/* */
/* Description: */
/* Disable I2S Rx DMA function. */
/*---------------------------------------------------------------------------------------------------------*/
void DrvI2S_DisableRxDMA(void)
{
I2S->I2SCON.RXDMA = 0;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_EnableTx */
/* */
/* Parameters: */
/* None */
/* */
/* Returns: */
/* None */
/* */
/* Description: */
/* Enable I2S Tx function */
/*---------------------------------------------------------------------------------------------------------*/
void DrvI2S_EnableTx(void)
{
I2S->I2SCON.TXEN = 1;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_DisableTx */
/* */
/* Parameters: */
/* None */
/* */
/* Returns: */
/* None */
/* */
/* Description: */
/* Disable I2S Tx function */
/*---------------------------------------------------------------------------------------------------------*/
void DrvI2S_DisableTx(void)
{
I2S->I2SCON.TXEN = 0;
}
/*---------------------------------------------------------------------------------------------------------*/
/* Function: DrvI2S_EnableRx */
/* */
/* Parameters: */
/* None */
/* */
/* Returns: */
/* None */
/* */
/* Description: */
/* Disable I2S Rx function */
/*---------------------------------------------------------------------------------------------------------*/
void DrvI2S_EnableRx(void)
{
I2S->I2SCON.RXEN = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -