工具/软件:Code Composer Studio
您好!
根据下面所附的 TI 示例、我正在尝试在 c5545booster pack 上配置我的 aic3206编解码器以实现高功率高性能输出模式。 还添加了我的代码。 运行回送时、我根本听不到任何输出。 我希望以8kHz 的采样率运行
/*
版权所有(c) 2016、德州仪器(TI)公司
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在
*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经
事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、
不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
*
*/
/*! \file audio_line_in_loopback_test.c
*
\brief 函数,用于为音频
配置音频编解码器稳压器* 线路处于环回操作中。
*
*/
#include "audio_line_in_loopback_test.h"
#include "audio_common.h"
#include "../../../build/boostC5545/audio_line_in_loopback_test/coeff
#include
#include
#include
extern test_status AIC3206_LOOP_linein (void *testArgs);
/**
*
\brief 此函数可配置
*的所有音频编解码器寄存器 line in loopback test
*
*\param testArgs [in] Test Args
*
\return
*\n TEST_PASS -测试通过
*\n test_fail -测试失败
*
//
test_status AIC3206_loop_linein (void * testArgs)
{
int16秒、msec;
int16样本;
int16 data1、data2;
int16 output1、output2;
/*配置 AIC3206 */
AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
AIC3206_WRITE( 1, 0x01 );//重置编解码器
C55x_DELAY_msec (1);//在复位后等待1ms
AIC3206_WRITE( 0, 0x01 );//选择第1页
AIC3206_WRITE( 1, 0x0a );//禁用从 DVDD 生成粗 AVDD
AIC3206_WRITE( 2, 0x00 );//启用模拟块,使用 LDO 电源
AIC3206_WRITE( 1230x05 );//强制参考在40ms 内加电
C55X_DELAY_msec (40);//等待至少40ms
AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
/* PLL 和时钟配置和上电*/
AIC3206_WRITE( 27, 0x0d );// BCLK 和 WCLK 被设置为 o/p;AIC3206 (主器件)
AIC3206_WRITE( 28, 0x00 );//数据设置= 0
AIC3206_WRITE (4、0x03);// PLL 设置:PLLCLK <- MCLK、CODE_CLKIN <-PLL CLK
AIC3206_WRITE( 6, 0x07 );// PLL 设置:J=7
AIC3206_WRITE( 7, 0x06 );// PLL 设置:hi_BYTE (D=1680)
AIC3206_WRITE (8、0x90);// PLL 设置:LO_BYTE (D=1680)
AIC3206_WRITE( 30, b0 );//仅在主控模式下,每帧32位时钟
// BCLK=DAC_CLK/N =(12288000/8)= 1.536MHz = 32*FS
AIC3206_WRITE( 5, 0x91 );// PLL 设置:加电 PLL,P=1和 R=1
C55x_DELAY_msec (1);//等待 PLL 出现
AIC3206_WRITE( 13, 0x00 );//对于 DOSR = 128十进制或0x0080 DAC 过采样,为 HI_Byte (DOSR)
AIC3206_WRITE( 14, 0x80 );// LO_Byte (DOSR) for DOSR=128 thetal 或0x0080
AIC3206_WRITE( 20, 0x80 );// AOSR = 128十进制或0x0080 AoSR =抽取滤波器1至6
AIC3206_WRITE( 11, 0x87 );//加电 NDAC 并将 NDAC 值设置为7.
AIC3206_WRITE( 12, 0x83 );//为 MDAC 加电并将 MDAC 值设置为12
AIC3206_WRITE( 18, 0x87 );//加电 NADC 并将 NADC 值设置为7.
AIC3206_WRITE( 19, 0x8C );//加电 mAdc 并将 mAdc 值设置为12
AIC3206_WRITE( 60, 0x08 );
AIC3206_WRITE( 61,0x01 );
AIC3206_WRITE( 63, 0xd6 );
/* DAC 布线和上电*/
AIC3206_WRITE( 0, 0x01 );//选择第1页
AIC3206_WRITE( 12, 0x08 );//路由至 HPL 的 LDAC AFIR
AIC3206_WRITE( 13, 0x08 );// RDAC AFIR 路由到 HPR
AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
AIC3206_WRITE( 64, 0x02 );//左容积=右容积
AIC3206_WRITE( 65, 0x20 );//左 DAC 增益至0dB VOL;右轨左
AIC3206_WRITE( 63, 0xd4 );//向左、右上电数据路径并设置通道
AIC3206_WRITE( 0, 0x01 );//选择第1页
AIC3206_WRITE( 16, 0x00 );//取消 HPL 静音,0dB 增益
AIC3206_WRITE( 17, 0x00 );//取消 HPR 静音,0dB 增益
AIC3206_WRITE( 9, 0x30 );//加电 HPL、HPR
AIC3206_WRITE( 124, 0x06 );
AIC3206_WRITE( 61,0x00 );
AIC3206_WRITE( 71,0x32 );
AIC3206_WRITE(123, 0x05);
AIC3206_WRITE(125, 0x12);
C55x_DELAY_msec (1); //等待1毫秒
/* ADC 路由和上电*/
AIC3206_WRITE( 0, 0x01 );//选择第1页
AIC3206_WRITE( 52, 0x40 );//立体声1插孔
//将 IN2_L 更改为 LADC_P、阻值为40千欧
AIC3206_WRITE (55、0x40);// IN2_R 至 RADC_P 至40kohmm
AIC3206_WRITE (54、0x03);// CM_1 (共模)通过40千欧连接到 LADC_M
AIC3206_WRITE( 57, 0x03 );// CM_1 (共模)到 RADC_M (40千欧)
//AIC3206_WRITE( 59, 0x00 );// MIC_PGA_L 取消静音
// AIC3206_WRITE( 60, 0x00 );// MIC_PGA_R 取消静音
//AIC3206_write(51、0x00 ); // SetMICBIAS
AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
AIC3206_WRITE( 81, 0xc0 );//向左和右上电 ADC
AIC3206_WRITE( 82, 0x00 );//取消左右 ADC 的静音
AIC3206_WRITE (83、0x00);//将左侧和右侧 ADC
AIC3206_WRITE (84、0x00)取消静音;//将左侧和右侧 ADC 取消静音
//AIC3206_WRITE (86、0x80);// L-AGC 配置
//AIC3206_WRITE (94、0x80);// R-AGC 配置
C55x_DELAY_msec (1); //等待1毫秒
/*初始化 I2S */
initialize_I2S_interface();
GPIO_interrupt_initiation();
/*循环缓冲器 FIR 实现*/
int AUDIO_FRAME_LEN=80000;
Int32 OutFrame [8000];
Int32 OutCircBuf[8000];
#define FS 8000
int N=135;
int i;
int index1=0;
int index2=N;
int16 x[2*135];
int16 z[2*135];
long y1new、y2new;
int k=0;
I2S_writeLeft (0);
I2S_writeRight (0);
/* for (n=0;n >15;
output2=y2new>>15;
如果(A ",="" "w");="" fwrite(buf,="" 2,="" 1,="" pipeout);="" fclose(pipeout);*="" break;="" 80000,="" for="" (i="0;" iPCGCR1 = 0x0000;
CSL_SYSCTRL_REGS->PCGCR2 = 0x0000;
RetVal = SYS_setEBSR (CSL_EBSR_FIELD_PPMODE、
CSL_EBSR_PPMODE_1);//为 I2S2
返回值配置并行端口|= SYS_setEBSR (CSL_EBSR_FIELD_SP1MODE、
CSL_EBSR_SP1MODE_1);//串行端口模式1 (I2S1和 GP[11:10])。
RetVal = initialize_i2c_interface (testArgs);
if (RetVal!= 0)
{
C55x_msgWrite ("I2C initialization failed\n"r);
return (test_FAIL);
}
C55x_msgWrite ("测试从线路中接收音频样本并输出相同的内容\n"r")
"在耳机端口\n\n\r\n\r\n");
C55x_msgWrite ("将耳机连接到 BoosterPack\n\r\n\r\n");
C55x_msgWrite ("在 BoosterPack 的音频端口之间连接一条线路输入电缆\n"\}
"Test PC and line in of the BoosterPack\n\n\r");
C55x_msgWrite ("播放测试 PC 中的任何音频文件并检查\n"\}
"来自连接到 BoosterPack 的耳机的音频\n\r\n");
RetVal = AIC3206_LOOP_LING (testArgs);
if (RetVal!= 0)
{
return (test_FAIL);
}
#ifdef use_user_input
C55x_msgWrite ("如果中的音频流为 n、请按 Y/y)"
"在连接到耳机端口的耳机上观察到、\n\n"\}
"任何其他故障密钥:\n\n");
C55x_msgRead (&c、1);
if (((c!='y')&&(c!='Y'))
{
C55x_msgWrite ("音频回送从线路输入到耳机端口\n"\}
"不正确\n");
返回(test_fail);
}
#endif
return (test_pass);
}
//**
*\brief 此函数在环回测试中执行音频线路
*
\param testArgs [in]测试参数
*
\return
*\n TEST_PASS -测试通过
*\n test_fail-Test failed
*
//
test_status audioLineInLoopbackTest (void * testArgs)
{
test_status testStatus;
C55x_msgWrite ("\n ********* \n\n");
C55x_msgWrite (" 回送测试中的音频线路\n");
C55x_msgWrite ("********* \n\n");
testStatus = run_audio_line_in_loopback _test (testArgs);
if (testStatus!= test_pass)
{
C55x_msgWrite ("\n 环回测试中的音频线路失败!\n\n");
返回(test_fail);
}
其他
{
C55x_msgWrite ("\n 环回测试中的音频线路通过!\n\n");
}
C55x_msgWrite ("\n 环回测试中的音频线路已完成!!\n\n");
返回 testStatus;
}
e2e.ti.com/.../8322.Playback_2D00_Recording_2800_8KHz_2900_.cfg
注意:-不要遵循我的代码中的注释、它们是默认注释、我没有根据我的设置进行更改。