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.

[参考译文] TLV320AIC3204:TLV320AIC204:输出会连续发出蜂鸣声和大量语音

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

https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1346053/tlv320aic3204-tlv320aic204-output-gives-continuously-beep-sound-and-so-much-of-voice

器件型号:TLV320AIC3204
Thread 中讨论的其他器件:TMS320C5535TMS320C5505

您好  

我正在为音频编解码器使用 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 结束*
**
*------------------------------------------------------- */

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

    您好!

    请在 i2cdump 运行时提供它、以便我们可以检查实际写入器件的内容。

    MCLK 频率是多少?

    此致。

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

    大家好,pdjuandi

    这是我的 I2C 应用代码  

    USBSTKT2C.c:

    *
    * I2C 实现
    *
    */
    #include "usbstk5515_i2c.h"
    #include "usbstk5515_gpio.h"

    静态 int32 i2c_timeout = 0x0fff;

    /*------------------ *
    **
    *_I2C_init()*
    **
    *启用并初始化 I2C 模块*
    * I2C clk 设置为以20KHz 运行*
    **
    *------------------------------------------------------- */
    Int16 USBSTK5515_I2C_init()
    {
    I2C_MDR = 0x0400;//复位 I2C
    I2C_PSC = 15;//配置100MHz 的预分频器
    I2C_CLKL = 25;//将 clk 配置为低电平100kHz
    I2C_CLKH = 25;//将 clk 配置为高电平以达到100kHz

    I2C_MDR = 0x0420;//从复位状态释放;主器件、发送器、7位地址

    返回0;

    /*------------------ *
    **
    *_I2C_Close ()*
    **
    *------------------------------------------------------- */
    Int16 USBSTK5515_I2C_CLOSE()
    {
    I2C_MDR = 0;//复位 I2C
    返回0;

    /*------------------ *
    **
    *_I2C_RESET()*
    **
    *------------------------------------------------------- */
    Int16 USBSTK5515_I2C_RESET()
    {
    USBSTK5515_I2C_CLOSE();
    USBSTK5515_I2C_init ();
    返回0;

    /*------------------ *
    **
    *_I2C_WRITE (i2c_addr、data、len)*
    **
    *主模式下的 I2C 写入*
    **
    * i2c_addr <- I2C 从器件地址*
    * data <- I2C data ptr *
    * len <-写入的字节数*
    **
    *------------------------------------------------------- */
    int16 USBSTK5515_I2C_WRITE (uint16 i2c_addr、uint8* data、uint16 len)
    {
    int16超时、i;

    //I2C_IER = 0x0000;
    I2C_CNT = len;//设置长度
    I2C_SAR = i2c_addr;//设置 I2C 从器件地址
    I2C_MDR = MDR_STT //设置为主写入
    | MDR_TRX
    | MDR_MST
    | MDR_IRS
    | MDR_FREE;

    USBSTK5515_WAIT (100);//短延迟

    for ( i = 0 ; i < len ; i++)
    {
    I2C_DXR = data[i];//写入
    TIMEOUT = 0x510;// I2C_TIMEOUT = 1ms;
    USBSTK5515_GPIO_setOutput (17、1);
    正确
    {
    if ( timeout--<0)
    {
    USBSTK5515_GPIO_setOutput (17、0);
    USBSTK5515_I2C_RESET ();
    返回-1;

    } while ((( I2C_STR & STR_XRDY )=0 );//等待 Tx 就绪

    I2C_MDR |= MDR_STP;//生成停止

    USBSTK5515_waitusec (1000);

    返回0;

    /*------------------ *
    **
    *_I2C_READ (i2c_addr、data、len)*
    **
    *主模式下的 I2C 读取*
    **
    * i2c_addr <- I2C 从器件地址*
    * data <- I2C data ptr *
    * len <-写入的字节数*
    **
    *返回: 0:通过*
    *-1:失败超时*
    **
    *------------------------------------------------------- */
    Int16 USBSTK5515_I2C_READ (uint16 i2c_addr、uint8* data、uint16 len)
    {
    int32超时、i;

    I2C_CNT = len;//设置长度
    I2C_SAR = i2c_addr;//设置 I2C 从器件地址
    I2C_MDR = MDR_STT //设置为主器件读取
    | MDR_MST
    | MDR_IRS
    | MDR_FREE;

    USBSTK5515_WAIT (10);//短延迟

    for ( i = 0 ; i < len ; i++)
    {
    timeout = i2c_timeout;

    //等待 Rx 就绪
    正确
    {
    if ( timeout--<0)
    {
    USBSTK5515_I2C_RESET ();
    返回-1;

    } while (( I2C_STR & STR_RRDY )=0 );//等待 Rx 就绪

    data[i]= I2C_DRR;//读取

    I2C_MDR |= MDR_STP;//生成停止

    USBSTK5515_waitusec (10);
    返回0;

    AIC3204.c:  

    / /
    /**/
    /*文件名*/
    /* aic3204.c */
    /**/
    /*描述*/
    /* TMS320C5505 USB 记忆棒上 aic3204编解码器的设置功能。 */
    /**/
    /*修订版本*/
    /*修订版本:1.00 */
    /*作者: Richard Sikora */
    /*------------------ */
    /**/
    /*历史记录*/
    /**/
    /*修订版本1.00 */
    /* 2009年12月20日。 由 Richard Sikora 根据 Spectrum Digital */制作
    /*代码。 为编解码器读取创建了新函数*/
    /*并写入。 */
    /**/
    / /
    /*
    *
    *版权所有(C) 2010德州仪器(TI)公司- http://www.ti.com/
    *
    *
    *以源代码和二进制形式重新分发和使用,有或没有
    *修改,在以下条件允许的条件下
    *满足:
    *
    *源代码的重新分发必须保留以上版权
    *请注意,本条件清单和以下免责声明。
    *
    *二进制形式的再分发必须复制上述版权
    *通知,本条件清单和下述免责声明在
    *文档和/或其他材料随附
    *分布。
    *
    *德州仪器公司名称或公司名称
    *其贡献者可用于认可或推广派生的产品
    *从本软件未经事先书面许可。
    *
    *本软件由版权持有者和贡献者提供
    "按现状"和"按可得到"的基础提供。
    本站明确声明不作出任何种类的所有明示或暗示的保证。
    *不考虑特定目的。 在任何情况下、版权均不得
    *所有者或贡献者对任何直接的、间接的、偶然的、
    *特殊、示例性或后果性损害(包括但不包括
    *仅限于采购替代商品或服务;不能使用,
    *数据,或利润;或业务中断)然而造成和任何
    *责任理论,无论是在合同,严格的责任,或侵权
    *(包括疏忽或其他)以任何方式产生的使用
    *本软件,即使被告知此类损坏的可能性。
    *
    */

    #include "stdio.h"
    #include "usbstk5515.h"
    #include "aic3204.h"
    #include "usbstk5515_gpio.h"
    #include "usbstk5515_i2c.h"

    int16 counter1;//用于监控实时操作的计数器。
    int16 counter2;

    /*------------------ *
    **
    *_AIC3204_rget (regnum、regval)*
    **
    *返回编解码器寄存器 Regnum 的值*
    **
    *------------------------------------------------------- */
    int16 AIC3204_rget (Uint16 Regnum、Uint16* regval)
    {
    int16 retcode = 0;
    Uint8 cmd[2];

    CMD[0]= Regnum & 0x007F;// 7位器件地址
    CMD[1]= 0;

    retcode |= USBSTK5515_I2C_WRITE (AIC3204_I2C_ADDR、cmd、1);
    retcode |= USBSTK5515_I2C_READ (AIC3204_I2C_ADDR、cmd、1);

    *regval = cmd[0];
    USBSTK5515_WAIT( 10 );
    返回转码;

    /*------------------ *
    **
    *_AIC3204_rset (regnum、regval)*
    **
    *将编解码器寄存器 Regnum 设置为值 regval *
    **
    *------------------------------------------------------- */
    int16 AIC3204_rset (Uint16 regnum、Uint16 regval)
    {
    Uint8 cmd[2];
    CMD[0]= Regnum & 0x007F;// 7位器件地址
    CMD[1]= regval;// 8位寄存器数据

    返回 USBSTK5515_I2C_WRITE (AIC3204_I2C_ADDR、cmd、2);


    /*------------------ *
    **
    * aic3204_enable()*
    **
    *------------------------------------------------------- */

    void aic3204_hardware_init (void)
    {
    // SYS_EXBUSSEL |= 0x0020;//选择 A20/GPIO26作为 GPIO26
    SYS_EXBUSSEL = 0x0020;//选择 A20/GPIO26作为 GPIO26
    USBSTK5515_GPIO_init ();
    USBSTK5515_GPIO_setDirection (GPIO26、GPIO_OUT);
    USBSTK5515_GPIO_setOutput (GPIO26、1);//将 AIC3204芯片从复位中取出
    USBSTK5515_I2C_init ();//初始化 I2C
    USBSTK5515_WAIT (100);//等待

    /*------------------ *
    **
    * aic3204_disable()*
    **
    *------------------------------------------------------- */

    void aic3204_disable (void)
    {
    AIC3204_rset (1、1);//重置编解码器
    USBSTK5515_GPIO_setOutput (GPIO26、0);//将 AIC3204置于复位状态
    I2C2_CR = 0x00;

    /*------------------ *
    **
    * aic3204_codec_read ()*
    **
    *------------------------------------------------------- */

    void aic3204_CODEC_READ (int16* LEFT_INPUT、int16* RIGHT_INPUT)
    {
    Volatile Int16空;

    counter1 = 0;
    printf ("\n\nRead Digital audio Inputs\n");
    /*读取数字音频输入*/
    while (! (I2C2_IR 和 RCVR)
    {
    counter1+;//等待接收中断


    printf ("\n\nAudio Received\n");

    *LEFT_INPUT = I2C2_W0_MSW_R;//读取第一个通道的最高有效位
    虚拟= I2C2_W0_LSW_R;//读取最低有效字(忽略)
    *right_input = I2C2_W1_MSW_R;//读取第二个通道的最高有效字
    虚拟= I2C2_W1_LSW_R;//读取第二个通道的最低有效字(忽略)

    /*------------------ *
    **
    * aic3204_codec_write ()*
    **
    *------------------------------------------------------- */

    void aic3204_CODEC_WRITE (int16 left_output、int16 right_output)
    {
    counter2 = 0;

    while (! (I2S2_IR 和 XmitR)
    {
    counter2++;//等待发送中断

    I2C2_W0_MSW_W = LEFT_OUTPUT;//左输出
    I2C2_W0_LSW_W = 0;
    I2C2_W1_MSW_W = RIGHT_OUTPUT;//右侧输出
    I2C2_W1_LSW_W = 0;

    /*------------------ *
    **
    * aic3204.c 结尾*
    **
    *------------------------------------------------------- */

    我不熟悉 TMS20C5535 eZdsp 电路板  

    我不知道它在何处使用 MLCK 频率、但这是我的 PLL。 C 语言文件  

    /*===================================================================================
    *版权所有(c) Texas Instruments Inc 2,002,2002003200200420020052008
    *
    *本软件的使用受以下条款和条件控制:
    *提供本软件所依据的许可协议。
    *================================================================================================
    */

    /**@文件 CSL_PLL_Example.c
    *
    *@PLL 功能层示例源文件简介
    *
    *
    *\page 12 CSL PLL 示例文档
    *
    *\section PLL 示例
    *
    *\subsection PLLx 测试说明:
    *此测试代码验证 CSL PLL 模块的功能。 PLL 模块
    *在 C5505/C5515 DSP 上使用 DSP 为 CPU 和外设生成时钟。
    *向 PLL 提供一个32KHz 的输入时钟、使用该时钟可以
    *生成值。 通过以下公式生成不同的系统时钟值:
    *将 PLL 配置为不同的分频器值。
    *
    *测试期间 PLL 模块将被配置为60MHz 时钟频率
    *使用 pll_config() API。 使用读回并验证配置的值
    * PLL_getconfig () API。 所有值都应与配置的值相匹配
    *除了将仅反映在寄存器上的测试锁定 mon 值
    *在 PLL 启动后。 从 PLL 读取的值显示在 CCS
    *"stdout"窗口。 需要手动检查以验证测试是否成功。
    *
    * C5515 DSP PLL 寄存器的位文件与 C5505 DSP 的位文件略有不同。
    *使用定义的"PLL_Config"值12.288MHz 验证- 120MHz
    *配置。
    *
    *注释:此测试用于 C5505和
    * C5515. 确保正确的芯片版本宏 CHIP_5505/CHIP_5515
    *在文件 c55xx_CSL\inc\csl_general.h 中定义。
    *
    *\subsection PLLy 测试步骤:
    *@Li 打开 CCS 并连接目标(C5505/C5515 EVM)
    *@Li 打开项目"csl_pll_example.pjt"并进行构建
    *@Li 将程序加载到目标上
    *@Li 运行程序并观察测试结果
    *@Li 在释放模式下重复测试
    *
    *\subsection PLLz 测试结果:
    *@Li 所有 CSL API 都应返回成功
    *从 PLL 读取的@Li 配置值应与实际
    *配置的值,测试锁模值除外。
    *
    */

    /*===================================================================================
    *修订历史记录
    *====================
    * 2008年9月15日创建
    *
    * 18-May-2010. 由 Richard Sikora 改装的可调 PLL。
    *
    * 2010年8月20日。 为5515添加了1 MHz、2 MHz、12 MHz 和98 MHz。
    *
    * 2010年10月16日。 添加了#如果已定义 CHIP_C5505_C5515
    *
    *================================================================================================
    */

    #包含
    #include "csl_pll.h"
    #include "csl_general.h"
    #include "CSL_pllAux.h"

    PLL_Obj pllObj;
    PLL_Config pllCfg1;

    pll_handle hPll;

    #if ((defined (chip_5505))||(defined (chip_5515))||(defined (chip_C5505_C5515)))

    PLL_Config pllCfg_pl 1MHz ={0x8895、0x8000、0x0806、0x0247};
    PLL_Config pllCfg_lCfg_lCfg_lCfg_lCfg_lCfg={2MHz 0x8895、0x8000、0x0806、0x0223};
    PLL_Config pllCfg_lCfg_lCfg_lCfg_lCfg_lCfg={12MHz 0x8895、0x8000、0x0806、0x0205};
    PLL_Config pllCfg_12pp 288MHz ={0x8173、0x8000、0x0806、0x0000};
    PLL_Config pllCfg_pl 40MHz ={0x8E4A、0x8000、0x0806、0x0202};
    PLL_Config pllCfg_lCfg_lCfg_lCfg_lCfg={60MHz 0x8724、0x8000、0x0806、0x0000};
    PLL_Config pllCfg_pl 75MHz ={0x88ED、0x8000、0x0806、0x0000};
    PLL_Config pllCfg_lCfg_lCfg_lCfg_lCfg_lCfg={0x8BAB, 98MHz 0x8000, 0x0806, 0x0000};
    PLL_Config pllCfg_lCfg_lC8 100MHz ={0x8BE8、0x8000、0x0806、0x0000};
    PLL_Config pllCfg_pl 120MHz ={0x8E4A、0x8000、0x0806、0x0000};

    #else

    //寄存器顺序是 PLL_CNTRL1、PLL_CNTRL_2、PLL_CNTRL3、PLL_CNTRL_4

    PLL_Config pllCfg_pl 1MHz ={0x82DB、0x0000、0x0806、0x0208};
    PLL_Config pllCfg_lCfg_lCfg_lCfg_lCfg={2MHz 0x82DB、0x0000、0x0806、0x0202};
    PLL_Config pllCfg_plc200 12MHz ={0x82EB、0x8000、0x0806、0x0200};
    PLL_Config pllCfg_12pp 288MHz ={0x82ED、0x8000、0x0806、0x0200};
    PLL_Config pllCfg_pl 40MHz ={0x8262、0x8000、0x0806、0x0300};
    PLL_Config pllCfg_lC8 60MHz ={0x81C8、0xB000、0x0806、0x0000};
    PLL_Config pllCfg_pl0000 75MHz ={0x823B、0x9000、0x0806、0x0000};
    PLL_Config pllCfg_lCfg_lCfg_lCfg_lCfg_lCfg={98MHz 0x82ED、0x8000、0x0806、0x0000};
    PLL_Config pllCfg_lCfg_lCfg_lCfg_lCfg={100MHz 0x82FA、0x8000、0x0806、0x0000};
    PLL_Config pllCfg_pl 120MHz ={0x8392、0xA000、0x0806、0x0000};

    #endif

    PLL_Config *pConfigInfo;

    #define CSL_TEST_FAILED (1)
    #define CSL_TEST_PASSED (0)

    int pll_frequency_setup (unsigned int frequency)
    {
    CSL_Status 状态;

    状态= PLL_init (&pllObj、CSL_PLL_INST_0);
    if (CSL_SOK!= status)
    {
    printf ("PLL 初始化失败\n");
    返回(状态);

    hPll =(PLL_Handle)(&pllObj);

    PLL_RESET (hPll);

    /*为不同的频率配置 PLL */

    if (FREQUENCY == 1)
    {
    pConfigInfo =&pllCfg_ConfigInfo 1MHz;
    printf ("\NLL frequency 1 MHz \n");

    否则,如果(频率=2)
    {
    pConfigInfo =&pllCfg_ConfigInfo 2MHz;
    printf ("\nPLL frequency 2 MHz \n");

    否则,如果(频率==12)
    {
    pConfigInfo =&pllCfg_ConfigInfo 12MHz;
    printf ("\nPLL frequency 12 MHz \n");

    否则,如果(频率==40)
    {
    pConfigInfo =&pllCfg_ConfigInfo 40MHz;
    printf ("\nPLL frequency 40 MHz \n");

    否则、IF (频率=60)
    {
    pConfigInfo =&pllCfg_ConfigInfo 60MHz;
    printf ("\nPLL frequency 60 MHz \n");

    否则,如果(频率=75)
    {
    pConfigInfo =&pllCfg_ConfigInfo 75MHz;
    printf ("\nPLL frequency 75 MHz \n");

    否则,如果(频率=98)
    {
    pConfigInfo =&pllCfg_ConfigInfo 98MHz;
    printf ("\nPLL frequency 98 MHz \n");

    否则,如果(频率=120)
    {
    pConfigInfo =&pllCfg_ConfigInfo 120MHz;
    printf ("\nPLL frequency 120 MHz \n");

    否则
    {
    pConfigInfo =&pllCfg_ConfigInfo 100MHz;
    printf ("\nPLL frequency 100 MHz \n");

    STATUS = PLL_CONFIG (hPll、pConfigInfo);
    if (CSL_SOK!= status)
    {
    printf ("PLL 配置失败\n");
    返回(状态);

    状态= PLL_getconfig (hPll、&pllCfg1);
    if (status!= CSL_SOK)
    {
    printf ("测试失败:PLL 获取配置... 失败。\n");
    printf ("reason:pll_getconfig failed. [status = 0x%x].\n"、status);
    返回(状态);

    printf("register --config values\n");

    printf ("PLL_CNTL1 %04x --%04x\n"、pllCfg1.PLLCNTL1、hPll->pllConfig->PLLCNTL1);
    printf ("PLL_CNTRL2 %04x --%04x Test Lock Mon 将在 PLL 上电后被置位",
    pllCfg1.PLLCNTL2、hPll->pllConfig->PLLCNTL2);
    printf ("PLL_CNTL3 %04x --%04x\n"、pllCfg1.PLLINCNTL、hPll->pllConfig->PLLINCNTL);
    printf ("PLL_CNTL4 %04x --%04x\n"、pllCfg1.PLLOUTCNTL、hPll->pllConfig->PLLOUTCNTL);

    状态= PLL_BYPASS (hPll);
    if (CSL_SOK!= status)
    {
    printf ("PLL 旁路失败:%d\n"、CSL_ESYS_BADHANDLE);
    返回(状态);

    STATUS = PLL_ENABLE (hPll);
    if (CSL_SOK!= status)
    {
    printf ("PLL 启用失败:%d\n"、CSL_ESYS_BADHANDLE);
    返回(状态);

    返回(CSL_TEST_PASSED);

    联合国妇女地位委员会(人权高专办) /
    /**/
    /* PLL.c 结束*/
    /**/
    联合国妇女地位委员会(人权高专办) /

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

    您好!

    我需要 i2cdump、而不是应用程序代码、因为它可以重写。

    我想查看实际写入器件的内容。

    您使用的 MCLK 频率是多少?

    此致。