改代码配置
USB原本是非常复杂的,代码部分原本也是不例外得复杂,但是ST官方帮我们完成了几乎所有工作,我们只需要牵线让USB和I2S认识一下就行了。
整个修改过程USB部分只需要填写usbd_audio_if.c文件中的各个功能函数和封装I2S的功能函数。
usbd_audio_if.c中,最简修改是只修改AUDIO_AudioCmd_FS函数并在I2S发生中断和半传输中断时分别调用该文件中的同步函数TransferComplete_CallBack_FS和HalfTransfer_CallBack_FS。
封装I2S的功能有I2S以DMA方式发送、DMA中断处理函数。其次也可封装DMA 的暂停、恢复、停止等功能以背后续使用。
void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s)
{
if(hi2s == &hi2s2){
HalfTransfer_CallBack_FS();//osSemaphoreRelease(SAI3_TX_BUFF0Handle);
}
}
void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s)
{
if(hi2s == &hi2s2){
TransferComplete_CallBack_FS();//osSemaphoreRelease(SAI3_TX_BUFF1Handle);
}
}
AudioPlayerInfo.DMA_TX_NUM);
}
void AudioDMA_Stop(void)//停止DMA结束播放
{
HAL_I2S_DMAStop(&hi2s2);
}
void AudioDMA_Pause(void)//暂停DMA暂停播放
{
HAL_I2S_DMAPause(&hi2s2);
}
void AudioDMA_Resume(void)//从暂停恢复播放
{
HAL_I2S_DMAResume(&hi2s2);
}
void AudioCard_Play(uint16_t* buff, uint16_t size)//声卡模式开始播放
{
HAL_I2S_Transmit_DMA(&hi2s2, buff, size);
}
|