欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

中科蓝讯蓝牙: 530X_532X 音量系统调节

程序员文章站 2022-04-25 09:53:37
...

目录

0. 如果没有声音, 可以打印查看 "数字音量" 和 "模拟音量" 是否正常

1. 530X, 532X 常用音量控制模块图

2. EQ模块前级增益 (有用到EQ才有效, 默认EQ或不启用EQ时,此增益为0DB)

3.  数字音量, 可打印DACVOLCON 低16位查看.

4.  模拟音量: 可打印AUANGCON3 低8位查看. (模拟音量表见后面)  

 5. 程序中对音量的总设置函数: bsp_change_volume(bsp_dac.c中). 

6. 如果音量还小, 还可以留意VDDDAC电源配置电压是否正常

7. 模拟音量对应表


0. 如果没有声音, 可以打印查看 "数字音量" 和 "模拟音量" 是否正常

调试过程中, 经常会遇到没有声音的情况, 可以直接打印一下"数字音量"和模拟音量.

 建议在公共处理函数 func_process中增加如下printf_info打印, 1秒打印一次, 查看数字音量和模拟音量是否正常.

 如果数字音量或模拟音量均是最小, 可以尝试调用dac_fade_in函数淡入声音(此函数会自动淡入数字音量和模拟音量).

#define AUANGCON3       SFR_RW (SFR1_BASE + 0x3f*4)
#define DACVOLCON       SFR_RW (SFR1_BASE + 0x11*4)

AT(.text.func.bt)
void printf_info(void)
{
    static u32 ticks = 0;
    if (tick_check_expire(ticks,1000)) {   //1000ms打印一次
        ticks = tick_get();
        printf("--------------->\nDACVOLCON = 0x%X , AUANGCON3 = 0x%X,\n", DACVOLCON&0xFFFF,AUANGCON3&0xFF);
    }
}

AT(.text.func.process)
void func_process(void)
{
    WDT_CLR();
    printf_info();
 ......
} 

 

1. 530X, 532X 常用音量控制模块图

530X/532X声音输出最大值可达到2.8V不失真(峰峰值)

中科蓝讯蓝牙: 530X_532X 音量系统调节

 

2. EQ模块前级增益 (有用到EQ才有效, 默认EQ或不启用EQ时,此增益为0DB)

   在配置工具Equalizer中, 可以设置EQ前级增益, 范围(-24~+12)DB

   当音量小时, 可以提高此增益. 

   曾经遇到有台样机, 音量怎么也调不上去, 最后发现是生成的EQ文件, 前级增益配置太小了.

    中科蓝讯蓝牙: 530X_532X 音量系统调节

 

3.  数字音量, 可打印DACVOLCON 低16位查看.

   最大值为0x7FFF (对应0DB)    //寄存器为  #define DACVOLCON       SFR_RW (SFR1_BASE + 0x11*4)

   程序中是调用dac_set_dvol 函数进行设置数字音量,参数范围(0~0x7FFF)

4.  模拟音量: 可打印AUANGCON3 低8位查看. (模拟音量表见后面)  

   最大值为0x70, 对应+5DB

   寄存器为#define AUANGCON3       SFR_RW (SFR1_BASE + 0x3f*4)

   程序中是调用 dac_set_volume 设置模拟音量, 参数范围(0~59) 分别对应(-54~+5)DB增益

 5. 程序中对音量的总设置函数: bsp_change_volume(bsp_dac.c中). 

      在这个函数中, 可以看到, 按键调音量, 一般有两种做法:

     1) 固定数字音量,  调音量时只调模拟音量.  (SDK默认使用这种做法)

     2) 固定模拟音量, 调音量只调数字音量.(需要打开宏 SYS_ADJ_DIGVOL_EN)

