Thread 中讨论的其他器件:TMS320C5535、 TMS320C5505
您好
我正在为音频编解码器使用 TMS320C5535电路板、当我运行代码时、它工作正常、但输出有蜂鸣音、并且遇到很大的噪音声音
这些是我的 AIC3204 Init.c 文件、
/ /
/**/
/*文件名*/
/* aic3204_init.c */
/**/
/*描述*/
/* AIC3204编解码器的初始化。 */
/**/
/*为线路输入设置编解码器。 */
/*使用48000Hz 的采样频率。 */
/*注意:"aic3204.h"需要在"usbstk5515.h"后加上*/
/**/
/*修订版本*/
/*修订版本:1.00 */
/*作者: Richard Sikora */
/*------------------ */
/**/
/*历史记录*/
/**/
/*修订版本1.00 */
/* 2009年12月20日。 由德州仪器的 Richard Sikora 制作*。
/*代码。 USB 板上的晶体已更改*/
/*来自于先前的发行版,因此某些寄存器*/
/*以下值也需要修改。 */
/**/
/ /
/*
*
*版权所有(C) 2010德州仪器(TI)公司- http://www.ti.com/
*
*
*以源代码和二进制形式重新分发和使用,有或没有
*修改,在以下条件允许的条件下
*满足:
*
*源代码的重新分发必须保留以上版权
*请注意,本条件清单和以下免责声明。
*
*二进制形式的再分发必须复制上述版权
*通知,本条件清单和下述免责声明在
*文档和/或其他材料随附
*分布。
*
*德州仪器公司名称或公司名称
*其贡献者可用于认可或推广派生的产品
*从本软件未经事先书面许可。
*
*本软件由版权持有者和贡献者提供
"按现状"和"按可得到"的基础提供。
本站明确声明不作出任何种类的所有明示或暗示的保证。
*不考虑特定目的。 在任何情况下、版权均不得
*所有者或贡献者对任何直接的、间接的、偶然的、
*特殊、示例性或后果性损害(包括但不包括
*仅限于采购替代商品或服务;不能使用,
*数据,或利润;或业务中断)然而造成和任何
*责任理论,无论是在合同,严格的责任,或侵权
*(包括疏忽或其他)以任何方式产生的使用
*本软件,即使被告知此类损坏的可能性。
*
*/
#include "usbstk5515.h"
#include "aic3204.h"
#include "stdio.h"// for printf();
/*------------------ *
**
* AIC3204初始化。 *
*初始化寄存器和 I2S *
**
*------------------------------------------------------- */
/*设置:线路输入。 Fs = 48000Hz */
void aic3204_init (void)
{
/*配置串行总线*/
// SYS_EXBUSSEL |= 0x1000;//为 I2S0配置串行总线0
SYS_EXBUSSEL = 0x1000;
/*配置 AIC3204 */
/* AIC3204_rset (0、0);//选择 PAGE 0
AIC3204_rset (1、1);//重置编解码器
AIC3204_rset (0、1);//指向第1页
AIC3204_rset (1、8);//禁止从 DVDD 生成粗略的 AVDD
AIC3204_rset (2、1);//启用模拟块,使用 LDO 电源
AIC3204_rset (0、0);*/
/* PLL 和时钟配置及上电*/
/* AIC3204_rset (27、0x1d);// BCLK 和 WCLK 设置为 o/p to AIC3204 (Master)
AIC3204_rset (28、0x00);//数据 ofset = 0
AIC3204_rset (4、3);// PLL 设置:PLLCLK <- MCLK、CODEC_CLKIN <-PLL CLK
AIC3204_rset (6、8);// PLL 设置:j=7
AIC3204_rset (7、15);// PLL 设置:hi_BYTE (D)
AIC3204_rset (8、0xdc);// PLL 设置:Lo_BYTE (D)
AIC3204_rset (30、0x88);//仅适用于主模式下每帧32位时钟
// BCLK=DAC_CLK/N =(12288000/8)= 1.536MHz = 32*FS
AIC3204_rset (5、0x91);//PLL 设置:为 PLL 上电、P=1和 R=1
AIC3204_rset (13、0);// DOSR (DOSR)= 128十进制或0x0080 Hi_Byte 过采样
AIC3204_rset (14、0x80);// DOSR = 128十进制或0x0080对应的 Lo_Byte (DOSR)
AIC3204_rset (20、0x80);// AOSR (对于 AOSR = 128十进制)或0x0080 (对于抽取滤波器1至6)
AIC3204_rset (11、0x82);//为 NDAC 上电并将 NDAC 值设置为2
AIC3204_rset (12、0x87);//为 MDAC 加电并将 MDAC 值设置为7
AIC3204_rset (18、0x87);//为 NADC 加电并将 NADC 值设置为7
AIC3204_rset (19、0x82);//为 mAdc 加电并将 mAdc 值设置为2*/
/* DAC 路由和上电*/
/* AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (0x0c、8);//将 LDAC AFIR 路由到 HPL
AIC3204_rset (0x0d、8);// RDAC AFIR 路由至 HPR
AIC3204_rset (0、0);//选择 PAGE 0
AIC3204_rset (64、2);//左 vol=right vol
AIC3204_rset (65、0);//左侧 DAC 增益设置为0dB VOL;右侧轨道左侧
AIC3204_rset (63、0xd4);//为左右数据路径加电并设置通道
AIC3204_rset (0、1);//选择 PAGE 1
AIC3204_rset (0x10、0x00);//使 HPL 取消静音,10dB 增益
AIC3204_rset (0x11、0x00);//使 HPR 取消静音,10dB 增益
AIC3204_rset (9、0x30);//加电 HPL、HPR
AIC3204_rset (0、0);//选择 PAGE 0
USBSTK5515_WAIT(100 );// WAIT*/
/* ADC 路由和上电*/
// AIC3204_rset (0、1);//选择第1页
// AIC3204_rset (51、0x48);//为 MICBIAS 加电
// LDOIN (0x48);//mm 添加麦克风偏置
/* AIC3204_rset (0x34、0x30);//立体声1插孔
// IN2_L 通过40千欧姆连接至 LADC_P
AIC3204_rset (0x37、0x30);// in2_R 至 RADC_P (通过40kohmm)
AIC3204_rset (0x36、3);// CM_1 (共模)通过40千欧姆连接到 LADC_M
AIC3204_rset (0x39、0xc0);// CM_1 (共模)通过40千欧姆连接到 RADC_M
// AIC3204_rset (0x3b,0);// MIC_PGA_L 取消静音
// AIC3204_rset (0x3c、0);// MIC_PGA_R unoff
AIC3204_rset (59、0x3c);//使左 MICPGA 取消静音、增益= 30dB
AIC3204_rset (60、0x3c);//使右侧 MICPGA 取消静音、增益= 30dB
AIC3204_rset (0、0);//选择 PAGE 0
AIC3204_rset (0x51、0xc0);//为左右 ADC 加电
AIC3204_rset (0x52、0);//使左右 ADC 取消静音
AIC3204_rset (0、0);
USBSTK5515_WAIT (100);//等待*/
AIC3204_rset (0、0x00);//选择 PAGE 0
AIC3204_rset (1、0x01);//重置编解码器
USBSTK5515_WAIT (100);//复位后等待1ms
AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (1、0x08);//禁止从 DVDD 生成粗略的 AVDD
AIC3204_rset (2、0x01);//启用模拟块,使用 LDO 电源
AIC3204_rset (123、0x05);//强制基准在40ms 内上电
USBSTK5515_WAIT (100);//等待至少40ms
AIC3204_rset (0、0x00);//选择 PAGE 0
/* PLL 和时钟配置及上电*/
AIC3204_rset (27、0x0d);
AIC3204_rset (27、0x3D);// BCLK 和 WCLK 设置为 o/p;AIC3204 (Master)
AIC3204_rset (28、0x00);//数据 ofset = 0
AIC3204_rset (4、0x03);// PLL 设置:PLLCLK <- MCLK、CODEC_CLKIN <-PLL CLK
AIC3204_rset (6、0x07);// PLL 设置:j=7
AIC3204_rset (7、0x06);// PLL 设置:hi_BYTE (D=1680)
AIC3204_rset (8、0x90);// PLL 设置:Lo_BYTE (D=1680)
AIC3204_rset (30、0x88);//仅适用于主模式下每帧32位时钟
// BCLK=DAC_CLK/N =(12288000/8)= 1.536MHz = 32*FS
AIC3204_rset (5、0x91);// PLL 设置:为 PLL 上电,P=1和 R=1
USBSTK5515_WAIT (100);//等待 PLL 出现
AIC3204_rset (13、0x00);// DOSR (DOSR)= 128十进制或0x0080 Hi_Byte 过采样
AIC3204_rset (14、0x80);// DOSR = 128十进制或0x0080对应的 Lo_Byte (DOSR)
AIC3204_rset (20、0x80);// AOSR (对于 AOSR = 128十进制)或0x0080 (对于抽取滤波器1至6)
AIC3204_rset (11、0x82);//为 NDAC 上电并将 NDAC 值设置为2
AIC3204_rset (12、0x87);//为 MDAC 加电并将 MDAC 值设置为7
AIC3204_rset (18、0x87);//为 NADC 加电并将 NADC 值设置为7
AIC3204_rset (19、0x82);//为 mAdc 加电并将 mAdc 值设置为2
/* DAC 路由和上电*/
AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (12、0x08);//将 LDAC AFIR 路由到 HPL
AIC3204_rset (13、0x08);// RDAC AFIR 路由至 HPR
AIC3204_rset (0、0x00);//选择 PAGE 0
AIC3204_rset (64、0x02);//左 vol=right vol
AIC3204_rset (65、0x00);//左侧 DAC 增益设置为0dB VOL;右侧轨道左侧
AIC3204_rset (63、0xd4);//为左右数据路径加电并设置通道
AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (16、0x00);//使 HPL 取消静音,0dB 增益
AIC3204_rset (17、0x00);//使 HPR 取消静音,0dB 增益
AIC3204_rset (9、0x30);//加电 HPL、HPR
USBSTK5515_WAIT (100);//等待
/* ADC 路由和上电*/
AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (51、0x48);//为 MICBIAS 加电
AIC3204_rset (52、0x30);//立体声1插孔
// IN2_L 通过40千欧姆连接至 LADC_P
AIC3204_rset (55、0x30);// in2_R 至 RADC_P (通过40kohmm)
AIC3204_rset (54、0x03);// CM_1 (共模)通过40千欧姆连接到 LADC_M
AIC3204_rset (57、0xc0);// CM_1 (共模)通过40千欧姆连接到 RADC_M
// AIC3204_rset (59, 0x00 );// MIC_PGA_L 取消静音
//AIC3204_rset (60、0x00);// MIC_PGA_R 取消静音
// AIC3204_rset (59、0x3c);//使左 MICPGA 取消静音,增益= 30dB
// AIC3204_rset (60、0x3c);
AIC3204_rset (59、60);
AIC3204_rset (60、60);//使右侧 MICPGA 取消静音、增益= 30dB
AIC3204_rset (82、0x52);
AIC3204_rset (92、0x5c);
AIC3204_rset (0、0x00);//选择 PAGE 0
AIC3204_rset (81、0xc0);//为左右 ADC 加电
// AIC3204_rset (82、0x00);//使左右 ADC 取消静音
AIC3204_rset (0、0x00);//选择 PAGE 0
USBSTK5515_WAIT (100);//等待
/* I2S 设置*/
I2C2_SRGR = 0x0;
I2C2_CR = 0x8010;// 16位字、从、启用 I2C
I2C2_ICMR = 0x3f;//启用中断
}
/*------------------ *
**
*以 dB 为单位的 AIC3204采样频率和增益的初始化。 *
*初始化寄存器和 I2S *
**
*------------------------------------------------------- */
unsigned long set_sampling_frequency_and_gain (unsigned long SamplingFrequency、unsigned int ADCgain)
{
无符号 int PLLPR = 0x91;//默认为48000Hz
无符号整型增益;
无符号长整型输出;
如果(ADCgain >= 48)
{
增益= 95;//将增益限制为47.5dB
ADCgain = 48;//使用 printf ()进行显示
}
否则
{
GAIN =(ADCgain << 1);//将1dB 步长转换为0.5dB 步长
}
开关(采样频率)
{
案例48000:
PLLPR = 0x91;// 1001 0001b。 PLL 打开。 P = 1、R = 1。
printf ("采样频率48000 Hz 增益=%2d dB\n"、ADCgain);
产出= 48000;
中断;
案例24000:
PLLPR = 0xA1;// 1010 0001b。 PLL 打开。 P = 2、R = 1。
printf ("采样频率24000 Hz 增益=%2d dB\n"、ADCgain);
产出= 24000;
中断;
案例16000:
PLLPR = 0xB1;// 1011 0001b。 PLL 打开。 P = 3、R = 1。
printf ("采样频率16000 Hz 增益=%2d dB\n"、ADCgain);
产出= 16000;
中断;
案例12000:
PLLPR = 0xC1;//1100 0001b。 PLL 打开。 P = 4、R = 1。
printf ("采样频率12000Hz 增益=%2d dB\n"、ADCgain);
产出= 12000;
中断;
案例9600:
PLLPR = 0xD1;//1101 0001b。 PLL 打开。 P = 5、R = 1。
printf ("采样频率9600 Hz 增益=%2d dB\n"、ADCgain);
产出= 9600;
中断;
案例8000:
PLLPR = 0xE1;//1110 0001b。 PLL 打开。 P = 6、R = 1。
printf ("采样频率8000Hz 增益=%2d dB\n"、ADCgain);
输出= 8000;
中断;
案例6857:
PLLPR = 0xF1;//1111 0001b。 PLL 打开。 P = 7、R = 1。
printf ("采样频率6857Hz 增益=%2d dB\n"、ADCgain);
输出= 6857;
中断;
默认值:
PLLPR = 0x91;// 1001 0001b。 PLL 打开。 P = 1、R = 1。
printf ("无法识别采样频率。 默认为48000Hz 增益=%2d dB\n"ADCgain);
产出= 48000;
中断;
}
/*配置串行总线*/
// SYS_EXBUSSEL |= 0x1000;//为 I2S0配置串行总线0
SYS_EXBUSSEL = 0x1000;
/*配置 AIC3204 */
/* AIC3204_rset (0、0);//选择 PAGE 0
AIC3204_rset (1、1);//重置编解码器
AIC3204_rset (0、1);//指向第1页
AIC3204_rset (1、8);//禁止从 DVDD 生成粗略的 AVDD
AIC3204_rset (2、1);//启用模拟块,使用 LDO 电源
AIC3204_rset (0、0);*/
/* PLL 和时钟配置及上电*/
/* AIC3204_rset (27、0x1d);// BCLK 和 WCLK 设置为 o/p to AIC3204 (Master)
AIC3204_rset (28、0x00);//数据 ofset = 0
AIC3204_rset (4、3);// PLL 设置:PLLCLK <- MCLK、CODEC_CLKIN <-PLL CLK
AIC3204_rset (6、7);// PLL 设置:j=7
AIC3204_rset (7、0x06);// PLL 设置:hi_BYTE (D)
AIC3204_rset (8、0x90);// PLL 设置:Lo_BYTE (D)
AIC3204_rset (30、0x88);//仅适用于主模式下每帧32位时钟
// BCLK=DAC_CLK/N =(12288000/8)= 1.536MHz = 32*FS
AIC3204_rset (5、PLLPR);//PLL 设置:为 PLL 上电、P=1和 R=1
AIC3204_rset (13、0);// DOSR (DOSR)= 128十进制或0x0080 Hi_Byte 过采样
AIC3204_rset (14、0x80);// DOSR = 128十进制或0x0080对应的 Lo_Byte (DOSR)
AIC3204_rset (20、0x80);// AOSR (对于 AOSR = 128十进制)或0x0080 (对于抽取滤波器1至6)
AIC3204_rset (11、0x87);//为 NDAC 上电并将 NDAC 值设置为7
AIC3204_rset (12、0x82);//为 MDAC 加电并将 MDAC 值设置为2
AIC3204_rset (18、0x87);//为 NADC 加电并将 NADC 值设置为7
AIC3204_rset (19、0x82);//为 mAdc 加电并将 mAdc 值设置为2*/
/* DAC 路由和上电*/
/* AIC3204_rset (0、1);//选择第1页
AIC3204_rset (0x0c、8);//将 LDAC AFIR 路由到 HPL
AIC3204_rset (0x0d、8);// RDAC AFIR 路由至 HPR
AIC3204_rset (0、0);//选择 PAGE 0
AIC3204_rset (64、2);//左 vol=right vol
AIC3204_rset (65、0);//左侧 DAC 增益设置为0dB VOL;右侧轨道左侧
AIC3204_rset (63、0xd4);//为左右数据路径加电并设置通道
AIC3204_rset (0、1);//选择 PAGE 1
AIC3204_rset (0x10、10);//使 HPL 取消静音,10dB 增益
AIC3204_rset (0x11、10);//使 HPR 取消静音,10dB 增益
AIC3204_rset (9、0x30);//加电 HPL、HPR
AIC3204_rset (0、0);//选择 PAGE 0
USBSTK5515_WAIT(100 );// WAIT*/
/* ADC 路由和上电*/
// AIC3204_rset (0、1);//选择第1页
//AIC3204_rset (51、0x48);//为 MICBIAS 加电
// LDOIN (0x48);//mm 添加麦克风偏置
/* AIC3204_rset (0x34、0x10);//立体声1插孔
// IN2_L 通过0千欧姆连接至 LADC_P
AIC3204_rset (0x37、0x10);// in2_R 至 RADC_P (通过0kohmm)
AIC3204_rset (0x36、1);// CM_1 (共模)通过0千欧姆连接到 LADC_M
AIC3204_rset (0x39、0x40);// CM_1 (共模)通过0千欧姆连接到 RADC_M
// AIC3204_rset (0x3b,增益);// MIC_PGA_L 取消静音
//AIC3204_rset ( 0x3c , gain );// MIC_PGA_R unoff
AIC3204_rset (59、0x3c);//使左 MICPGA 取消静音、增益= 30dB
AIC3204_rset (60、0x3c);//使右侧 MICPGA 取消静音、增益= 30dB
AIC3204_rset (0、0);//选择 PAGE 0
AIC3204_rset (0x51、0xc0);//为左右 ADC 加电
AIC3204_rset (0x52、0);//使左右 ADC 取消静音
AIC3204_rset (0、0);
USBSTK5515_WAIT (100);//*/
/*配置 AIC3204 */
AIC3204_rset (0、0x00);//选择 PAGE 0
AIC3204_rset (1、0x01);//重置编解码器
USBSTK5515_WAIT (100);//复位后等待1ms
AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (1、0x08);//禁止从 DVDD 生成粗略的 AVDD
AIC3204_rset (2、0x01);//启用模拟块,使用 LDO 电源
AIC3204_rset (123、0x05);//强制基准在40ms 内上电
USBSTK5515_WAIT (100);//等待至少40ms
AIC3204_rset (0、0x00);//选择 PAGE 0
/* PLL 和时钟配置及上电*/
AIC3204_rset (27、0x0d);
AIC3204_rset (27、0x3D);// BCLK 和 WCLK 设置为 o/p;AIC3204 (主器件)
AIC3204_rset (28、0x00);//数据 ofset = 0
AIC3204_rset (4、0x03);// PLL 设置:PLLCLK <- MCLK、CODEC_CLKIN <-PLL CLK
AIC3204_rset (6、0x07);// PLL 设置:j=7
AIC3204_rset (7、0x06);// PLL 设置:hi_BYTE (D=1680)
AIC3204_rset (8、0x90);// PLL 设置:Lo_BYTE (D=1680)
AIC3204_rset (30、0x88);//仅适用于主模式下每帧32位时钟
// BCLK=DAC_CLK/N =(12288000/8)= 1.536MHz = 32*FS
AIC3204_rset (5、PLLPR);// PLL 设置:为 PLL 上电,P=1和 R=1
USBSTK5515_WAIT (100);//等待 PLL 出现
AIC3204_rset (13、0x00);// DOSR (DOSR)= 128十进制或0x0080 Hi_Byte 过采样
AIC3204_rset (14、0x80);// DOSR = 128十进制或0x0080对应的 Lo_Byte (DOSR)
AIC3204_rset (20、0x80);// AOSR (对于 AOSR = 128十进制)或0x0080 (对于抽取滤波器1至6)
AIC3204_rset (11、0x82);//为 NDAC 上电并将 NDAC 值设置为2
AIC3204_rset (12、0x87);//为 MDAC 加电并将 MDAC 值设置为7
AIC3204_rset (18、0x87);//为 NADC 加电并将 NADC 值设置为7
AIC3204_rset (19、0x82);//为 mAdc 加电并将 mAdc 值设置为2
/* DAC 路由和上电*/
AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (12、0x08);//将 LDAC AFIR 路由到 HPL
AIC3204_rset (13、0x08);// RDAC AFIR 路由至 HPR
AIC3204_rset (0、0x00);//选择 PAGE 0
AIC3204_rset (64、0x02);//左 vol=right vol
AIC3204_rset (65、0x00);//左侧 DAC 增益设置为0dB VOL;右侧轨道左侧
AIC3204_rset (63、0xd4);//为左右数据路径加电并设置通道
AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (16、0x00);//使 HPL 取消静音,0dB 增益
AIC3204_rset (17、0x00);//使 HPR 取消静音,0dB 增益
AIC3204_rset (9、0x30);//加电 HPL、HPR
USBSTK5515_WAIT (100);//等待
/* ADC 路由和上电*/
AIC3204_rset (0、0x01);//选择 PAGE 1
AIC3204_rset (51、0x48);//为 MICBIAS 加电
AIC3204_rset (52、0x30);//立体声1插孔
// IN2_L 通过40千欧姆连接至 LADC_P
AIC3204_rset (55、0x10);// in2_R 至 RADC_P (通过40kohmm)
AIC3204_rset (54、0x01);// CM_1 (共模)通过40千欧姆连接到 LADC_M
AIC3204_rset (57、0x40);// CM_1 (共模)通过40千欧姆连接到 RADC_M
// AIC3204_rset (59, 0x00 );// MIC_PGA_L 取消静音
//AIC3204_rset (60、0x00);// MIC_PGA_R 取消静音
AIC3204_rset (59、增益);//使左 MICPGA 取消静音、增益= 30dB
AIC3204_rset (60、增益);//使右侧 MICPGA 取消静音、增益= 30dB
AIC3204_rset (0、0x00);//选择 PAGE 0
AIC3204_rset (82、0x52);
AIC3204_rset (92、0x5c);
AIC3204_rset (81、0xc0);//为左右 ADC 加电
// AIC3204_rset (82、0x00);//使左右 ADC 取消静音
AIC3204_rset (0、0x00);//选择 PAGE 0
USBSTK5515_WAIT (100);//等待
/* I2S 设置*/
I2C2_SRGR = 0x0;
I2C2_CR = 0x8010;// 16位字、从、启用 I2C
I2C2_ICMR = 0x3f;//启用中断
返回(输出);
}
/*------------------ *
**
aic3204_init.c 结束*
**
*------------------------------------------------------- */