/**
  ******************************************************************************
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  * Copyright (C) 2022 Shanghai Eastsoft Microelectronics Co., Ltd. ALL rights reserved.
  *******************************************************************************
  */

<--------------------------------------------------------------------------------
Version history:
--------------------------------------------------------------------------------->
2019-07-17	V1.00	AE TEAM
2022-09-15	V1.01	AE TEAM
1.适配ES-PDS-ES32F3696LX开发板

<--------------------------------------------------------------------------------
Demo introduction:
--------------------------------------------------------------------------------->
通过I2S播放音频。

<--------------------------------------------------------------------------------
测试环境:
--------------------------------------------------------------------------------->
测试用板：
ES-PDS-ES32F3696LX-V1.0
ES-PDS-AIoT-V1.0
PRECHIN PZ-WM8978-MP3模块

辅助软件：
XCOM串口上位机软件

<--------------------------------------------------------------------------------
测试步骤：
--------------------------------------------------------------------------------->
1) 正确连接I2C、I2S和UART，接入3.5mm耳机，准备收听音频；
2) 打开串口调试助手上位机，波特率115200，停止位1，数据位8，奇偶校验无；
3) 运行程序，上位机将打印初始化信息，打印完毕后，发送指令（勾选“发送新行”）以操作音频动作，指令及其对应动作如下:
play   播放音乐
stop   停止
pause  暂停
resume 继续
record 录音
replay 播放录音
volh   调高音量
voll   调低音量

<--------------------------------------------------------------------------------
注意：
--------------------------------------------------------------------------------->
1) 只能在stop状态下使用需要控制WM8978的命令如play/record/replay/volh/voll；
2) 音频文件转为数组形式存储在sample_wav.c中，只支持16bit 16000采样率 单声道音频；
3) 如果能够听到一小段音乐但无法持续播放，请检查ald_dma.c文件
将以下代码
			if (dma0_cbk[i].cplt_cbk != NULL)
				dma0_cbk[i].cplt_cbk(dma0_cbk[i].cplt_arg);

			DMA0->ICFR    = (1U << i);
			DMA0->CHENCLR = (1U << i);
改为
			DMA0->ICFR    = (1U << i);
			DMA0->CHENCLR = (1U << i);

			if (dma0_cbk[i].cplt_cbk != NULL)
				dma0_cbk[i].cplt_cbk(dma0_cbk[i].cplt_arg);
4) PZ-WM8978模块需要5V供电；
5) 串口发送指令必须勾选“发送新行”选项；
6) keil工程请勿勾选“GNU extensions”。

<--------------------------------------------------------------------------------
System clock:
--------------------------------------------------------------------------------->
External HOSC[12MHz] divided by 3, then PLL to 72MHz.

<--------------------------------------------------------------------------------
Pin connection: 
--------------------------------------------------------------------------------->
I2S--
SDA (放音)  --- PB5   I2S_SD   SPI0_MOSI PB5   4
SDB (录音)  --- PB5   I2S_SD   SPI0_MOSI
SCKA        --- PD3   I2S_CK   SPI0_SCK  PB3   4
MCLKA       --- PB4   I2S_MCLK SPI0_MISO PB4   4
FSA         --- PA4   I2S_WS   SPI0_NSS  PA15  4

I2C--
PB6 -  I2C0_SCL
PB7 -  I2C0_SDA

I2C_SCL   ---- (PB6, GPIO_FUNC_5)
I2C_SDA   ---- (PB7, GPIO_FUNC_5)

I2S_LRCK  ---- (PA4, GPIO_FUNC_6)
I2S_SCLK  ---- (PD3, GPIO_FUNC_4)
I2S_SD    ---- (PB5, GPIO_FUNC_4)
I2S_MCLK  ---- (PB4, GPIO_FUNC_4)

UART_TX   ---- (PE2, GPIO_FUNC_3)
UART_RX   ---- (PE3, GPIO_FUNC_3)
