This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PCM3070:PCM3070 EQ问题

Guru**** 2362840 points
Other Parts Discussed in Thread: PCM3070
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/624613/pcm3070-pcm3070-eq-question

部件号:PCM3070

大家好,  

客户正在使用PCM3070。 他需要设置EQ。 现在,他使用两种方法设置EQ。  

不管怎样,他都无法正确设置均衡器。 均衡器  没有任何影响。  

您会建议如何正确设置EQ吗?  

客户设置EQ的方式如下:

一个是逐个写入数据:

   0x2C,0x00,0x2C,
   0x2C,0x01,0x06,
   0x2C,0x08,0x00,
   0x2C,0x09,0x00,
   0x2C,0x0a,0x00,

   0x2C,0x0c,0x7f,
   0x2C,0x0d,0xff,
   0x2C,0x0E,0xff,

//----------- 左-----------
   0x2C,0x10,0x3f,      //L 31Hz
   0x2C,0x11,0xf8,
   0x2C,0x12,0x40,

   0x2C,0x14,0x80,
   0x2C,0x15,0x19,
   0x2C,0x16,0x81,

   0x2C,0x18,0x3f,
   0x2C,0x19,0xee,
   0x2C,0x1a,0x90,

   0x2C,0x1c,0x7f,
   0x2C,0x1d,0xe6,
   0x2C,0x1E,0x7f,
}

另一种是一次性写入数据:

MAPI_U8 AmpEQ_pag44_Data[]=

   0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0x00,                              // 08~0F
   0x3F,0xF8,0x40,0x00,0x80,0x19,0x81,0x00,0x3F,0xEE,0x90,0x00,0x7F,0xE6,0x7F,0x00   ,// 10~1F
}