AT(.text.bsp.dac)
void bsp_change_volume(u8 vol)
{
#if !SYS_ADJ_DIGVOL_EN
    ///sys adjust dac analog volume
    u8 anl_vol = 0;
    if (vol <= VOL_MAX) {
        if (vol > 0) {
            anl_vol = dac_avol_table[vol] + sys_cb.anl_gain_offset;
        }
        dac_set_volume(anl_vol);
    }
#else
    ///sys adjust dac digital volume
    u16 dig_vol = 0;
    if (vol <= VOL_MAX) {
        dig_vol = dac_dvol_table[vol];
        dac_set_dvol(dig_vol);
    }
#endif
}

 

6. 如果音量还小, 还可以留意VDDDAC电源配置电压是否正常

vdddac是dac使用的电源, dac输出的峰峰值不会超过电源的幅度.(电源配置成最大3.2时, dac输出峰峰值只能达到最大2.8V不失真)

中科蓝讯蓝牙: 530X_532X 音量系统调节

这里的DAC最大音量和通话最大音量, 最后更改的均是模拟音量.

7. 模拟音量对应表

模拟音量表( AUANGCON3低 8位)  其中N代表负增益, P代表正增益.

#define N_54DB       0x0F        //000 1111

#define N_53DB       0x1F        //001 1111

#define N_52DB       0x2F        //010 1111

#define N_51DB       0x3F        //011 1111

#define N_50DB       0x4F        //100 1111

#define N_49DB       0x5F        //101 1111

#define N_48DB       0x0E        //000 1110

#define N_47DB       0x1E        //001 1110

#define N_46DB       0x2E        //010 1110

#define N_45DB       0x3E        //011 1110

#define N_44DB       0x4E        //100 1110

#define N_43DB       0x5E        //101 1110

#define N_42DB       0x0D        //000 1101

#define N_41DB       0x1D        //001 1101

#define N_40DB       0x2D        //010 1101

#define N_39DB       0x3D        //011 1101

#define N_38DB       0x4D        //100 1101

#define N_37DB       0x5D        //101 1101

#define N_36DB       0x0C        //000 1100

#define N_35DB       0x1C        //001 1100

#define N_34DB       0x2C        //010 1100

#define N_33DB       0x3C        //011 1100

#define N_32DB       0x4C        //100 1100

#define N_31DB       0x5C        //101 1100

#define N_30DB       0x0B        //000 1011

#define N_29DB       0x1B        //001 1011

#define N_28DB       0x2B        //010 1011

#define N_27DB       0x3B        //011 1011

#define N_26DB       0x4B        //100 1011

#define N_25DB       0x5B        //101 1011

#define N_24DB       0x0A        //000 1010

#define N_23DB       0x1A        //001 1010

#define N_22DB       0x2A        //010 1010

#define N_21DB       0x3A        //011 1010

#define N_20DB       0x4A        //100 1010

#define N_19DB       0x5A        //101 1010

#define N_18DB       0x09        //000 1001

#define N_17DB       0x19        //001 1001

#define N_16DB       0x29        //010 1001

#define N_15DB       0x39        //011 1001

#define N_14DB       0x49        //100 1001

#define N_13DB       0x59        //101 1001

#define N_12DB       0x08        //000 1000

#define N_11DB       0x18        //001 1000

#define N_10DB       0x28        //010 1000

#define N_9DB        0x07        //000 0111

#define N_8DB        0x06        //000 0110

#define N_7DB        0x05        //000 0101

#define N_6DB        0x04        //000 0100

#define N_5DB        0x03        //000 0011

#define N_4DB        0x02        //000 0010

#define N_3DB        0x01        //000 0001

#define N_2DB        0x00        //000 0000

#define N_1DB        0x10        //001 0000

#define N_0DB        0x20        //010 0000

#define P_1DB        0x30        //011 0000

#define P_2DB        0x40        //100 0000

#define P_3DB        0x50        //101 0000

#define P_4DB        0x60        //110 0000

#define P_5DB        0x70        //111 0000  

本章完结, thanks.