- 打卡等级:以坛为家I
- 打卡总天数:299
- 最近打卡:2026-03-06 09:14:52
超级版主
- 积分
- 15618
|
发表于 2025-12-27 14:07:05
|
显示全部楼层
原程序只播放一个声道,我增加另一个声道输出,下面的程序替换I2S.c里的中断函数即可:
unsigned int dac;
////////////////////////////////////////
// I2S中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void I2S_ISR(void) interrupt I2S_VECTOR
{
//<<AICUBE_USER_I2S_ISR_CODE1_BEGIN>>
// // 在此添加中断函数用户代码
static u8 flag;
if (I2S1_CheckTXEFlag()) //判断I2S发送缓冲区空中断
{
if(!pcm_run_flag)
{
I2S1_WriteData_16B(0);
}
else
{
if(isMp3Play)
{
flag = !flag;
if(flag)
{
dac = i2s_buffer[i2s_buffer_index];
I2SDRH = (u8)(dac/256), I2SDRL = (u8)(dac%256);
}
else
{
I2SDRH = (u8)(dac/256), I2SDRL = (u8)(dac%256);
if (++i2s_buffer_index >= i2s_buffer_len)
{
i2s_buffer_index = 0;
pcm_run_flag = 0;
}
}
}
else
{
//s16le
(I2SDRH = LOBYTE(i2s_buffer[i2s_buffer_index]), I2SDRL = HIBYTE(i2s_buffer[i2s_buffer_index]));
//I2S_WriteData_16B(i2s_buffer[i2s_buffer_index]);
i2s_buffer_index++;
if (i2s_buffer_index >= i2s_buffer_len)
{
i2s_buffer_index = 0;
pcm_run_flag = 0;
}
}
}
}
}
|
|