Skip to content

Commit 1835371

Browse files
PeterJhonRbb666
authored andcommitted
修复 I2S驱动
修复小智播放问题
1 parent feda690 commit 1835371

File tree

1 file changed

+34
-20
lines changed

1 file changed

+34
-20
lines changed

libraries/HAL_Drivers/drv_i2s.c

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -144,33 +144,47 @@ void ifx_set_samplerate(struct rt_audio_configure audio_config)
144144
{
145145
switch (audio_config.samplerate)
146146
{
147-
case 16000:
148-
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 15U, 0U);
149-
break;
147+
case 16000:
148+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 24U, 0U);
149+
break;
150+
case 24000:
151+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 16U, 0U);
152+
break;
153+
case 48000:
154+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 8U, 0U);
155+
break;
156+
case 96000:
157+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 2U, 0U);
158+
break;
159+
default:
160+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 24U, 0U);
161+
break;
150162
}
151163
}
152164
else
153165
{
154166
switch (audio_config.samplerate)
155167
{
156-
case 16000:
157-
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 11U, 0U);
158-
break;
159-
case 24000:
160-
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 7U, 0U);
161-
break;
162-
case 48000:
163-
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 3U, 0U);
164-
break;
165-
case 96000:
166-
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 1U, 0U);
167-
break;
168-
default:
169-
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 11U, 0U);
170-
break;
168+
case 16000:
169+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 11U, 0U);
170+
break;
171+
case 24000:
172+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 7U, 0U);
173+
break;
174+
case 48000:
175+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 3U, 0U);
176+
break;
177+
case 96000:
178+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 1U, 0U);
179+
break;
180+
default:
181+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 11U, 0U);
182+
break;
171183
}
172184
}
173-
185+
#if defined(BSP_USING_XiaoZhi)
186+
Cy_SysClk_PeriPclkSetFracDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U, 15U, 0U);
187+
#endif
174188
Cy_SysClk_PeriPclkEnableDivider((en_clk_dst_t)CYBSP_TDM_CONTROLLER_0_CLK_DIV_GRP_NUM, CY_SYSCLK_DIV_16_5_BIT, 0U);
175189
}
176190

@@ -758,7 +772,7 @@ void i2s_playback_task(void *arg)
758772
while (audio->replay->queue.is_empty == 1)
759773
{
760774
rt_thread_mdelay(1);
761-
#if !defined(BSP_USING_XiaoZhi)
775+
#if defined(PKG_USING_WAVPLAYER) && !defined(BSP_USING_XiaoZhi)
762776
if(count>=50){
763777
rt_completion_done(&audio->replay->cmp);
764778
count=0;

0 commit comments

Comments
 (0)