祝你一切顺利,
张美基
亚洲客户支持中心
德州仪器(TI)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,Mickey,

    设备似乎是在自适应模式下配置的,这允许在设备运行时更新筛选器。

    为了动态更新滤波器,在写入所需的系数后, 寄存器44 [0x2C]的位D0应写入'1',以对滤波器执行系数负载。 PCM3070应用参考指南的2.4 .5.3 部分对此进行了详细说明

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Diego,

    客户还有另外两个问题:

    问题1:有关PCM3070应用参考指南的2.4 .5.3 部分,滤波器在Buffer-A / B之间切换

    是否可以为Buffer-A / B设置相同的参数? 这适用于寄存器第44-52页和第62-70页,

    它们的值是否可以设置相同?

    问题2:客户通过I2C逐一写入滤波系数寄存器。 读数值相同

    作为写入值。 但当客户使用多字节模式写入过滤器系数寄存器时,

    读取值与写入值不同。 客户想验证EQ是否可以启动

    通常通过I2C一个一个?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,Mickey,

    请参阅以下评论。

    1-每个缓冲区的参数可以相同,如果值需要在操作的任何点更改,则取决于最终用户配置。

    2-通过逐个写入系数来配置EQ应该没有问题。

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Diego,

    感谢您的支持。 现在客户仍有问题。

    他使用以下步骤:
    1. Page0_01=0x01;
    2.初始化寄存器Page0和Page1;
    3.编写EQ数据:第44-46页,第62-64页;
    4.写入寄存器page44_01=0x07。

    初始化寄存器Page0和Page1如下所示:

    MAPI_U8 AmpInitTbl[]=

    0x00,0x0B,0x81,// NDAC分压器
    0x00,0x0c,0x82,// MDAC分隔器
    0x00,0x0d,0x00,// DAC的OSR为128,默认值
    0x00,0x0E,0x80,//默认值
    0x00,0x1b,0x20,//将音频接口的字长设置为24位PTM_P4
    //0x00,0x3c,0x08,//将DAC模式设置为PRB_P8
    0x00,0x34,0x08,// Bit5-2=0010要设置GPIO输入,位1为输入状态
    0x00,0x3c,0x01,//将DAC模式设置为PRB_P1 (默认值)
    0x00,0x3f,0xEA,//加电DAC,交换R/L通道? 6369是d6828是EA
    0x00,0x40,0x00,//取消DAC静音
    0x00,0x41,0x00,// DAC音量-> 0dB
    0x00,0x42,0x00,

    0x01,0x01,0x00,// AVDD耗材,默认值
    0x01,0x02,0x21,//启用主模拟电源控制
    0x01,0x0a,0x00,//输入共模
    0x01,0x0c,0x02,// DAC至耳机的输出???? 注:HP
    0x01,0x0d,0x02,
    0x01,0x03,0x00,//将DAC PTM模式设置为PTM_P3/4
    0x01,0x04,0x00,
    0x01,0x0E,0x0a,//0x08,// DAC (比特3)/MA (比特1)输出到线路输出
    0x01,0x0F,0x0a,//0x08,
    0x01,0x09,0x3f,//打开耳机和线路输出驱动器。 0x3c-->0x0F,惠普
    0x01,0x10,0x1d,//取消耳机驱动程序静音,0dB增益,HP
    0x01,0x11,0x1d,
    0x01,0x12,LINE_AMP_DEFAULT,//取消静音LineOut驱动程序,00db增益
    0x01,0x13,LINE_AMP_DEFAULT,
    0x01,0x14,0x25,//弹出
    0x01,0x18,Mixer_AMP_mute,// Mixer Amplifier左侧音量控制,0dB。 0x00为0dB,0x27为-30.1db,0x28--静音
    0x01,0x19,Mixer_AMP_MUTE,
    //0x01,0x3b,0x00,//左PGA音量控制,0dB。 00--5F(0db--47.5dB)。
    //0x01,0x3c,0x00,

    //用于MIC输入
    0x01,0x34,0x20,//使用20K输入阻抗将IN1L路由到Left_P
    0x01,0x36,0x80,//将通用模式路由至LEFT _M,阻抗为20K
    0x01,0x37,0x20,//将IN1R路由到Rright_P,输入阻抗为20K
    0x01,0x39,0x80,//将通用模式路由到RIGHT _M,阻抗为20K
    0x01,0x3b,PGA_DEFAULT,//输入阻抗为20K的0dB寄存器=>通道增益为0dB
    0x01,0x3c,PGA_DEFAULT,//输入阻抗为20K的0dB寄存器=>通道增益为0dB
    0x01,0x47,0x32,//将输入加电时间设置为3.1毫秒(对于ADC)
    0x01,0x7B,0x01,//将参考充电时间设置为40ms
    0xFF,
    };

    当客户不写入EQ数据时,声音可以正确输出。

    但是,当客户使用上述步骤写入EQ数据时,听起来就像是在偷盗。

    您会提供更多建议吗? 如何正确启动EQ?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,Mickey,

    感谢您的反馈。 在打开DAC之前,自适应模式似乎未启用,这不是正确的顺序,应在打开ADC/DAC电源之前启用自适应模式。 请让客户在初始化过程中启用自适应模式,然后尝试使用前面提到的过程加载系数,只需将'1'写入第44页寄存器1的0位。 EQ设置也可以在初始配置期间写入。

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Diego,

    感谢你的帮助。 我将与客户确认。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好,Diego和Mickey,

    感谢您的帮助!

     我通过 PCM3070-K CS设置EQ参数并录制了命令。 然后我尝试根据记录写入最远的寄存器和值。 但不管用。

    MAPI_U8 AmpEQSettingTbl_S[] =  

    0x00, 0x00, 0x00,
    0x00, 0x04, 0x03,
    0x00, 0x05, 0x91,
    0x00, 0x06, 0x08,
    0x00, 0x07, 0x00,
    0x00, 0x08, 0x00,
    0x00, 0x1b, 0x20,
    0x00, 0x0B, 0x82,
    0x00, 0x0c, 0x88,
    0x00, 0x0d, 0x00,
    0x00, 0x0E, 0x80,
    0x00, 0x74, 0x00,
    0x00, 0x44, 0x00,
    0x00, 0x34, 0x08,
    0x00, 0x3c, 0x01  ,//或0x00?
    0x00, 0x0F, 0x02,
    0x00, 0x10, 0x1c,
    0x00, 0x11, 0x04,

    0x01, 0x01, 0x00,
    0x01, 0x02, 0x21,
    0x01, 0x7B, 0x01,

    0x2C, 0x01, 0x04,

    0xFF,
    };
    MAPI_U8 AmpEQSettingTbl[] =  

    0x2C, 0x08, 0x00,
    0x2C, 0x09, 0x00,
    0x2C, 0x0a, 0x00,
    0x2C, 0x0B, 0x00,

    0x2C, 0x0c, 0x7f,
    0x2C, 0x0d, 0xff,
    0x2C, 0x0E, 0xff,
    0x2C, 0x0F, 0x00,
        ......
    0x34, 0x7c, 0x80,
    0x34, 0x7d, 0x34,
    0x34, 0x7E, 0x76,

    0xFF,
    };
    MAPI_U8 AmpEQSettingTbl_E[] =  

    0x01, 0x14, 0x25,
    0x01, 0x0c, 0x0a,
    0x01, 0x0d, 0x0a,
    0x01, 0x0E, 0x0a,
    0x01, 0x0F, 0x0a,
    0x01, 0x09, 0x3f,
    0x01, 0x10, 0x1d,
    0x01, 0x11, 0x1d,
    0x01, 0x12, 0x06,
    0x01, 0x13, 0x06,
    0x01, 0x18, 0x24,
    0x01, 0x19, 0x24,

    0x00, 0x41, 0x00,
    0x00, 0x42, 0x00,
    0x00, 0x3f, 0xEA,
    0x00, 0x40, 0x00,
    0x2C,0x01,0x05,
         
    0xFF,
    };
    上述talbes与CS中的记录相同。 我尝试先将Page01_Reg02设置为0x00,最后将其设置为0x01。结果相同。  
    请帮助检查错误。
    感谢并期待您的供应。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,  

    欢迎来到E2E,感谢您对我们的产品感兴趣!

    从您发送的代码中,将正确加载系数,因此应在所使用的输出中记录筛选器效果。 您是否能够获得音频输出? 能否请您详细说明您目前面临的具体问题? 此外,您能否分享 有关所需配置的更多详细信息? 您是否能够使设备与CS软件正常工作?

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Diego,

    谢谢!

    我加载系数后没有音频输出。 但它可以与CS软件一起正常工作。 这是 我无法理解的。

    我想使用PCM3070获得2.1 立体声音频并通过EQ获得更好的低音效果。 在我们获得CS软件后,我们尝试使用代码执行此操作,但失败。 因此,我请求您的支持和帮助。

    我知道miniDSP有两种不同的初始化方法:预设模式(PRB)和编程模式。 最后一次调试是在Preset (预设)模式下进行的,对吗? 所以 我想尝试用 PurePath Studio在编程模式下获取代码。 但我没有PurePath Studio上的PCM3070配置。 您是否会帮助提供它?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    根据您的配置,似乎使用了预设模式。如果使用了,则可以访问特定PRB的可用双格式。 奇怪的是,使用CS软件执行的相同寄存器写入序列在您的系统中无法正常工作。 如果加载使用CS软件发送的寄存器序列,设备是否工作?

    要获取PurePath Studio,请转至TI.com中的产品文件夹并请求访问权限。 我可以跟进我的音频软件团队以批准您。

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Diego,

    谢谢! 我请求GDE。 请帮助您尽快批准。 非常感谢!
    "
    感谢您向德州仪器(TI)索取此文件

    我们将审核您的申请-如果您获得批准,几天后您将收到TI的电子邮件。 如果您需要联系我们,请联系audio_software@ti.com


    谢谢!
    德州仪器(TI)
    "
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Diego,

    我得到了PurePath Studio。 非常感谢!

    要获得快速获取代码的帮助,请在 GDE上共享PCM3070 (如PCM3070_example.1_PFW.pfw)的成功配置吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,  

    我建议您查看此Wiki条目,您可以在其中找到一些有关miniDSP开发和实施的有用信息和示例。

    此致,

     -Diego Mel é ndez López ñ a
      音频应用工程师

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Diego,

    我读过"音频转换器",但没有找到有关PCM3070应用的示例。 也许我在这方面很愚蠢。

    以下代码用于EQ调试但失败(无声音输出)。 我只想激活 3页数据。  我该怎么办?  如果使用AmpInitTbl进行初始化,它将 在立体声2.0 正常的播放模式下工作。

    希望你能帮你查一下有什么问题。 谢谢!

    /*@<include>@*/
    #include <stdio.h>
    #include <unistd.h>
    #include "debug.h"
    #include "device_audio_amp_I2s_PCM3070.h"
    #include "MAPI_i_iapi_devTable.h"
    
    #include "mapi_mapi_dev.h"#define #mapi_mapi_mapi_ji_ji_dev.h/#define
    
    
    
    
    
    #define #mapi_p_maph/maph.h/p_mapi_pi_ji_ji_ji_ji_v/#dip_v/#dip_jpet.h.h/#define #define #define #dip_v/maph/p_v_v_v_v/pet.h.h/"include.h/maph/"
    
    
    
    
    
    
    
    
    
    #define #define #maph/mapi_mapi_maph/mapi_maph/"include.h/mapi_maph/p_mapi_.h.h.h/ 	
    
    MAX_VOL 100
    
    静态MAPI_U8 I2S_VOL_TABLE [MAX_VOL+1]={/*0-9*/
    
    	0x81, 0X90, 0xA0, 0xAA, 0Xb0, 0Xb8,0Xc3,0Xcd,0Xd4,0Xda,
    /*10-19*/	0Xe0,0Xe5,0Xe8,0xEA,0Xec, 0Xee,0Xef,0XF1,0Xf2,0Xf3,
    /*20-29*/	0xf4,0xf5,0Xf6,0Xf7,0xf8, 0XF9,0XFA,0XFA,0XFb,0XFb,
    /*30--39*/	0xFC,0xFD,0xFD,0xFE,0xFE, 0xFF,0xFF,0x01,0x01,0x02,
    /*40--49*/	0x03,0x04,0x04,0x05,0x06, 0x06,0x07,0x07,0x08,0x08,
    /*50-59*/	0x09,0x0A,0x0A,0x0B,0x0C, 0x0C,0x0D,0x0D,0x0E,0x0E,0x0E,
    /*60--69*/	0x0F,0x10,0X11,0X11,0x12, 0x13,0x14,0X15,0X15,0x16,
    /*70--79*/	0x16,0x17,0x17,0X18,0X18, 0x19,0X1a,0X1a,0x1b,0x1b,
    /*80--89*/	0X1c,0X1c,0X1d,0X1d,0x1E, 0x1E,0x1f,0x1f,0x20,0x20,
    /*90--99*/	0x21,0x21,0X22,0X22,0x23, 0x24,0X24,0X25,0X25,0X26,
    /* 100*/		0x27,
    };
    
    #if support_mic_detect
    静态MAPI_U8 mic_vol_table[MAX_VOL+1]={//
    混音器音量,静音=0x28,最大=0,
    /*0-9*/	0x28,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x19
    ,*/0x26,0x26,0x26,0x26,0x25,0x25,0x25,0x26,0x25,0x25,0x25,0x26,0x25,0x25,0x25,0x25, 	
    /*20--29*/	0x240x240x240x240x240x23.0x23.0x23.0x23.0x23.0x22,
    /*30--39*/	0x22,0x22,0x20x21,0x21,0x21,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
    /0x40,0x40,0x1*/	0x1f,0x1
    	,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x12,
    	0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x1,0x12,0x1,0x12,0x12,0x12,0x1,0x12,0x1,0x
    /*70--79*/	0x11,0x10,0x10,0x0F,0x0F,0x0E,0x0E,0x0D,0x0D,0x0C,
    /*80--89*/0x0B,0x0B,0x0A,0x0A,0x0A,0x09,0x08,0x08,0x07,0x06,0x06,0x06,06,06,/*/0x2,05,01,01,01,01,01,01,01,01,01,01,01,09,*/0x1,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01, 	
    	
    		
    
    #endif
    //------------------
    ///构造函数
    ///@param None
    ///@返回None
    //------------------
    device_audio_amp_I2S_PCM3070::device_audio_amp_I2S_PCM3070 (void)
    {
    bInited = false;
    }//------------------
    
    
    ///de-constructor
    ///@param None
    ///@return None
    //--------------------------------------------------
    device_audio_amp_I2S_PCM3070:~device_audio_amp_I2S_PCM3070 (void)
    {
    return;
    }
    
    #define InitTblLength 1024
    MAPI_BOOL Get_AmpInitTbl (MAPI_U8 *reg, const char *path)
    {
    MAPI_S16 FD =0;
    MAPI_BOOL RET = FALSE;
    	IF (PATH!= NULL)
    {
    			FD = OPEN (PATH,O_RDONLY);
    			IF (FD !=-1)
    			{
    				memset(reg, 0, InitTblLength);
    			IF (READ (FD,(MAPI_U8*)reg, InitTblLength)!=-1)
    				{
    				ret =真;
    				}
    				关闭(FD);
    			}
    }
    Return ret;
    }
    
    MAPI_U8 device_audio_amp_I2S_PCM3070::ReadReg (MAPI_U8 uRegPage, MAPI_U8 uRegAddress, MAPI_U8 *pValu){
    
    	MAPI_U8 u8Data =0;
    	2c_U8 uDataLength =0;
    	MAPI_U8 u8RegAddr =0;
    	MAPI_Regip_I2I2I2I2_Adu; AD_8MAPI2I2I2I2I2_Adu; ADr
    
    	
    	
    
    		
    		= 8MAPI2I2I2I2I2I2I2_Adu; MAP_Adip_Adu_Adu; ADr = 8MAPI2I2 		
    		u8DataLength =1;	
    		IF (iptr->WriteBytes(1),&u8RegAddr,u8DataLength,&u8Data)== MAPI_FALSE)
    		{
    			printf("\n+++++ Tenny:PCM3070 I2C总线写入注册[0x%x]失败++++++ \n", u8RegAddr);	
    			返回MAPI_false;
    		}
    		usleep(2000);
    
    	u8RegAddr = uRegAddress;
    	u8DataLength =1;
    	IF (iptr->ReadBytes(1),&u8RegAddr,u8DataLength,&u8Data)== MAPI_FALSE)
    	{
    		printf("\n+++++ Tenny:PCM3070 I2C总线写入注册[0x%x]失败++++++ \n", u8RegAddr);
    		返回MAPI_false;
    	}//printf("\n++++++++
    	Tenny:读取PCM3070页面[%d]注册[0x%x]为0x%x +++++ \n",uRegPage,uRegAddress,u8Data);
    	usleep (2000);
    	*pValue = u8Data;
    	返回MAPI_TRU;
    }
    
    MAPI_BOOL DEVICE_AMP_I2S_PCM3070::WriteReg (MAPI_U8 uRegPage, MAPI_U8 uRegAddress, AMP_U8 uDataToWrite)
    {
    	MAPI_U8 u8DataREG=0;MAPI_U8MAPI_DataWrite8; AD_MAPI2C_MAPI_AduWrite
    	
    	
    	
    
    	通道= 0; AD_MAPI_8MAPI_8MAPI2C_MAPI2C_MAPI2C_MAPI_ADUTR_ADUTR_AD_AD_8MAPI2EAD_ADUTR:
    	
    	
    		
    				
    		u8DataLength =1;
    		IF (iptr->WriteBytes(1),&u8RegAddr,u8DataLength,&u8DataWrite)== MAPI_false)
    		{
    			printf("\n++++++ Tenny:PCM3070 I2C总线写入注册[0x%x]失败++++++ \n", u8RegAddr);
    			返回MAPI_false;
    		}
    		usleep(2000);
    	
    	u8RegAddr = uRegAddress;
    	u8DataWrite = uDataToWrite;
    	u8DataLength =1;
    	IF (iptr->WriteBytes(1),&u8RegAddr,u8DataLength, &u8DataWrite)== MAPI_FALSE)
    	{
    		printf("\n++++++++ Tenny:PCM3070 I2C总线写入注册[0x%x]失败++++++ \n", u8RegAddr);
    		返回MAPI_false;
    	}
    	usleep(2000);
    	返回MAPI_true;
    }
    
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::WriteMultiReg (MAPI_U8 uRegPage, AMI_U8 uRegAddress, REG_U8 *uDataToWrite)
    {
    	MAPI_U8 u8DataWrite=0;
    	MAPI_U8 u8DataLength =0;
    	MAPI_U8MAPI_GetAdr = 0; I2I2C_MAPI_8MAPI_MAPI_Getip_Adi
    	
    	
    
    	= 8
    	
    	
    	
    	u8DataWrite = uRegPage;		
    	u8DataLength =1;
    	IF (iptr->WriteBytes(1),&u8RegAddr,u8DataLength, &u8DataWrite)== MAPI_FALSE)
    	{
    		printf("\n++++++++ Tenny:PCM3070 I2C总线写入页注册[0x%x]失败++++++ \n", u8DataWrite);
    		返回MAPI_false;
    	}
    	usleep(2000);
    	
    	u8RegAddr = uRegAddress;
    	//u8DataWrite = uDataToWrite;
    	u8DataLength =120;
    	IF (iptr->WriteBytes(1),&u8RegAddr,u8DataLength, uDataToWrite)== MAPI_false)
    	{
    		printf("\n++++++ Tenny:PCM3070 I2C总线写入注册[0x%x]失败++++++ \n", u8RegAddr);
    		返回MAPI_false;
    	}
    	usleep(2000);
    	返回MAPI_true;
    }
    
    MAPI_U8 AmpEQSettingTbl_S[]=
    {
    	0x00,0x04,0x03,
    	0x00,0x05, 0x91,
    	0x00,0x06,0x08,
    	0x00, 0x07,0x00,
    	0x00,0x08,0x00,
    	0x00,0x1b,0x20,	//将音频接口的字长设置为24位PTM_P4
    	0x00,0x0B,0x82,
    	0x00,0x0c, 0x88,
    	0x00,0x0d,0x00,
    	0x00, 0x0E,0x80,
    	0x00,0x74,0x00,
    	0x00,0x44,0x00,
    	0x00,0x34, 0x08,
    	0x00,0x3c,0x00,	// miniDSP_D预设模式:将DAC模式设置为PRB_P1;0x00用于信号处理(编程模式)
    	0x00,0x0F,0x02,
    	0x00,0x10, 0x1c,
    	0x00,0x11,0x04,
    	0x00, 0x41,0x00,
    	0x00,0x42,0x00,
    
    	0x01,0x01,0x08,
    	0x01,0x02, 0x00,	//AVDD LDO先断电
    
    	0x2C,0x01,0x04,
    
    	0xff
    ,};
    
    1F_U8 Ampage44_Data[]=
    {
    	0x00,0x00,0x00,0x00,0x7F,0xFF,0x00,										// 08~
    		~
    		~
    		~0F,0xF8,0x40,0x00,0x80,0x19,0x80,0x19,0x30,
    	0x50,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 	// 40~
    	4F 0x80,0x49,0x19,0x3F,0x99,0x76,0x00,0x7F,0xB6,0xE7,0x00,0xC0,0x46,0x96,0x00,	// 50~
    		~
    		~5F 0x40,0x0A,0xF,0xF 4,0x40,0,0
    
    
    
    
    	
    	,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0 0 0,0,0,0,0 0,0,0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,0,0,0,0 0,0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    	
    	
    	
    	0x00,0x00,0x00,0x00,
    	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00
    	
    
    
    ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 
    
    	
    	
    	
    	
    	
    	0x3e,0xFC,0x9C,0x00,0xB1,0x97,0x00,0x31,0x4E,0x68,0x99,0x00,
    	0xCF,0xB4,0x73,0x00,0x40,0x00,0x00,0x00
    	
    
    
    
    
    			,0x40,0x00,0x00,0x40,0x00,0x40,0x00
    	
    	0x25,
    	0x01,0x0c,0x0a,
    	0x01, 0x0D,0x0a,
    	0x01,0x0E,0x0a,
    	0x01,0x0F,0x0a,
    	0x01,0x09, 0x3F,
    	0x01,0x10,0x08,
    	0x01, 0x11,0x08,
    	0x01,0x12,0x06,
    	0x01,0x13,0x06,
    	0x01,0x18, 0x14,
    	0x01,0x19,0x14,
    
    	0x01, 0x47,0x32,	//将输入通电时间设置为3.1毫秒(对于ADC)
    	0x01,0x7B,0x01	,//将参考充电时间设置为40毫秒
    	
    	0x00,0x3f,0xEA	,//加电DAC,交换R/L通道? 6369是d6828是EA
    	0x00,0x40,0x00,	//取消静音DAC
    
    	0x2C,0x01,0x05,
    	
    	0x01,0x02, 0x21,	//启用主模拟电源控制
    
    	0xff
    ,};
    
    #define LINE_AMP_DEFAULT		0x04//0x0A // 10dB
    #define mixer_AMP_DEFAULT		0x14//0x00 // 0dB
    #define mixer_AMP_MUTE			0xX28 // mute
    
    #define PGA_DEFAULT		0x2D// 0x13以适应AMP功率,但这还不够。 因此,不要在意MIC输入功率。
    
    //下面的初始表用于播放立体声2.0 ,它工作正常。
    MAPI_U8 AmpInitTbl[]=
    {
    	0x00,0x0B,0x81,		// NDAC除法
    	器0x00,0x0c,0x82,		// MDAC除法
    	器0x00,0x0d,0x00,		// DAC的OSR到128,默认
    	0x00,0x0E,0x80,			//默认
    	0x00, 0x1b,0x20,		//将音频接口的字长度设置为24位PTM_P4
    	//0x00,0x3c,0x08		,//将DAC模式设置为PRB_P8
    	0x00,0x34,0x08,		// Bit5-2=0010设置GPIO输入,位1为输入状态
    	0x00,0x3c,0x01,		//将DAC模式设置为PRB
    	0x3f,0x3f,0x3f 		//启动DAC,交换R/L通道? 6369是d6828是EA
    	0x00,0x40,0x00,		//取消静音DAC
    	0x00,0x41,0x00,		// DAC音量-> 0dB
    	0x00,0x42,0x00,
    	
    	0x01,0x01, 0x00,		// AVDD电源,默认
    	值0x01,0x02,0x21, 		//启用主模拟电源控制
    	0x01,0x0a,0x00,		//输入共模
    	0x01,0x0c,0x02,		// DAC至耳机的输出 注:HP
    	0x01,0x0d,0x02,
    	0x01, 0x03,0x00,		//将DAC PTM模式设置为PTM_P3/4
    	0x01,0x04,0x00,
    	0x01,0x0E, 0x0A,//0x08,		// DAC (位3)/MA (位1)输出至LineOut
    	0x01,0x0F,0x0a,//0x08,
    	0x01,0x09, 0x3F,		//打开耳机和线路输出驱动器。 0x3c->0x0F,HP
    	0x01,0x10,0x1d,		//取消耳机驱动程序静音,0dB增益,HP
    	0x01,0x11,0x1d,
    	0x01,0x12,LINE_AMP_DEFAULT,		//取消静音LineOut驱动程序,00db增益
    	0x01,0x13,LINE_AMP_DEFAULT,
    	0x01, 0x14,0x25,		//弹出
    	0x01,0x18,Mixer_AMP_MUTE, 		//混音放大器左音量控制,0dB。 0x00为0dB,0x27为-30.1db,0x28--Mute
    	0x01,0x19,Mixer_AMP_MUTE, 		
    	//0x01,0x3b,0x00,		//左PGA音量控制,0dB。 00--5F(0db--47.5dB)。
    	//0x01,0x3c,0x00,		
    
    //用于MIC输入
    	0x01,0x34,0x20,		//将IN1L路由到Left_P,具有20K输入阻抗
    	0x01,0x36,0x80,		//将通用模式路由到Left_M,阻抗为20K
    	0x01,0x37,0x20,		//将IN1R路由到Right_P,输入阻抗为20K
    	,0x80,0x01 		//将公共模式路由到RIGHT _M,阻抗为20K
    	0x01,0x3b,PGA_DEFAULT		,//输入阻抗为20K的0dB寄存器=>通道增益为0dB
    	0x01,0x3c,PGA_DEFAULT,		//输入阻抗为20K的寄存器=>通道增益为0dB
    	0x01,0x47,0x32, 		//将输入开机时间设置为3.1毫秒(对于ADC)
    	0x01,0x7B,0x01		,//将REF充电时间设置为40毫秒
    
    	0xff	
    ,};
    
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::Init (void)
    {
    	MAPI_U8 * Pstr = NULL;
    //	MAPI_U8 DataLength =0;MAPI_Reg_U102_U8
    	;
    	MAPI_U103=8MAPI_U102_Mapi_U8;
    	
    	
    MAPI_BOOL Berr = MAPI_TRUE;
    	IF (bInited)
    		返回MAPI_FALSE;
    
    	printf("****** 放大器初始化启动*********** \n");
    	//===========================================
    	while (initTry--)
    	{if(Reset(MAPI_TRUE)
    		== MAPI_false)
    		{usleep(10*1000);
    		
    		printf("******** PCM3070重置失败*********** \n");
    		Continue
    		;}
    		usleep(10*1000);
    
    		#if 1		//Tstr at 2017.0919万:对于调试EQ,但现在没有声音输出
    		,Pstr = AmpEQSettingTbl_S;
    		Berr = MAPI_TRUE;
    		Do
    		{
    			u8RegPage =*Pstr;
    			u8RegAddr =*(++Pstr);PmpEQSettingTbl_S;Reg
    			
    			,Reg,8 *Pstr)== mapi_false)
    			{
    				printf("\n++++++++ Tenny:PCM3070 I2C总线写入注册[0x%x]失败++++++ \n",u8RegAddr);
    				Berr = MAPI_FALSE;
    				break;
    			}			
    			Pstr++
    		;} while (*Pstr != 0xff);
    
    		WriteMultiReg (0x2C, 0x08,&AmpEQ Page44_Data[0]);
    		WriteMultiReg (0x2d, 0x08,&AmpEQ_Page45_Data[0]);
    		WriteMultiReg (0x2e,0x08,&AmpEQ_Page46_Data[0]);
    
    		Pstr = AmpEQSettingTbl_E;
    		Berr = MAPI_TRUE;
    		DO
    		{
    			u8RegPage =*Pstr;
    			u8RegAddr =*(++Pstr);
    			Pstr++;
    			IF (WriteReg (u8RegPage,u8RegAddr, *Pstr)== mapi_false)
    			{
    				printf("\n++++++++ Tenny:PCM3070 I2C总线写入注册[0x%x]失败++++++ \n",u8RegAddr);
    				Berr = MAPI_FALSE;
    				break;
    			}			
    			Pstr++
    		;} while (*Pstr != 0xff);
    		#else //以下配置将输出Stereo 2.0
    		/*if(Get_AmpInitTB,MAPI_syscfg_fet::GetAMPBinPath().c_str())){
    		
    			Pstr = AmpInitBin;
    			printf("****** 从配置路径*********.获得AmpInitTable \n");
    		}
    		else */
    		{
    			Pstr = AmpInitTbl;
    		}
    		
    		Berr = MAPI_TRUE;
    		DO
    		{
    			u8RegPage =*Pstr;
    			u8RegAddr =*(++Pstr);
    			Pstr++;
    			IF (WriteReg (u8RegPage,u8RegAddr, *Pstr)== mapi_false)
    			{
    				printf("\n++++++++ Tenny:PCM3070 I2C总线写入注册[0x%x]失败++++++ \n",u8RegAddr);
    				Berr = MAPI_FALSE;
    				break;
    			}			
    			Pstr++
    		;} 同时(*Pstr != 0xff);
    		
    		#endif
    		(Berr == MAPI_FALSE)
    		{
    		printf("******** PCM3070初始化失败*********** \n");
    		Continue;
    		}	
    		else
    		{
    		printf("******** PCM3070初始化成功*********** \n");
    		}
    		usleep(200 * 1000);
    		printf("******** 放大器初始化完成*********** \n");
    	MAPI_GPIO *gptr = MAPI_GPIO:GetGPIO _Dev(Mute);gptr->setoff();
    //		MAPI_GPIO *gptr1 = MAPI_GPIO:}GetGPIO开发(EarMute PhoneMute );gptr1->setoff();
    			
    		bInited = true;
    		返回MAPI_true;
    	
    	返回MAPI_false;}返回MAPI_false
    
    
    //------------------
    ///完成此音频放大器
    ///@参数无
    ///@返回 b输出:mapI_true或mapI_false
    //------------------
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::finalize (void)
    {
    printf("******** 放大器_完成********** \n");
    静音(true);
    usleep(1000);
    b INited = FALSE;
    返回MAPI_TRUE;
    }//------------------
    
    
    ///重置此音频放大器
    ///@param bEnable 	b in:true用于enable;false用于disable
    ///@return b输出:mapI_true或mapI_false
    //------------------
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::Reset (MAPI_BOOL bEnable)
    {
    返回WriteReg (I2C_REG_PAGE_0, I2C_REG_P0_01, 0x01);
    }//------------------
    
    
    ///将此音频放大器静音
    ///@param bMute		\b输入:对于静音为true;对于取消静音为false
    //@返回			/b输出:mapI_true或mapI_false
    //------------------
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::静音(MAPI_BOOL bMute)
    {
    // WriteReg (I2C_REG_PAGE_1,LINE_VOL_REG,0x40);
    // WriteReg (I2C_REG_PAGE_1,LINE_VOL_REG+1,0x40);
    
    IF (bMute == true)
    	{
    		WriteReg (I2C_REG_PAGE_1,LINE_VOL_REG,0x40);
    		WriteReg (I2C_REG_PAGE_1,LINE_VOL_REG+1, 0x40);
    	}
    	
    	返回MAPI_TRUE;
    }
    
    
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::AmpSwapOutputChannel(MAPI_BOOL bEnable)
    {//
    MAPI_BOOL RET = ExtendCmd (CMD_LR_SWAP,(MAPI_U32)bEnable, NULL, NULL);
    返回0;
    }
    
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::AmpsetSubWooderVolume(MAPI_BOOL bMute,MAPI_U8 u8Val)
    {
    MAPI_BOOL RET = MAPI_TRUE;
    Return ret;
    }
    
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::I2sSetVolume(MAPI_U8 u8Vol)
    {
    WriteReg (I2C_REG_PAGE_0,DAC_VOL_REG,I2S_vol_table[u8Vol]);
    WriteReg (I2C_REG_PAGE_0,DAC_VOL_REG+1,I2S_vol_table[u8Vol]);
    // printf ("I2sSetVolume,Lipper\n");
    返回MAPI_TRUE;
    }
    
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070::MicSetVolume(MAPI_U8 u8Vol)
    {//	
    混音器音量可调整。 0-max,40--mute
    #if support_mic_detect
    	MAPI输入源类型enCurrentInputType;
    enCurrentInputType = MSRv_Control::getInstance()->GetCurrentInputSource();
    	IF ((enCurrentInputType == MAPI_input_source_VGA)&&(MSrv_Control::getInstance()->GetMSrvSystemDatabase()->GetVGAExtend())=={VGA3_Extend))
    	
    	u8Vol =0;
    	}
    MAPI_U16 mixRate = MSrv_Control::getInstance()->GetMSrvSystemDatabase()->GetMixAudioRate();
    	IF((MixRate&0x3000)=0x3000)
    	{3000{
    		WriteReg (I2C_REG_PAGE_1,Mixer_VOL_REG,mic_vol_table[u8Vol]);
    	WriteReg (I2C_REG_PAGE_1,Mixer_VOL_REG+1,mic_vol_table[u8Vol]);	
    	}
    	//printf ("MisSetVolume=%d\n",u8Vol);
    #endif 	
    返回MAPI_TRUE;
    }
    
    MAPI_BOOL DEVICE_AUDIO_AM_I2S_PCM3070:::MicEnable(MAPI_BOOL ENable, MAPI_U32 vol)
    {	
    #if support_MIC_detect
    	MAPI_U8 PGA_VAL =启用?(PGA_DEFAULT):(0x80|PGA_DEFAULT);
    	WriteReg (I2C_REG_PAGE_1,PGA_VOL_REG,PGA_VAL);
    WriteReg (I2C_REG_PAGE_1,PGA_VOL_REG+1,PGA_Val);
    	IF (启用)
    	{
    		WriteReg (I2C_REG_PAGE_1,Mixer_VOL_REG, MIC_vol_table[vol]);
    	WriteReg (I2C_REG_PAGE_1,Mixer_VOL_REG+1,mic_vol_table[vol]);		
    	}
    	其他
    	{
    		WriteReg (I2C_REG_PAGE_1,Mixer_VOL_REG,mic_vol_table[0]);
    	WriteReg (I2C_REG_PAGE_1,Mixer_VOL_REG+1,mic_vol_table[0]);	
    	}
    	
    #endif 	
    返回MAPI_TRUE;
    }