说起这款Codec芯片,我选取的封装实在是太难焊接了!!
第一块板子的Codec就是调试不成功,无奈,我只好重新焊接了一块:
这次焊接的还不错,程序下进去播放出声音来了!
值得一提的是图中那块方形的元件就是有源晶振,第一次用着东西!因为Codec芯片需要提供外部主时钟Mclk,我做了两套方案,一个是由AM335x 提供12M的时钟信号,一个是由有源晶振提供稳定的12M时钟,为了偷懒不同配置CLKOUT2,我这次使用的是第二种方法
!
至于软件的配置过程还蛮坎坷的,主要是官方用的都是mcasp1口,而我设计使用的是mcasp0口,二者的初始化方法倒是相同,但是mcasp0的所有寄存器的定义它都没给出来!还好可以照猫画虎,总算是在寄存器的手册(4000多页!汗!)中找到了相关的定义!
说实在的codec的配置过程蛮复杂的,我现在有的地方还是看得不太彻底,设计到DMA的ping pong模式等等,好在可以直接使用来无限循环播放短暂的音频,这也就达到了我的要求了!代码可以在官方的AM335X_StarterWare_02_00_00_07里查看到,这里我就不细说了!
但是要注意mcasp0的引脚配置:
void McASP0PinMuxSetup(void)//用到的引脚,FX,DIN,DOUT,BCLK
{
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_MCASP0_AHCLKR) =
( CONTROL_CONF_MCASP0_AHCLKR_CONF_MCASP0_AHCLKR_RXACTIVE
| CONTROL_CONF_MUXMODE(2));//DIN mcasp0_axr2
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_MCASP0_ACLKX) =
CONTROL_CONF_MCASP0_ACLKX_CONF_MCASP0_ACLKX_RXACTIVE;//BCLK mcasp0_aclkx
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_MCASP0_FSX) =
CONTROL_CONF_MCASP0_FSX_CONF_MCASP0_FSX_RXACTIVE; //FX mcasp0_fsx
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_MCASP0_AHCLKX) =
( CONTROL_CONF_MCASP0_AHCLKX_CONF_MCASP0_AHCLKX_RXACTIVE
| CONTROL_CONF_MUXMODE(2)); //DOUT mcasp0_axr3
HWREG(SOC_CONTROL_REGS + CONTROL_CONF_XDMA_EVENT_INTR(0)) =
CLKOUT2_SEL_MODE; //CLK2
}
用到的四个引脚是没有处在同一个功能mode下的!!具体的mode可以参阅AM335x芯片的datasheet的介绍!
测试视频:
[media]http://player.youku.com/player.php/sid/XNDY0OTA3OTMy/v.swf[/media]