您的位置:首页 > 其它

TAS5754应用笔记

2016-03-08 23:23 218 查看

1. 工程实例

音频接口:三线I2S接口,从模式,无MCLK

采样频率:192KHz

总线接口:I2C 50KHz

电源电压:15V/3.3V

功能框图:



上电自动复位所有寄存器

系统时钟图:

LRCK/FS可以作为时钟源,需要软件配置

fs代表I2S输入数据的采样频率



时钟分叉树:

可选时钟源有三种:MCLK/GPIO/SCLK

选择SCLK作为时钟源的话,需要手动配置PLL锁相环的参数(K/J/D/R/P),参数的选择取决于SCLK的频率,采样频率等参数

PLL锁相成功后生成的PLLCK经过分频后提供给内部DSP和DAC使用



从模式的SCLK作为PLL锁相环的时钟源,生成内部时钟(3线PCM)

关闭自动配置音频接口,否则不能手动配置PLL参数

配置时钟分叉树,使SCLK的时钟给到PLL

根据从模式I2S输入的采样频率计算PLL参数。本工程使用192KHz采样频率,参照下表中的参数配置PLL锁相环(建议选择PLL倍频比最小的,表中最后一行R*J.D/P=2,值最小),锁相环锁定后会输出数倍于SCLK的时钟



图中参数J和D可由公式进一步计算得出,公式如下:



参数DSPfs,DOSR,NCP用来配置时钟分叉树内的对应分频器

SPK_GAIN脚上的电压决定了功放的最大输出功率

本工程使用26dBV=19.95V

dBV-V快速转换工具链接



功放运行模式选择stereo模式

mini DSP 音频处理器机制

多种可选的HybridFlows,快速将mini DSP配置到特定的模式

只有HybridFlow5支持192KHz的采样率

2. 示例代码

uint8_t IIC_REG_5754[][2] =
{
{0x00,0x00},   /* Select page 0                 */
{0x01,0x11},   /* Enter reset mode              */
{0xFF,0x32},   /* Delay 50ms                    */
{0x01,0x00},   /* Enter normal mode             */
{0x03,0x11},   /* Mute all channels             */
{0x02,0x10},   /* Enter standby mode            */
{0x25,0x5a},   /* Ignore Fs/MCLK/LRCLK/SCLK detection,disable clock auto set */
{0x0d,0x10},   /* Set SCLK as PLL clock         */
{0x14,0x01},   /* Set P=2                       */
{0x15,0x08},   /* Set J=9                       */
{0x16,0x00},   /* Set D=0                       */
{0x17,0x00},
{0x18,0x00},   /* Set R=1                       */
{0x1b,0x01},   /* Set DSP clock divide by 1     */
{0x1c,0x0f},   /* Set DAC clock divide by 16    */
{0x1d,0x03},   /* Set NCP clock divide by 2     */
{0x1e,0x01},   /* Set OSR clock divide by 1     */
{0x22,0x02},   /* Set Quad speed(96KHz~192KHz)  */
{0x23,0x01},   /* Set DSP clock cycles=DSPfs    */
{0x24,0x00},
{0x02,0x00},   /* Enter normal operation        */
{0x03,0x00},   /* Un-mute all channels          */
};

void PA_5754_Init(uint8_t Adds)
{
uint8_t buf[2];
uint8_t index;

for(index = 0;  index<(sizeof(IIC_REG_5754)/(sizeof(uint8_t)*2)); index++)
{
switch(IIC_REG_5754[index][0])
{
case 0xFF:
vTaskDelay(IIC_REG_5754[index][1]);
break;
default:
buf[0] = IIC_REG_5754[index][0];
buf[1] = IIC_REG_5754[index][1];
IICsetReg(Adds,buf);
break;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: