设为首页 加入收藏

TOP

STM32实现Airplay音乐播放器(八)
2019-08-14 00:07:51 】 浏览:255
Tags:STM32 实现 Airplay 音乐 播放器
nbsp;I2S_Cmd(SPI3, ENABLE);

41 }

    代码12行处通过调用GPIO_PinRemapConfig()函数禁用JTAG, 32行处模式配置为主设备发送I2S_Mode_MasterTx,通信标准设置为I2S Philips标准I2S_Standard_Phillips,数据格式为标准16位格式I2S_DataFormat_16b,采样频率设置为44kHz I2S_AudioFreq_44k, I2S时钟线空闲状态的为低电平。

   为了提高数据的传输速度与效率,要打开IIS的DMA发送功能,每次发送SPI_I2S_DMAReq_Tx 请求后会将指定的buf0内的数据发送到SPI3的DR数据寄存器。我该函数是buf0即为存储音频数据的audiobuf, 因为我们的数据是按照16bit传送audiobuf内的数据为uint8型所以 num值为audiobuf内的有效数据长度/2。

1 void I2S2_TX_DMA_Init(u8* buf0,u16 num)

 2 {

 3   NVIC_InitTypeDef   NVIC_InitStructure;

 4   DMA_InitTypeDef  DMA_InitStructure;

 5   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

 6   DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)(&SPI3->DR);

 7   DMA_InitStructure.DMA_MemoryBaseAddr = (u32)buf0;

 8   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

 9   DMA_InitStructure.DMA_BufferSize = num;

10   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

11   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

12   DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;

13   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

14   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular   ;

15   DMA_InitStructure.DMA_Priority = DMA_Priority_High;

16   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

17   DMA_Init(DMA2_Channel2, &DMA_InitStructure);

18   DMA_Cmd(DMA2_Channel2, ENABLE);

19   SPI_I2S_DMACmd(SPI3,SPI_I2S_DMAReq_Tx,ENABLE);

20 }

    音频流的处理过程为通过UDP接收音频数据包,然后对收到的数据包进行解码,并将解码后的数据存储到audiobuf,通过I2S3的DMA功能将数据发送到PCM5102A模块,代码如下所示:

1 void do_raop(uint8 s)

 2 {

 3     int outputlen;

 4     uint8 ip[4];

 5     uint16 len, port;

 6     switch (getSn_SR(s)) {

 7     case SOCK_UDP:

 8         if ((len = getSn_RX_RSR(s)) > 0) {

 9             /*接收音频数据*/

10             recvfrom(s,buffer,len,ip,&port);

11             /*解码收到的音频数据*/

12             outputlen=decode_audio_data(buffer, len ,1);

13             /*配置DMA*/

14             I2S2_TX_DMA_Init((uint8*)audiobuf,outputlen/2);

15         }

16         break;

17     case SOCK_CLOSED:

18         socket(s, Sn_MR_UDP,55641,0);

19         break;

20   &nbs

首页 上一页 5 6 7 8 下一页 尾页 8/8/8
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇201703-2 学生排队 下一篇201312-2ISBN号码

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目