137 lines
3.2 KiB
C
Raw Normal View History

2021-07-28 13:15:22 +08:00
#include "stm32h743i_eval_audio.h"
#include "usbd_audio_if.h"
#include "usbd_audio.h"
#include "sai.h"
#include "es8388.h"
#include "sai.h"
#include "usart.h"
//////////////////////////////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>ѧϰʹ<CFB0>ã<EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>;
//ALIENTEK STM32H7<48><37><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//USB<53><42><EFBFBD><EFBFBD><EFBFBD>ײ<EFBFBD><D7B2>ӿں<D3BF><DABA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD>@ALIENTEK
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̳:www.openedv.com
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:2019/5/17
//<2F><EFBFBD><E6B1BE>V1.0
//<2F><>Ȩ<EFBFBD><C8A8><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD>
//Copyright(C) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӿƼ<D3BF><C6BC><EFBFBD><EFBFBD>޹<EFBFBD>˾ 2009-2019
//All rights reserved
//*******************************************************************************
//<2F>޸<EFBFBD><DEB8><EFBFBD>Ϣ
//<2F><>
//////////////////////////////////////////////////////////////////////////////////
u8 volume=0; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
extern u8 usbd_audio_dataout_en; //USB<53><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬,<2C><>usbd_audio.c<><63><EFBFBD><EFBFBD><E6B6A8>
//<2F><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>SAI DMA<4D><41><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
void audio_sai_dma_callback(void)
{
BSP_AUDIO_OUT_TransferComplete_CallBack(); //ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>ӿ<EFBFBD>
//OutputDevice:<3A><><EFBFBD><EFBFBD><EFBFBD>ѡ<E8B1B8><D1A1><>õ<EFBFBD>.
//Volume:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С,0~100
//AudioFreq:<3A><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq)
{
ES8388_I2S_Cfg(0,3); //<2F><><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>׼,16λ<36><CEBB><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
SAIA_Init(0,1,4); //<2F><><EFBFBD><EFBFBD>SAI,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,16λ<36><CEBB><EFBFBD><EFBFBD>
SAIA_SampleRate_Set(AudioFreq); //<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>
BSP_AUDIO_OUT_SetVolume(Volume);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
sai_tx_callback=audio_sai_dma_callback; //<2F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>audio_sai_dma_callback
printf("EVAL_AUDIO_Init:%d,%d\r\n",Volume,AudioFreq);
return 0;
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>
//pBuffer:<3A><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַָ<D6B7><D6B8>
//Size:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<28><>λ:<3A>ֽ<EFBFBD>)
uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size)
{
SAIA_TX_DMA_Init((u8*)pBuffer,0,Size/2,1); //<2F><><EFBFBD><EFBFBD>TX DMA,16λ
DMA2_Stream3->CR&=~(1<<8); //<2F><><EFBFBD><EFBFBD>ģʽ
DMA2_Stream3->CR&=~(1<<18); //<2F>ijɵ<C4B3><C9B5><EFBFBD><EFBFBD><EFBFBD>ģʽ
SAI_Play_Start(); //<2F><><EFBFBD><EFBFBD>DMA
printf("EVAL_AUDIO_Play:%x,%d\r\n",pBuffer,Size);
return 0;
}
//<2F>л<EFBFBD><D0BB><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>buffer,ÿ<><C3BF>DMA<4D>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ɻ<EFBFBD><C9BB><EFBFBD><EFBFBD>øú<C3B8><C3BA><EFBFBD>
//Addr:<3A><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ
//Size:<3A><>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С(<28><>λ:harf word,Ҳ<><D2B2><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ֽ<EFBFBD>)
void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size)
{
if(usbd_audio_dataout_en==1) //USB<53><42><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{
usbd_audio_dataout_en=0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
}else if(usbd_audio_dataout_en==0) //û<><C3BB><EFBFBD>յ<EFBFBD><D5B5>κ<EFBFBD><CEBA><EFBFBD><EFBFBD><EFBFBD><><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
{
mymemset(pData,0,AUDIO_TOTAL_BUF_SIZE);
usbd_audio_dataout_en=2; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>buffer,ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(Size!=AUDIO_TOTAL_BUF_SIZE)
{
//printf("chgbuf:%x,%d\r\n",pData,Size);//<2F><><EFBFBD>۲<EFBFBD><DBB2><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>printf,<2C><><EFBFBD>ǻ<EFBFBD><C7BB><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><CEA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
DMA2_Stream3->CR&=~(1<<0); //<2F>ر<EFBFBD>DMA<4D><41><EFBFBD><EFBFBD>
while(DMA2_Stream3->CR&0X1); //ȷ<><C8B7>DMA<4D><41><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>
DMA2_Stream3->NDTR=Size/2; //DMA <20><EFBFBD><E6B4A2>0<EFBFBD><30>ַ
DMA2_Stream3->CR|=1<<0; //<2F><><EFBFBD><EFBFBD>DMA<4D><41><EFBFBD><EFBFBD>
}
//ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>
//Option:<3A><><EFBFBD>Ʋ<EFBFBD><C6B2><EFBFBD>,1/2,<2C><><EFBFBD><EFBFBD>:CODEC_PDWN_HW<48><57><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option)
{
printf("EVAL_AUDIO_Stop:%d\r\n",Option);
return 0;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Volume:0~100
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume)
{
volume=Volume;
ES8388_HPvol_Set(volume*0.3);
ES8388_SPKvol_Set(volume*0.3);
return 0;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//cmd:0,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>; 1,<2C><><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD>ֵ:0,<2C>ɹ<EFBFBD>
// <20><><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd)
{
return 0;
}