anananjjj 发表于 2012-10-21 19:55

11、Beaglebone外围电路设计第三周:Codec芯片驱动调试成功

说起这款Codec芯片,我选取的封装实在是太难焊接了!!


第一块板子的Codec就是调试不成功,无奈,我只好重新焊接了一块:


这次焊接的还不错,程序下进去播放出声音来了!:loveliness:
值得一提的是图中那块方形的元件就是有源晶振,第一次用着东西!因为Codec芯片需要提供外部主时钟Mclk,我做了两套方案,一个是由AM335x 提供12M的时钟信号,一个是由有源晶振提供稳定的12M时钟,为了偷懒不同配置CLKOUT2,我这次使用的是第二种方法:loveliness:!


至于软件的配置过程还蛮坎坷的,主要是官方用的都是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的介绍!
测试视频:
http://player.youku.com/player.php/sid/XNDY0OTA3OTMy/v.swf

digital2Fox 发表于 2024-7-2 17:27

<p>好大的晶振</p>
页: [1]
查看完整版本: 11、Beaglebone外围电路设计第三周:Codec芯片驱动调试成功