在音频程序移植成功之后,由芯片控制的声音播放器就可以播放声音了,接下来的主要工作就是将整个音频程序写到外部的芯片单中去,由于没有专用的闪存擦写器,只能通过程序利用SPI通信方式进行读写。每页256个字节,一次擦写4096个字节。这就是麻烦一些,通过编辑器分行的形式,每次算出来4096个字节写入即可。在程序中本身就可以通过一串指令来操作,比如说播放、写入等等。
接下来先利用串口对其进行操作,直接利用串口发送相对应的指令即可,对于播放的指令很是简单,a0为开始标志05格式为播放声音,num 为第几段声音,vol为音量的大小,0xff预留,0b为结束标志。但是写相对麻烦一些,需要先下发指令开始写入,然后写入数据,再停止写入数据。只是要注意到从哪开始写,并且写入之后怎样在播放出来。
上图即为开始写入的地址。
上图中为读出的地址。校验位此时可以利用程序计算出来,接入EFM32后可以利用EFM32的程序进行计算,然后再与MM32中的校验位作对比,保证整个程序的正确性。
下一步就接入EFM32芯片,让其控制MM32芯片进行播放声音。只是EFM32芯片类型众多,从例程EFM32TG的程序写入到EFM32GG的芯片当中,本以为芯片寄存器大致相同,但是发现下面图中的UART传输一直调不通。
这样只能将system_efm32tg单中的程序全都换掉更换为system_efm32gg,在进行编译发现程序可以执行。并将对应的指令通过UART传到串口当中去,这需要将字符型转换为16进制,毕竟指令是一串,而传输时还是16进制。可以直接通过sscanf(pcString+i*2,"%02x",b+i);将字符类型直接转换为16进制进行传输。通过串口助手发现,其16进制可以进行输出。接入到MM32芯片,发现也可以播放声音。
接着就利用EFM32的按键进行切换音频。EFM32芯片是一个低功耗芯片,在他不执行指令时,会执行低功耗段代码。它的按键与传统的STM32芯片不相同,只有奇数和偶数状态,有时开发板上的按键并不好用,那么可以直接使用外在引脚来模拟按键,可以初始化一个引脚作为按键,然后通过杜邦线连接GND或者是VCC,进行触发,来模拟整个按键的运行,这样就可以对声音程序进行切换。接下来就是通过其他的模块进一步来扩充其功能。