Forums

LPC1768与UDA1380的接口

开始于 莎兰·纳拉瓦达(Sharan Nalawadad) 2012年4月21日
你好,

I2C现在工作正常。问题是L3MODE未接地。但 仍然无法播放音频。

对于内部DAC,如果我分配1023<<6个数字值,那么我可以检查 DOUT上的模拟电压值(3.3v)。
同样的事情,可以通过发送数字值来检查UDA1380 I2SSend?

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad)
致:“ l ...”
发送:2012年4月23日,星期一,9:22 AM
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口


 
你好菲尔先生,

是的。我给了SCL和SDA线上拉电阻。并配置了I2C Specifically.

我没有按原样使用“ LPC17xxSpeexVocoder LPCXpresso”代码。因为我 不需要Speex和录音等其他内容。只有我在尝试玩 wave file.

我所指的示意图是
http://support.code-red-tech.com/CodeRedWiki/RDB1768V2Support?action=AttachFile&do=get&target = rdb1768v2r4.pdf

感谢您的详细邮件。首先,我将解决I2C问题,然后研究I2S and SYSTCLK.

谢谢

________________________________
来自:菲尔·杨
致:我...
发送:2012年4月22日,星期日,晚上11:17
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口
 
你好,

这与I2S接口无关,只是通过I2C发送命令 界面来设置编解码器。

当然,您还需要在LPC1768上设置I2S接口,并且 I2S接口模式上的设置需要反映您如何配置 1380.

在执行此代码之前,您需要设置I2C接口引脚 正确地设置I2C接口的时钟分频器,以便 与1380的通信低于最大速率。

由于I2C仅需要2个信号,捕获这些信号很简单 使用DSO来确保正确驱动接口。

无需SYSCLK,就可以通过I2C接口进行通信 我已经在1380上运行了

就我而言,我使用了aardvark来监视I2C接口并验证它 工作正常。

该应用笔记未介绍如何设置I2C界面, 没有电路板的原理图,但是您正在运行代码 完全与项目中的状态相同,或者您是否以此为基础进行新的设计 project?.

为了使I2C正常工作,您需要在SDA和SCL上具有外部上拉电阻, 并专门配置I2C引脚,在1768年这取决于哪个I2C 您正在使用的某些接口由I2CPADCFG寄存器控制。

问候

菲尔

发件人:l ... [mailto:l ...]代表Sharan Nalawadad
发送:2012年4月22日16:37
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

感谢您的详细邮件。

我指的是RDB1768V2和CoiNel LPC1768的示意图。

并从以下链接引用代码,

http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip

按照原理图进行连接。但是它不能 “ I2C_MasterTransferData”。

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

是否取决于SYSTCLK?
在我的应用程序中,我不需要speex和录音。只想玩 wave file.

请帮助我解决这个问题。

谢谢

________________________________
来自:菲尔·杨>
致:我...
发送:2012年4月22日,星期日,晚上8:29
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

我可以在当前的硬件上可靠地工作,但是可能有些棘手 取决于您选择连接的信号。

UDA1380可以使用以下命令从Tx或Rx通道数据时钟生成时钟 内部PLL,但是在执行此操作时会遇到一些时序问题 防止在4线模式下工作

如果您从LPC1768提供sysclk,则可以使4线模式工作 since the

在这种情况下,I2S模块不需要MClk信号,但可以使用 驱动MCLK信号。

本来我打算使用此模式,从1768年生成Tx时钟 并使用1380内部的PLL生成SYSCLK,但在这种情况下, 由于设备中的相位延迟,Rx数据的时序不正确,因此 最好从1768年生成MCLk并将其提供给SYSCLK。

从属模式下UDA1380中的sysclk必须与以下对象具有固定的相位关系 Tx和Rx时钟。

我发现的最简单可靠的解决方案是从1768年生成一个时钟 使用计时器(如果可以使用键盘,则使用MCLK),然后设置1380 到主模式,在该模式下它将生成Rx_SCK并将其连接到Tx_Sck, WS信号也一样。

然后设置1768 I2S接口,以便Tx和Rx都使用来自 1380作为主计时时钟,然后可以将I2S设置为产生 每个收到的新样本都会产生中断,从而避免了计时问题。

即将时钟驱动到1380.SYSCLK为256x

将1380.BCKO连接到1380.BCKI和1768.I2S_RX_SCK(或1768.I2S_TX_SCK)

将1380.WSO连接到1380.WSI和17868.I2S_RX_WS(或1768.I2S_TX_WS)

在1768年将Rx和Tx I2S设置为从设备,因此1380提供位时钟。

问候

菲尔

发件人:l ... [mailto:lp ... ]代表Sharan Nalawadad
发送:2012年4月22日10:34
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式如下:
每125us产生一个中断。即8KHz采样率。但是什么是 16Khz configured
在I2S中?即I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月22日,星期日,下午3:01
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式为: 每125us产生一次中断。但是I2S中配置的16Khz是什么? IE I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:肯尼斯 >
致:我...
发送:2012年4月21日,星期六,晚上8:37
主题:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

AN的更新版本位于NXP.com网站和 LPCware.com site:

http://www.lpcware.com/gfiles/devper/lpc175x_6x
http://www.nxp.com/products/microcontrollers/cortex_m3/lpc1700/LPC1768FET100.html#documentation

问候,


-在... ,Sharan Nalawadad写道:
>
>感谢您的回复。
>
>
>
>
>________________________________
> From: cfbsoftware1
> To: l...
>发送:2012年4月21日,星期六,上午11:33
>主题:[lpc2000]回复:LPC1768与UDA1380的接口
>
>
> Â
> --- In l... ,Sharan Nalawadad写道:
> >
> > Hello,
> >
> >
> >我正在尝试通过使用播放音频波形文件(48Khz采样率和16位) 带UDA1380的CoiNel LPC1768H。
> >
> >我发现与“在NXP的LPC175x / 6x MCU系列中使用Speex”相关的文档 AN11085文件在pdf中,它说明了有关UDA1380的信息。但是在此源代码中 没有与UDA1380相关的代码。我在以下链接中获得了此源代码,
> >
> > http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip
> >但是在此源代码中,没有与UDA1380相关的代码。
> >
> >我在哪里可以获得工作代码?请共享示例源代码。
> >
>
>在an11085.zip中,您将找到另一个名为'LPC17xxSpeexVocoder的zip文件。 LPCXpresso.zip”。在该zip文件中,您会找到“ uda1380_driver.c”,我认为 是您要查找的文件(或其中一个文件)。
>
> Regards,
> Chris Burrows
>
> CFB Software
>Astrobe v4.1:现在支持Cortex-M3微控制器
> http://www.astrobe.com
>
>
>
>
>
>
















LPC2100系列工程师指南

你好,

请记住,CODEC是2的补码设备,将是MSB aligned.



因此,要从编解码器中获取最大值,您需要左移,

如果左移1023,将得到很小的值,约为1mV。



问候



菲尔



发件人:l ... [mailto:l ...]代表Sharan Nalawadad
发送:2012年4月23日06:21
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口





你好,

I2C现在工作正常。问题是L3MODE未接地。但 仍然无法播放音频。

对于内部DAC,如果我分配1023<<6个数字值,那么我可以检查模拟值 DOUT上的电压值(3.3v)
同样的事情,可以通过发送数字值来检查UDA1380 I2SSend?

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad)>
致:“ l ...”>
发送:2012年4月23日,星期一,9:22 AM
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

是的。我给了SCL和SDA线上拉电阻。并配置了I2C Specifically.

我没有按原样使用“ LPC17xxSpeexVocoder LPCXpresso”代码。因为我 不需要Speex和录音等其他内容。只有我在尝试玩 wave file.

我所指的示意图是
http://support.code-red-tech.com/CodeRedWiki/RDB1768V2Support?action=AttachFile &do=get&target = rdb1768v2r4.pdf

感谢您的详细邮件。首先,我将解决I2C问题,然后研究I2S and SYSTCLK.

谢谢

________________________________
来自:菲尔·杨>
致:我...
发送:2012年4月22日,星期日,晚上11:17
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口


你好,

这与I2S接口无关,只是通过I2C发送命令 界面来设置编解码器。

当然,您还需要在LPC1768上设置I2S接口,并且 I2S接口模式上的设置需要反映您如何配置 1380.

在执行此代码之前,您需要设置I2C接口引脚 正确地设置I2C接口的时钟分频器,以便 与1380的通信低于最大速率。

由于I2C仅需要2个信号,捕获这些信号很简单 使用DSO来确保正确驱动接口。

无需SYSCLK,就可以通过I2C接口进行通信 我已经在1380上运行了

就我而言,我使用了aardvark来监视I2C接口并验证它 工作正常。

该应用笔记未介绍如何设置I2C界面, 没有电路板的原理图,但是您正在运行代码 完全与项目中的状态相同,或者您是否以此为基础进行新的设计 project?.

为了使I2C正常工作,您需要在SDA和SCL上具有外部上拉电阻, 并专门配置I2C引脚,在1768年这取决于哪个I2C 您正在使用的某些接口由I2CPADCFG寄存器控制。

问候

菲尔

发件人:l ... [mailto:lp ... ]代表Sharan Nalawadad
发送:2012年4月22日16:37
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

感谢您的详细邮件。

我指的是RDB1768V2和CoiNel LPC1768的示意图。

并从以下链接引用代码,

http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip

按照原理图进行连接。但是它不能 “ I2C_MasterTransferData”。

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

是否取决于SYSTCLK?
在我的应用程序中,我不需要speex和录音。只想玩 wave file.

请帮助我解决这个问题。

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上8:29
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

我可以在当前的硬件上可靠地工作,但是可能有些棘手 取决于您选择连接的信号。

UDA1380可以使用以下命令从Tx或Rx通道数据时钟生成时钟 内部PLL,但是在执行此操作时会遇到一些时序问题 防止在4线模式下工作

如果您从LPC1768提供sysclk,则可以使4线模式工作 since the

在这种情况下,I2S模块不需要MClk信号,但可以使用 驱动MCLK信号。

本来我打算使用此模式,从1768年生成Tx时钟 并使用1380内部的PLL生成SYSCLK,但在这种情况下, 由于设备中的相位延迟,Rx数据的时序不正确,因此 最好从1768年生成MCLk并将其提供给SYSCLK。

从属模式下UDA1380中的sysclk必须与以下对象具有固定的相位关系 Tx和Rx时钟。

我发现的最简单可靠的解决方案是从1768年生成一个时钟 使用计时器(如果可以使用键盘,则使用MCLK),然后设置1380 到主模式,在该模式下它将生成Rx_SCK并将其连接到Tx_Sck, WS信号也一样。

然后设置1768 I2S接口,以便Tx和Rx都使用来自 1380作为主计时时钟,然后可以将I2S设置为产生 每个收到的新样本都会产生中断,从而避免了计时问题。

即将时钟驱动到1380.SYSCLK为256x

将1380.BCKO连接到1380.BCKI和1768.I2S_RX_SCK(或1768.I2S_TX_SCK)

将1380.WSO连接到1380.WSI和17868.I2S_RX_WS(或1768.I2S_TX_WS)

在1768年将Rx和Tx I2S设置为从设备,因此1380提供位时钟。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日10:34
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式如下:
每125us产生一个中断。即8KHz采样率。但是什么是 16Khz configured
在I2S中?即I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月22日,星期日,下午3:01
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式为: 每125us产生一次中断。但是I2S中配置的16Khz是什么? IE I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:肯尼斯 >
致:我...
发送:2012年4月21日,星期六,晚上8:37
主题:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

AN的更新版本位于NXP.com网站和 LPCware.com site:

http://www.lpcware.com/gfiles/devper/lpc175x_6x
http://www.nxp.com/products/microcontrollers/cortex_m3/lpc1700/LPC1768FET100.html#documentation

问候,


-在... , Sharan Nalawadad wrote:
>
>感谢您的回复。
>
>
>
>
>________________________________
> From: cfbsoftware1
> To: l...
>发送:2012年4月21日,星期六,上午11:33
>主题:[lpc2000]回复:LPC1768与UDA1380的接口
>
>
> Â
> --- In l... , Sharan Nalawadad wrote:
> >
> > Hello,
> >
> >
> >我正在尝试通过使用播放音频波形文件(48Khz采样率和16位) 带UDA1380的CoiNel LPC1768H。
> >
> >我发现与“在NXP的LPC175x / 6x MCU系列中使用Speex”相关的文档 AN11085文件在pdf中,它说明了有关UDA1380的信息。但是在此源代码中 没有与UDA1380相关的代码。我在以下链接中获得了此源代码,
> >
> > http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip
> >但是在此源代码中,没有与UDA1380相关的代码。
> >
> >我在哪里可以获得工作代码?请共享示例源代码。
> >
>
>在an11085.zip中,您将找到另一个名为'LPC17xxSpeexVocoder的zip文件。 LPCXpresso.zip”。在该zip文件中,您会找到“ uda1380_driver.c”,我认为 是您要查找的文件(或其中一个文件)。
>
> Regards,
> Chris Burrows
>
> CFB Software
>Astrobe v4.1:现在支持Cortex-M3微控制器
> http://www.astrobe.com
>
>
>
>
>
>

















抱歉,相对于“ 0”电平的偏移量约为-1mv,该电平应为 1.6v.



另外,您还需要继续发送它,因为它是流,因此任何值都将保留 在那里只有1个音频采样时钟周期。



我会编写一个简单的ISR,以16位交替输出0x8000和0x 7ffff 模式,或在24位模式下为0x80000000和0x7fffffff。



发件人:l ... [mailto:l ...]代表Phil Young
发送:2012年4月23日07:24
致:我...
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口





你好,

请记住,CODEC是2的补码设备,将是MSB aligned.

因此,要从编解码器中获取最大值,您需要左移,

如果左移1023,将得到很小的值,约为1mV。

问候

菲尔

发件人:l ... [mailto:lp ... ]代表Sharan Nalawadad
发送:2012年4月23日06:21
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

I2C现在工作正常。问题是L3MODE未接地。但 仍然无法播放音频。

对于内部DAC,如果我分配1023<<6个数字值,那么我可以检查模拟值 DOUT上的电压值(3.3v)
同样的事情,可以通过发送数字值来检查UDA1380 I2SSend?

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月23日,星期一,9:22 AM
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

是的。我给了SCL和SDA线上拉电阻。并配置了I2C Specifically.

我没有按原样使用“ LPC17xxSpeexVocoder LPCXpresso”代码。因为我 不需要Speex和录音等其他内容。只有我在尝试玩 wave file.

我所指的示意图是
http://support.code-red-tech.com/CodeRedWiki/RDB1768V2Support?action=AttachFile &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf

感谢您的详细邮件。首先,我将解决I2C问题,然后研究I2S and SYSTCLK.

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上11:17
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

这与I2S接口无关,只是通过I2C发送命令 界面来设置编解码器。

当然,您还需要在LPC1768上设置I2S接口,并且 I2S接口模式上的设置需要反映您如何配置 1380.

在执行此代码之前,您需要设置I2C接口引脚 正确地设置I2C接口的时钟分频器,以便 与1380的通信低于最大速率。

由于I2C仅需要2个信号,捕获这些信号很简单 使用DSO来确保正确驱动接口。

无需SYSCLK,就可以通过I2C接口进行通信 我已经在1380上运行了

就我而言,我使用了aardvark来监视I2C接口并验证它 工作正常。

该应用笔记未介绍如何设置I2C界面, 没有电路板的原理图,但是您正在运行代码 完全与项目中的状态相同,或者您是否以此为基础进行新的设计 project?.

为了使I2C正常工作,您需要在SDA和SCL上具有外部上拉电阻, 并专门配置I2C引脚,在1768年这取决于哪个I2C 您正在使用的某些接口由I2CPADCFG寄存器控制。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日16:37
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

感谢您的详细邮件。

我指的是RDB1768V2和CoiNel LPC1768的示意图。

并从以下链接引用代码,

http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip

按照原理图进行连接。但是它不能 “ I2C_MasterTransferData”。

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

是否取决于SYSTCLK?
在我的应用程序中,我不需要speex和录音。只想玩 wave file.

请帮助我解决这个问题。

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上8:29
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

我可以在当前的硬件上可靠地工作,但是可能有些棘手 取决于您选择连接的信号。

UDA1380可以使用以下命令从Tx或Rx通道数据时钟生成时钟 内部PLL,但是在执行此操作时会遇到一些时序问题 防止在4线模式下工作

如果您从LPC1768提供sysclk,则可以使4线模式工作 since the

在这种情况下,I2S模块不需要MClk信号,但可以使用 驱动MCLK信号。

本来我打算使用此模式,从1768年生成Tx时钟 并使用1380内部的PLL生成SYSCLK,但在这种情况下, 由于设备中的相位延迟,Rx数据的时序不正确,因此 最好从1768年生成MCLk并将其提供给SYSCLK。

从属模式下UDA1380中的sysclk必须与以下对象具有固定的相位关系 Tx和Rx时钟。

我发现的最简单可靠的解决方案是从1768年生成一个时钟 使用计时器(如果可以使用键盘,则使用MCLK),然后设置1380 到主模式,在该模式下它将生成Rx_SCK并将其连接到Tx_Sck, WS信号也一样。

然后设置1768 I2S接口,以便Tx和Rx都使用来自 1380作为主计时时钟,然后可以将I2S设置为产生 每个收到的新样本都会产生中断,从而避免了计时问题。

即将时钟驱动到1380.SYSCLK为256x

将1380.BCKO连接到1380.BCKI和1768.I2S_RX_SCK(或1768.I2S_TX_SCK)

将1380.WSO连接到1380.WSI和17868.I2S_RX_WS(或1768.I2S_TX_WS)

在1768年将Rx和Tx I2S设置为从设备,因此1380提供位时钟。

问候

菲尔

来自:我... [mailto:lpc2000... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日10:34
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式如下:
每125us产生一个中断。即8KHz采样率。但是什么是 16Khz configured
在I2S中?即I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月22日,星期日,下午3:01
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式为: 每125us产生一次中断。但是I2S中配置的16Khz是什么? IE I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:肯尼斯 >
致:我...
发送:2012年4月21日,星期六,晚上8:37
主题:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

AN的更新版本位于NXP.com网站和 LPCware.com site:

http://www.lpcware.com/gfiles/devper/lpc175x_6x
http://www.nxp.com/products/microcontrollers/cortex_m3/lpc1700/LPC1768FET100.html#documentation

问候,


-在... ,Sharan Nalawadad写道:
>
>感谢您的回复。
>
>
>
>
>________________________________
> From: cfbsoftware1
> To: l...
>发送:2012年4月21日,星期六,上午11:33
>主题:[lpc2000]回复:LPC1768与UDA1380的接口
>
>
> Â
> --- In l... ,Sharan Nalawadad写道:
> >
> > Hello,
> >
> >
> >我正在尝试通过使用播放音频波形文件(48Khz采样率和16位) 带UDA1380的CoiNel LPC1768H。
> >
> >我发现与“在NXP的LPC175x / 6x MCU系列中使用Speex”相关的文档 AN11085文件在pdf中,它说明了有关UDA1380的信息。但是在此源代码中 没有与UDA1380相关的代码。我在以下链接中获得了此源代码,
> >
> > http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip
> >但是在此源代码中,没有与UDA1380相关的代码。
> >
> >我在哪里可以获得工作代码?请共享示例源代码。
> >
>
>在an11085.zip中,您将找到另一个名为'LPC17xxSpeexVocoder的zip文件。 LPCXpresso.zip”。在该zip文件中,您会找到“ uda1380_driver.c”,我认为 是您要查找的文件(或其中一个文件)。
>
> Regards,
> Chris Burrows
>
> CFB Software
>Astrobe v4.1:现在支持Cortex-M3微控制器
> http://www.astrobe.com
>
>
>
>
>
>



















你好,

为了调试,我在TIMER0_IRQHandler中连续发送0x7FFF。溃败 (VOUTR)线显示0V。如果我没记错的话,ROUT应该显示3.3V对吗?

________________________________
From: Phil Young
致:我...
发送:2012年4月23日,星期一,上午11:58
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口


 
抱歉,相对于“ 0”电平的偏移量约为-1mv,该电平应为 1.6v.

另外,您还需要继续发送它,因为它是流,因此任何值都将保留 在那里只有1个音频采样时钟周期。

我会编写一个简单的ISR,以16位交替输出0x8000和0x 7ffff 模式,或在24位模式下为0x80000000和0x7fffffff。

发件人:l ... [mailto:l ...]代表Phil Young
发送:2012年4月23日07:24
致:我...
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

请记住,CODEC是2的补码设备,将是MSB aligned.

因此,要从编解码器中获取最大值,您需要左移,

如果左移1023,将得到很小的值,约为1mV。

问候

菲尔

发件人:l ... [mailto:lp ... ]代表Sharan Nalawadad
发送:2012年4月23日06:21
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

I2C现在工作正常。问题是L3MODE未接地。但 仍然无法播放音频。

对于内部DAC,如果我分配1023<<6个数字值,那么我可以检查模拟值 DOUT上的电压值(3.3v)
同样的事情,可以通过发送数字值来检查UDA1380 I2SSend?

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月23日,星期一,9:22 AM
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

是的。我给了SCL和SDA线上拉电阻。并配置了I2C Specifically.

我没有按原样使用“ LPC17xxSpeexVocoder LPCXpresso”代码。因为我 不需要Speex和录音等其他内容。只有我在尝试玩 wave file.

我所指的示意图是
http://support.code-red-tech.com/CodeRedWiki/RDB1768V2Support?action=AttachFile &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf

感谢您的详细邮件。首先,我将解决I2C问题,然后研究I2S and SYSTCLK.

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上11:17
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

这与I2S接口无关,只是通过I2C发送命令 界面来设置编解码器。

当然,您还需要在LPC1768上设置I2S接口,并且 I2S接口模式上的设置需要反映您如何配置 1380.

在执行此代码之前,您需要设置I2C接口引脚 正确地设置I2C接口的时钟分频器,以便 与1380的通信低于最大速率。

由于I2C仅需要2个信号,捕获这些信号很简单 使用DSO来确保正确驱动接口。

无需SYSCLK,就可以通过I2C接口进行通信 我已经在1380上运行了

就我而言,我使用了aardvark来监视I2C接口并验证它 工作正常。

该应用笔记未介绍如何设置I2C界面, 没有电路板的原理图,但是您正在运行代码 完全与项目中的状态相同,或者您是否以此为基础进行新的设计 project?.

为了使I2C正常工作,您需要在SDA和SCL上具有外部上拉电阻, 并专门配置I2C引脚,在1768年这取决于哪个I2C 您正在使用的某些接口由I2CPADCFG寄存器控制。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日16:37
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

感谢您的详细邮件。

我指的是RDB1768V2和CoiNel LPC1768的示意图。

并从以下链接引用代码,

http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip

按照原理图进行连接。但是它不能 “ I2C_MasterTransferData”。

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

是否取决于SYSTCLK?
在我的应用程序中,我不需要speex和录音。只想玩 wave file.

请帮助我解决这个问题。

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上8:29
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

我可以在当前的硬件上可靠地工作,但是可能有些棘手 取决于您选择连接的信号。

UDA1380可以使用以下命令从Tx或Rx通道数据时钟生成时钟 内部PLL,但是在执行此操作时会遇到一些时序问题 防止在4线模式下工作

如果您从LPC1768提供sysclk,则可以使4线模式工作 since the

在这种情况下,I2S模块不需要MClk信号,但可以使用 驱动MCLK信号。

本来我打算使用此模式,从1768年生成Tx时钟 并使用1380内部的PLL生成SYSCLK,但在这种情况下, 由于设备中的相位延迟,Rx数据的时序不正确,因此 最好从1768年生成MCLk并将其提供给SYSCLK。

从属模式下UDA1380中的sysclk必须与以下对象具有固定的相位关系 Tx和Rx时钟。

我发现的最简单可靠的解决方案是从1768年生成一个时钟 使用计时器(如果可以使用键盘,则使用MCLK),然后设置1380 到主模式,在该模式下它将生成Rx_SCK并将其连接到Tx_Sck, WS信号也一样。

然后设置1768 I2S接口,以便Tx和Rx都使用来自 1380作为主计时时钟,然后可以将I2S设置为产生 每个收到的新样本都会产生中断,从而避免了计时问题。

即将时钟驱动到1380.SYSCLK为256x

将1380.BCKO连接到1380.BCKI和1768.I2S_RX_SCK(或1768.I2S_TX_SCK)

将1380.WSO连接到1380.WSI和17868.I2S_RX_WS(或1768.I2S_TX_WS)

在1768年将Rx和Tx I2S设置为从设备,因此1380提供位时钟。

问候

菲尔

来自:我... [mailto:lpc2000... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日10:34
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式如下:
每125us产生一个中断。即8KHz采样率。但是什么是 16Khz configured
在I2S中?即I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月22日,星期日,下午3:01
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式为: 每125us产生一次中断。但是I2S中配置的16Khz是什么? IE I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:肯尼斯 >
致:我...
发送:2012年4月21日,星期六,晚上8:37
主题:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

AN的更新版本位于NXP.com网站和 LPCware.com site:

http://www.lpcware.com/gfiles/devper/lpc175x_6x
http://www.nxp.com/products/microcontrollers/cortex_m3/lpc1700/LPC1768FET100.html#documentation

问候,


-在... ,Sharan Nalawadad写道:
>
>感谢您的回复。
>
>
>
>
>________________________________
> From: cfbsoftware1
> To: l...
>发送:2012年4月21日,星期六,上午11:33
>主题:[lpc2000]回复:LPC1768与UDA1380的接口
>
>
> Â
> --- In l... ,Sharan Nalawadad写道:
> >
> > Hello,
> >
> >
> >我正在尝试通过使用播放音频波形文件(48Khz采样率和16位) 带UDA1380的CoiNel LPC1768H。
> >
> >我发现与“在NXP的LPC175x / 6x MCU系列中使用Speex”相关的文档 AN11085文件在pdf中,它说明了有关UDA1380的信息。但是在此源代码中 没有与UDA1380相关的代码。我在以下链接中获得了此源代码,
> >
> > http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip
> >但是在此源代码中,没有与UDA1380相关的代码。
> >
> >我在哪里可以获得工作代码?请共享示例源代码。
> >
>
>在an11085.zip中,您将找到另一个名为'LPC17xxSpeexVocoder的zip文件。 LPCXpresso.zip”。在该zip文件中,您会找到“ uda1380_driver.c”,我认为 是您要查找的文件(或其中一个文件)。
>
> Regards,
> Chris Burrows
>
> CFB Software
>Astrobe v4.1:现在支持Cortex-M3微控制器
> http://www.astrobe.com
>
>
>
>
>
>






















在16位I2S模式下,这取决于I2S的配置方式。 正确,除非您将输出取反。



您必须确保以与I2S控制器相同的方式配置I2S控制器。 codec.

编解码器可以在左对齐或右对齐的多种模式下工作。



尝试查看带有示波器的I2S_TX_SDA / I2S_TX_SCK / I2S_TX_WS信号。

计算SCK / WS之间的比率,以确定您真正发送的格式, 然后查看SDA与WS的一致性,以了解I2S的真正价值 sending.



您发送什么值来设置编解码器?默认情况下,几乎所有内容 内部电源关闭。



发件人:l ... [mailto:l ...]代表Sharan Nalawadad
发送:2012年4月23日08:02
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口





你好,

为了调试,我在TIMER0_IRQHandler中连续发送0x7FFF。溃败 (VOUTR)线显示0V。如果我没记错的话,ROUT应该显示3.3V对吗?

________________________________
来自:菲尔·杨>
致:我...
发送:2012年4月23日,星期一,上午11:58
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

抱歉,相对于“ 0”电平的偏移量约为-1mv,该电平应为 1.6v.

另外,您还需要继续发送它,因为它是流,因此任何值都将保留 在那里只有1个音频采样时钟周期。

我会编写一个简单的ISR,以16位交替输出0x8000和0x 7ffff 模式,或在24位模式下为0x80000000和0x7fffffff。

发件人:l ... [mailto:lp ... ]代表菲尔·杨(Phil Young)
发送:2012年4月23日07:24
致:我...
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

请记住,CODEC是2的补码设备,将是MSB aligned.

因此,要从编解码器中获取最大值,您需要左移,

如果左移1023,将得到很小的值,约为1mV。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月23日06:21
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

I2C现在工作正常。问题是L3MODE未接地。但 仍然无法播放音频。

对于内部DAC,如果我分配1023<<6个数字值,那么我可以检查模拟值 DOUT上的电压值(3.3v)
同样的事情,可以通过发送数字值来检查UDA1380 I2SSend?

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月23日,星期一,9:22 AM
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

是的。我给了SCL和SDA线上拉电阻。并配置了I2C Specifically.

我没有按原样使用“ LPC17xxSpeexVocoder LPCXpresso”代码。因为我 不需要Speex和录音等其他内容。只有我在尝试玩 wave file.

我所指的示意图是
http://support.code-red-tech.com/CodeRedWiki/RDB1768V2Support?action=AttachFile &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf

感谢您的详细邮件。首先,我将解决I2C问题,然后研究I2S and SYSTCLK.

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上11:17
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

这与I2S接口无关,只是通过I2C发送命令 界面来设置编解码器。

当然,您还需要在LPC1768上设置I2S接口,并且 I2S接口模式上的设置需要反映您如何配置 1380.

在执行此代码之前,您需要设置I2C接口引脚 正确地设置I2C接口的时钟分频器,以便 与1380的通信低于最大速率。

由于I2C仅需要2个信号,捕获这些信号很简单 使用DSO来确保正确驱动接口。

无需SYSCLK,就可以通过I2C接口进行通信 我已经在1380上运行了

就我而言,我使用了aardvark来监视I2C接口并验证它 工作正常。

该应用笔记未介绍如何设置I2C界面, 没有电路板的原理图,但是您正在运行代码 完全与项目中的状态相同,或者您是否以此为基础进行新的设计 project?.

为了使I2C正常工作,您需要在SDA和SCL上具有外部上拉电阻, 并专门配置I2C引脚,在1768年这取决于哪个I2C 您正在使用的某些接口由I2CPADCFG寄存器控制。

问候

菲尔

来自:我... [mailto:lpc2000... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日16:37
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

感谢您的详细邮件。

我指的是RDB1768V2和CoiNel LPC1768的示意图。

并从以下链接引用代码,

http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip

按照原理图进行连接。但是它不能 “ I2C_MasterTransferData”。

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

是否取决于SYSTCLK?
在我的应用程序中,我不需要speex和录音。只想玩 wave file.

请帮助我解决这个问题。

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上8:29
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

我可以在当前的硬件上可靠地工作,但是可能有些棘手 取决于您选择连接的信号。

UDA1380可以使用以下命令从Tx或Rx通道数据时钟生成时钟 内部PLL,但是在执行此操作时会遇到一些时序问题 防止在4线模式下工作

如果您从LPC1768提供sysclk,则可以使4线模式工作 since the

在这种情况下,I2S模块不需要MClk信号,但可以使用 驱动MCLK信号。

本来我打算使用此模式,从1768年生成Tx时钟 并使用1380内部的PLL生成SYSCLK,但在这种情况下, 由于设备中的相位延迟,Rx数据的时序不正确,因此 最好从1768年生成MCLk并将其提供给SYSCLK。

从属模式下UDA1380中的sysclk必须与以下对象具有固定的相位关系 Tx和Rx时钟。

我发现的最简单可靠的解决方案是从1768年生成一个时钟 使用计时器(如果可以使用键盘,则使用MCLK),然后设置1380 到主模式,在该模式下它将生成Rx_SCK并将其连接到Tx_Sck, WS信号也一样。

然后设置1768 I2S接口,以便Tx和Rx都使用来自 1380作为主计时时钟,然后可以将I2S设置为产生 每个收到的新样本都会产生中断,从而避免了计时问题。

即将时钟驱动到1380.SYSCLK为256x

将1380.BCKO连接到1380.BCKI和1768.I2S_RX_SCK(或1768.I2S_TX_SCK)

将1380.WSO连接到1380.WSI和17868.I2S_RX_WS(或1768.I2S_TX_WS)

在1768年将Rx和Tx I2S设置为从设备,因此1380提供位时钟。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日10:34
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式如下:
每125us产生一个中断。即8KHz采样率。但是什么是 16Khz configured
在I2S中?即I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月22日,星期日,下午3:01
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式为: 每125us产生一次中断。但是I2S中配置的16Khz是什么? IE I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:肯尼斯 >
致:我...
发送:2012年4月21日,星期六,晚上8:37
主题:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

AN的更新版本位于NXP.com网站和 LPCware.com site:

http://www.lpcware.com/gfiles/devper/lpc175x_6x
http://www.nxp.com/products/microcontrollers/cortex_m3/lpc1700/LPC1768FET100.html#documentation

问候,


-在... , Sharan Nalawadad wrote:
>
>感谢您的回复。
>
>
>
>
>________________________________
> From: cfbsoftware1
> To: l...
>发送:2012年4月21日,星期六,上午11:33
>主题:[lpc2000]回复:LPC1768与UDA1380的接口
>
>
> Â
> --- In l... , Sharan Nalawadad wrote:
> >
> > Hello,
> >
> >
> >我正在尝试通过使用播放音频波形文件(48Khz采样率和16位) 带UDA1380的CoiNel LPC1768H。
> >
> >我发现与“在NXP的LPC175x / 6x MCU系列中使用Speex”相关的文档 AN11085文件在pdf中,它说明了有关UDA1380的信息。但是在此源代码中 没有与UDA1380相关的代码。我在以下链接中获得了此源代码,
> >
> > http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip
> >但是在此源代码中,没有与UDA1380相关的代码。
> >
> >我在哪里可以获得工作代码?请共享示例源代码。
> >
>
>在an11085.zip中,您将找到另一个名为'LPC17xxSpeexVocoder的zip文件。 LPCXpresso.zip”。在该zip文件中,您会找到“ uda1380_driver.c”,我认为 是您要查找的文件(或其中一个文件)。
>
> Regards,
> Chris Burrows
>
> CFB Software
>Astrobe v4.1:现在支持Cortex-M3微控制器
> http://www.astrobe.com
>
>
>
>
>
>























你好,

遵循我为编解码器设置的值,

/ *编解码器预设* /
静态const struct uda1380_setup uda1380_init [] =
{
  {UDA1380_REG7F_SW_RESET,0xFFFF},
  {UDA1380_REG01_I2S,0x0000},
  {UDA1380_REG03_ANAMIX,0x3F3F},
  {UDA1380_REG13_MSTRMUTE,0x0000},
  {UDA1380_REG22_ADC,REG22_SEL_LNA_ENABLE | REG22_SEL_MIC_ENABLE | 1<<1},
  {UDA1380_REG21_PGA,0x00},
};

静态const struct uda1380_setupplaying_enable [] =
{
  {UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},
  {UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},
};

每当我在VOUTL,VOUTR,VOUTLHP和VOUTRHP处获得0v时。

随函附上uda1380的驱动程序文件。

代码中是否缺少任何内容。

谢谢

________________________________
From: Phil Young
致:我...
发送:2012年4月23日,星期一,下午12:58
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口


 
在16位I2S模式下,这取决于I2S的配置方式。 正确,除非您将输出取反。

您必须确保以与I2S控制器相同的方式配置I2S控制器。 codec.

编解码器可以在左对齐或右对齐的多种模式下工作。

尝试查看带有示波器的I2S_TX_SDA / I2S_TX_SCK / I2S_TX_WS信号。

计算SCK / WS之间的比率,以确定您真正发送的格式, 然后查看SDA与WS的一致性,以了解I2S的真正价值 sending.

您发送什么值来设置编解码器?默认情况下,几乎所有内容 内部电源关闭。

发件人:l ... [mailto:l ...]代表Sharan Nalawadad
发送:2012年4月23日08:02
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

为了调试,我在TIMER0_IRQHandler中连续发送0x7FFF。溃败 (VOUTR)线显示0V。如果我没记错的话,ROUT应该显示3.3V对吗?

________________________________
来自:菲尔·杨>
致:我...
发送:2012年4月23日,星期一,上午11:58
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

抱歉,相对于“ 0”电平的偏移量约为-1mv,该电平应为 1.6v.

另外,您还需要继续发送它,因为它是流,因此任何值都将保留 在那里只有1个音频采样时钟周期。

我会编写一个简单的ISR,以16位交替输出0x8000和0x 7ffff 模式,或在24位模式下为0x80000000和0x7fffffff。

发件人:l ... [mailto:lp ... ]代表菲尔·杨(Phil Young)
发送:2012年4月23日07:24
致:我...
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

请记住,CODEC是2的补码设备,将是MSB aligned.

因此,要从编解码器中获取最大值,您需要左移,

如果左移1023,将得到很小的值,约为1mV。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月23日06:21
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

I2C现在工作正常。问题是L3MODE未接地。但 仍然无法播放音频。

对于内部DAC,如果我分配1023<<6个数字值,那么我可以检查模拟值 DOUT上的电压值(3.3v)
同样的事情,可以通过发送数字值来检查UDA1380 I2SSend?

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月23日,星期一,9:22 AM
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

是的。我给了SCL和SDA线上拉电阻。并配置了I2C Specifically.

我没有按原样使用“ LPC17xxSpeexVocoder LPCXpresso”代码。因为我 不需要Speex和录音等其他内容。只有我在尝试玩 wave file.

我所指的示意图是
http://support.code-red-tech.com/CodeRedWiki/RDB1768V2Support?action=AttachFile &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf

感谢您的详细邮件。首先,我将解决I2C问题,然后研究I2S and SYSTCLK.

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上11:17
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

这与I2S接口无关,只是通过I2C发送命令 界面来设置编解码器。

当然,您还需要在LPC1768上设置I2S接口,并且 I2S接口模式上的设置需要反映您如何配置 1380.

在执行此代码之前,您需要设置I2C接口引脚 正确地设置I2C接口的时钟分频器,以便 与1380的通信低于最大速率。

由于I2C仅需要2个信号,捕获这些信号很简单 使用DSO来确保正确驱动接口。

无需SYSCLK,就可以通过I2C接口进行通信 我已经在1380上运行了

就我而言,我使用了aardvark来监视I2C接口并验证它 工作正常。

该应用笔记未介绍如何设置I2C界面, 没有电路板的原理图,但是您正在运行代码 完全与项目中的状态相同,或者您是否以此为基础进行新的设计 project?.

为了使I2C正常工作,您需要在SDA和SCL上具有外部上拉电阻, 并专门配置I2C引脚,在1768年这取决于哪个I2C 您正在使用的某些接口由I2CPADCFG寄存器控制。

问候

菲尔

来自:我... [mailto:lpc2000... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日16:37
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

感谢您的详细邮件。

我指的是RDB1768V2和CoiNel LPC1768的示意图。

并从以下链接引用代码,

http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip

按照原理图进行连接。但是它不能 “ I2C_MasterTransferData”。

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

是否取决于SYSTCLK?
在我的应用程序中,我不需要speex和录音。只想玩 wave file.

请帮助我解决这个问题。

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上8:29
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

我可以在当前的硬件上可靠地工作,但是可能有些棘手 取决于您选择连接的信号。

UDA1380可以使用以下命令从Tx或Rx通道数据时钟生成时钟 内部PLL,但是在执行此操作时会遇到一些时序问题 防止在4线模式下工作

如果您从LPC1768提供sysclk,则可以使4线模式工作 since the

在这种情况下,I2S模块不需要MClk信号,但可以使用 驱动MCLK信号。

本来我打算使用此模式,从1768年生成Tx时钟 并使用1380内部的PLL生成SYSCLK,但在这种情况下, 由于设备中的相位延迟,Rx数据的时序不正确,因此 最好从1768年生成MCLk并将其提供给SYSCLK。

从属模式下UDA1380中的sysclk必须与以下对象具有固定的相位关系 Tx和Rx时钟。

我发现的最简单可靠的解决方案是从1768年生成一个时钟 使用计时器(如果可以使用键盘,则使用MCLK),然后设置1380 到主模式,在该模式下它将生成Rx_SCK并将其连接到Tx_Sck, WS信号也一样。

然后设置1768 I2S接口,以便Tx和Rx都使用来自 1380作为主计时时钟,然后可以将I2S设置为产生 每个收到的新样本都会产生中断,从而避免了计时问题。

即将时钟驱动到1380.SYSCLK为256x

将1380.BCKO连接到1380.BCKI和1768.I2S_RX_SCK(或1768.I2S_TX_SCK)

将1380.WSO连接到1380.WSI和17868.I2S_RX_WS(或1768.I2S_TX_WS)

在1768年将Rx和Tx I2S设置为从设备,因此1380提供位时钟。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日10:34
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式如下:
每125us产生一个中断。即8KHz采样率。但是什么是 16Khz configured
在I2S中?即I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月22日,星期日,下午3:01
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式为: 每125us产生一次中断。但是I2S中配置的16Khz是什么? IE I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:肯尼斯 >
致:我...
发送:2012年4月21日,星期六,晚上8:37
主题:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

AN的更新版本位于NXP.com网站和 LPCware.com site:

http://www.lpcware.com/gfiles/devper/lpc175x_6x
http://www.nxp.com/products/microcontrollers/cortex_m3/lpc1700/LPC1768FET100.html#documentation

问候,


-在... , Sharan Nalawadad wrote:
>
>感谢您的回复。
>
>
>
>
>________________________________
> From: cfbsoftware1
> To: l...
>发送:2012年4月21日,星期六,上午11:33
>主题:[lpc2000]回复:LPC1768与UDA1380的接口
>
>
> Â
> --- In l... , Sharan Nalawadad wrote:
> >
> > Hello,
> >
> >
> >我正在尝试通过使用播放音频波形文件(48Khz采样率和16位) 带UDA1380的CoiNel LPC1768H。
> >
> >我发现与“在NXP的LPC175x / 6x MCU系列中使用Speex”相关的文档 AN11085文件在pdf中,它说明了有关UDA1380的信息。但是在此源代码中 没有与UDA1380相关的代码。我在以下链接中获得了此源代码,
> >
> > http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip
> >但是在此源代码中,没有与UDA1380相关的代码。
> >
> >我在哪里可以获得工作代码?请共享示例源代码。
> >
>
>在an11085.zip中,您将找到另一个名为'LPC17xxSpeexVocoder的zip文件。 LPCXpresso.zip”。在该zip文件中,您会找到“ uda1380_driver.c”,我认为 是您要查找的文件(或其中一个文件)。
>
> Regards,
> Chris Burrows
>
> CFB Software
>Astrobe v4.1:现在支持Cortex-M3微控制器
> http://www.astrobe.com
>
>
>
>
>
>























----------

/ ***************************************************** ********************** // **

* @file uda1380.h

* @briefHeader文件,用于UDA1380音频编解码器的音频驱动程序代码

*在code_red RDB1768v2板上使用

* @version 1.0

* @ date04。可能。 2011年

* @author CT-PIM

****************************************************** ************************

*本文描述的软件仅用于说明目的

*为客户提供有关

* 产品。该软件按“原样”提供,没有任何保证。

*恩智浦半导体公司不承担任何责任。

*使用该软件,不传达任何专利的许可或所有权,

*版权,或掩盖该产品的版权。恩智浦半导体

*保留在不更改软件的情况下进行更改的权利

* 通知。恩智浦半导体也不做任何陈述或

*保证该应用程序适用于指定的

*无需进一步测试或修改即可使用。

****************************************************** ************************ /





#ifndef UDA1380_H_

#定义UDA1380_H_



/ *编解码器的I2C地址* /

#定义UDA1380_ADDR(0x30>>1)





#if 0

#定义UDA1380_REG00_EVALCLK 0x00 / *评估模式,WSPLL设置,时钟 分频器和时钟选择器* /

#定义UDA1380_REG01_I2S 0x01 / * I2S总线I / O设置 */

#定义UDA1380_REG02_PWRCTRL 0x02 / *电源控制设置 */

#定义UDA1380_REG03_ANAMIX 0x03 / *模拟混音器设置 */

#定义UDA1380_REG04_HEADAMP 0x04 / *耳机放大器设置 */

#定义UDA1380_REG10_MSTRVOL 0x10 / *主音量控制 */

#定义UDA1380_REG11_MIXVOL 0x11 / *混音器音量控制 */

#define UDA1380_REG13_MODEBBT 0x12 / *模式选择,左右低音 增强和高音设置* /

#定义UDA1380_REG13_MSTRMUTE 0x13 / *主静音,通道1和通道2 去加重和通道静音* /

#定义UDA1380_REG14_MIXSDO 0x14 / *混频器,静音检测器和插值 过滤器过采样设置* /

#定义UDA1380_REG20_DECVOL 0x20 / *抽取器音量控制 */

#定义UDA1380_REG21_PGA 0x21 / * PGA设置和静音 */

#定义UDA1380_REG22_ADC 0x22 / * ADC设置 */

#定义UDA1380_REG23_AGC 0x23 / * AGC设置 */

#定义UDA1380_REG7F_SW_RESET 0x7F / *恢复L3默认值 */

#万一



/ *注册控制设置图(写)* /

Typedef枚举

{

UDA1380_REG00_EVALCLK = 0x00,/ *评估模式,WSPLL设置,时钟 分频器和时钟选择器* /

UDA1380_REG01_I2S,/ * I2S总线I / O设置 */

UDA1380_REG02_PWRCTRL,/ *电源控制设置 */

UDA1380_REG03_ANAMIX,/ *模拟混音器设置 */

UDA1380_REG04_HEADAMP,/ *耳机放大器设置 */

UDA1380_REG10_MSTRVOL = 0x10,/ *主音量控制 */

UDA1380_REG11_MIXVOL,/ *混音器音量控制 */

UDA1380_REG12_MODEBBT,/ *模式选择,左右低音增强和 高音设置* /

UDA1380_REG13_MSTRMUTE,/ *主静音,通道1和通道2 去加重和通道静音* /

UDA1380_REG14_MIXSDO,/ *混频器,静音检测器和插值 过滤器过采样设置* /

UDA1380_REG20_DECVOL = 0x20,/ *抽取器音量控制 */

UDA1380_REG21_PGA,/ * PGA设置和静音 */

UDA1380_REG22_ADC,/ * ADC设置 */

UDA1380_REG23_AGC,/ * AGC设置 */

UDA1380_REG7F_SW_RESET = 0x7F / *恢复L3默认值 */

} UDA1380_Registers;





/ *状态位的寄存器映射(读出)* /

#定义UDA1380_REG18_HEADPHONE 0x18 / *插值过滤器状态* /

#定义UDA1380_REG28_DEC 0x28 / *抽取器状态* /



/ *评估模式和时钟设置* /

#定义REG00_EV(x)(x<< 13)

#定义REG00_EN_ADC(1<< 11)

#定义REG00_EN_DEC(1<< 10)

#定义REG00_EN_DAC(1<< 9)

#定义REG00_EN_INT(1<< 8)

#定义REG00_ADC_CLK(1<< 5)

#定义REG00_DAC_CLK(1<< 4)

#定义REG00_SYS_DIV_768Fs(3<< 2)

#定义REG00_SYS_DIV_512Fs(2<< 2)

#定义REG00_SYS_DIV_384Fs(1<< 2)

#定义REG00_SYS_DIV_256Fs(0<< 2)

#定义REG00_PLL_50_TO_100 3

#定义REG00_PLL_25_TO_50 2

#定义REG00_PLL_12_5_TO_25 1

#定义REG00_PLL_6_25_TO_12_25 0



/ * I2S总线输入和输出设置* /

#定义REG01_SFORI_I2S_BUS(0<< 8)

#定义REG01_SFORI_LSB_JUSTIFIED_16BIT(1<< 8)

#定义REG01_SFORI_LSB_JUSTIFIED_18BIT(2<< 8)

#定义REG01_SFORI_LSB_JUSTIFIED_20BIT(3<< 8)

#定义REG01_SFORI_MSB_JUSTIFIED(5<< 8)

#定义REG01_SFORO_I2S_BUS0

#定义REG01_SFORO_LSB_JUSTIFIED_16BIT1

#定义REG01_SFORO_LSB_JUSTIFIED_18BIT2

#定义REG01_SFORO_LSB_JUSTIFIED_20BIT3

#定义REG01_SFORO_MSB_JUSTIFIED5

#定义REG01_SEL_SOURCE_DOUT_DECIMATOR(0<< 6)

#定义REG01_SEL_SOURCE_DOUT_MIXER(1<< 6)

#定义REG01_SIM_INTERFACE_SLAVE(0<< 4)

#定义REG01_SIM_INTERFACE_MASTER(1<< 4)



/ *电源控制设置* /

#定义REG02_PON_PLL(1<< 15)

#定义REG02_PON_HP(1<< 13)

#定义REG02_PON_DAC(1<< 10)

#定义REG02_PON_BIAS(1<< 8)

#定义REG02_EN_AVC(1<< 7)

#定义REG02_PON_AVC(1<< 6)

#定义REG02_PON_LNA(1<< 4)

#定义REG02_PON_PGAL(1<< 3)

#定义REG02_PON_ADCL(1<< 2)

#定义REG02_PON_PGAR(1<< 1)

#定义REG02_PON_ADCR(1<< 0)



/ * ADC设置* /

#定义REG22_ADC_ADCPOL_INV(值)(值<< 12)

#定义REG22_VGA_CTRL(值)((值& 0xF) << 8)

#定义REG22_SEL_LNA_ENABLE(1<< 3)

#定义REG22_SEL_MIC_ENABLE(1<< 2)

#定义REG22_SKIP_DCFIL(1<< 1)

#定义REG22_EN_DCFIL(1<< 0)



#定义ADC_L_LINE_IN 0

#定义ADC_L_SEL_MIC 1



#定义MULTIPLEXER_ADC_R 0

#定义MULTIPLEXER_ADC_L 1 / * * /



void UDA1380_vfAudioInit(void);

// void UDA1380_I2S_IRQHandler(void);



extern int UDA1380_EnableAudioOut(int32_t使能);

extern int UDA1380_EnableAudioIn(int32_t enable);

extern void UDA1380_CodecInit(void);



#万一 / * UDA1380_H_ * /


----------

/ **

* @file uda1380.c

* @ RDB1768v2上使用的UDA1380音频编解码器的@purposeDriver代码

* @version 0.3

* @ date14。 2012年2月2日

* @ authorCT-PIM / NXP

*----

*本文描述的软件仅用于说明目的

*为客户提供有关

* 产品。该软件按“原样”提供,没有任何保证。

*恩智浦半导体公司不承担任何责任。

*使用该软件,不传达任何专利的许可或所有权,

*版权,或掩盖该产品的版权。恩智浦半导体

*保留在不更改软件的情况下进行更改的权利

* 通知。恩智浦半导体也不做任何陈述或

*保证该应用程序适用于指定的

*无需进一步测试或修改即可使用。

****************************************************** ******************** /



/ ***************************************************** ********************* /

/ *包含文件* /

/ ***************************************************** ********************* /

#包括“ LPC17xx.h”

#包括“ lpc_types.h”

#包括“ lpc17xx_pinsel.h”

#包括“ lpc17xx_i2c.h”

#包括“ lpc17xx_i2s.h”



#包括“ uda1380.h”

#包括



/ **将I2C设备用作从设备定义* /

#定义USEDI2CDEV_M0



/ **最大缓冲区长度* /

#定义BUFFER_SIZE0x10

#定义AUDIO_INIT_DELAY 2000



#定义ECHO_RECORDING

//#定义REC_FROM_LINE_IN



#if(USEDI2CDEV_M == 0)

#定义I2CDEV_M LPC_I2C0

#elif(USEDI2CDEV_M == 2)

#定义I2CDEV_M LPC_I2C2

#别的

#error“未定义主I2C设备!”

#万一



I2C_M_SETUP_Type transferMCfg;

uint8_t I2C_data_transfer [3];



extern long int gQ31_Peak_L,gQ31_Peak_R;

extern long int gQ31_Peak [2];



long int Q31_I2S_Left,Q31_I2S_Right;



结构uda1380_setup

{

UDA1380_Registers reg;

uint16_t val;

};



/ *编解码器预设* /

静态const struct uda1380_setup uda1380_init [] =

{

{UDA1380_REG7F_SW_RESET,0xFFFF},

{UDA1380_REG01_I2S,0x0000},

{UDA1380_REG03_ANAMIX,0x3F3F},

{UDA1380_REG13_MSTRMUTE,0x0000},

#ifdef REC_FROM_LINE_IN

{UDA1380_REG22_ADC,0x00},

#别的

{UDA1380_REG22_ADC,REG22_SEL_LNA_ENABLE | REG22_SEL_MIC_ENABLE | REG22_SKIP_DCFIL},

#万一

{UDA1380_REG21_PGA,0x00},

};



静态const struct uda1380_setupplaying_enable [] =

{

{UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},

{UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},

};



静态const struct uda1380_setupplayback_disable [] =

{

{UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},

{UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},

};



静态const struct uda1380_setup recording_enable [] =

{

#ifdef ECHO_RECORDING

{UDA1380_REG02_PWRCTRL,(1<<15) | (1 << 13) | (1 << 10) | ( 1 << 8) | (1 << 7) | (1 << 6) | (1 << 4) | (1 << 3) | (1<<2) | (1 << 1) | (1<<0)},

{UDA1380_REG00_EVALCLK,(1<<11) | (1<<10) | (1<<9) | (1<<8) | (1<<4) | (1<<5)},

#别的

{UDA1380_REG02_PWRCTRL,(1<<15) | ( 1 << 8) | (1 << 7) | (1 << 6) | (1 << 4) | (1 << 3) | (1<<2) | (1 << 1) | (1<<0)},

{UDA1380_REG00_EVALCLK,(1<<11) | (1<<10)| (1<<5)},

#万一

};



静态const struct uda1380_setup recording_disable [] =

{

{UDA1380_REG02_PWRCTRL,0x00},

{UDA1380_REG00_EVALCLK,0x00},

};



/ ***************************************************** ********************* /

/ *本地函数原型* /

/ ***************************************************** ********************* /

静态int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值);

静态整数uda1380_SetupData(const struct uda1380_setup * preset,int cnt);



/ ***************************************************** ********************* /

/ *公共功能定义* /

/ ***************************************************** ********************* /

int UDA1380_EnableAudioIn(int32_t启用)

{

const struct uda1380_setup *预设=启用? recording_enable: recording_disable;

int cnt =启用? sizeof(recording_enable):sizeof(recording_disable);

cnt / = sizeof(* preset);

返回uda1380_SetupData(preset,cnt);

}



int UDA1380_EnableAudioOut(int32_t启用)

{

const struct uda1380_setup *预设=启用? playing_enable: playback_disable;

int cnt =启用? sizeof(playback_enable):sizeof(playback_disable);

cnt / = sizeof(* preset);

返回uda1380_SetupData(preset,cnt);

}



无效的UDA1380_CodecInit(void)

{

PINSEL_CFG_Type PinCfg;



/ * I2C块------------------------------- * /

/*

*初始化I2C引脚连接

*/

PinCfg.OpenDrain = 0;

PinCfg.Pinmode = 0;

PinCfg.Funcnum = 1;

PinCfg.Pinnum = 27;

PinCfg.Portnum = 0;

PINSEL_ConfigPin(&PinCfg);

PinCfg.Pinnum = 28;

PINSEL_ConfigPin(&PinCfg);



/ *初始化主I2C外设* /

I2C_Init(I2CDEV_M,400000);



/ *启用主I2C操作* /

I2C_Cmd(I2CDEV_M,ENABLE);



/ *首先启动I2C从设备* /

transferMCfg.sl_addr7bit = UDA1380_ADDR;

transferMCfg.tx_data = I2C_data_transfer;

transferMCfg.tx_length = sizeof(I2C_data_transfer);

transferMCfg.rx_data = NULL;

transferMCfg.rx_length = 0;

transferMCfg.retransmissions_max = 3;



uda1380_SetupData(uda1380_init,sizeof(uda1380_init)/ sizeof(* uda1380_init));

}



/ ***************************************************** ********************* /

/ *本地函数定义* /

/ ***************************************************** ********************* /

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)

{

I2C_data_transfer [0] = reg;

I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);

I2C_data_transfer [2] =(uint8_t)(值& 0xFF);

如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)

{

return(value);

}

else

{

return(~value);

}

}



静态整数uda1380_SetupData(const struct uda1380_setup * preset,int cnt)

{

int error = 0, i;

for (i = 0; i < cnt; i ++)

{

错误+ = UDA1380_SetRegister(预设->reg,(uint32_t)preset->val) != (uint32_t)preset->val;

preset++;

}

return error;

}



你好,

这将有助于打开抽取器和插值器块

尝试在寄存器0中设置EN_ADC,EN_DEC,EN_DAC,EN_INT。



这些是我的设置,适用于外部应用的24位ADC,单DAC sysclk at 256Fs



请注意,它们按16位小端顺序排列。



const unsigned short CODEC_SETUP_0 [] = {//系统设置

0x000F,// [0] EvalMode

0x1000,// [1] I2SIO

0x0F25,// [2]电源控制

0x0000,// [3]混音器

0x0202 // [4]耳机放大器

};



const unsigned short CODEC_SETUP_1 [] = {//插值过滤器

0x2121,// [0]主音量

0x0000,// [1]混音器

0x0000,// [2]模式

0x0000,// [3]静音

0x0000 // [4]过采样

};



const unsigned short CODEC_SETUP_2 [] = {//抽取滤波器

0x0000,// [0]抽取器音量48(最大)

0x0000,// [1] PGA,8(最大)

0x0000,// [2] ADC

0x0000 // [3] AGC

};



问候



菲尔

发件人:l ... [mailto:l ...]代表Sharan Nalawadad
发送:2012年4月23日10:55
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口





你好,

遵循我为编解码器设置的值,

/ *编解码器预设* /
静态const struct uda1380_setup uda1380_init [] =
{
{UDA1380_REG7F_SW_RESET,0xFFFF},
{UDA1380_REG01_I2S,0x0000},
{UDA1380_REG03_ANAMIX,0x3F3F},
{UDA1380_REG13_MSTRMUTE,0x0000},
{UDA1380_REG22_ADC,REG22_SEL_LNA_ENABLE | REG22_SEL_MIC_ENABLE | 1个<<1},
{UDA1380_REG21_PGA,0x00},
};

静态const struct uda1380_setupplaying_enable [] =
{
{UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},
{UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},
};

每当我在VOUTL,VOUTR,VOUTLHP和VOUTRHP处获得0v时。

随函附上uda1380的驱动程序文件。

代码中是否缺少任何内容。

谢谢

________________________________
来自:菲尔·杨>
致:我...
发送:2012年4月23日,星期一,下午12:58
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

在16位I2S模式下,这取决于I2S的配置方式。 正确,除非您将输出取反。

您必须确保以与I2S控制器相同的方式配置I2S控制器。 codec.

编解码器可以在左对齐或右对齐的多种模式下工作。

尝试查看带有示波器的I2S_TX_SDA / I2S_TX_SCK / I2S_TX_WS信号。

计算SCK / WS之间的比率,以确定您真正发送的格式, 然后查看SDA与WS的一致性,以了解I2S的真正价值 sending.

您发送什么值来设置编解码器?默认情况下,几乎所有内容 内部电源关闭。

发件人:l ... [mailto:lp ... ]代表Sharan Nalawadad
发送:2012年4月23日08:02
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

为了调试,我在TIMER0_IRQHandler中连续发送0x7FFF。溃败 (VOUTR)线显示0V。如果我没记错的话,ROUT应该显示3.3V对吗?

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月23日,星期一,上午11:58
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

抱歉,相对于“ 0”电平的偏移量约为-1mv,该电平应为 1.6v.

另外,您还需要继续发送它,因为它是流,因此任何值都将保留 在那里只有1个音频采样时钟周期。

我会编写一个简单的ISR,以16位交替输出0x8000和0x 7ffff 模式,或在24位模式下为0x80000000和0x7fffffff。

来自:我... [mailto:l... ] On Behalf Of Phil Young
发送:2012年4月23日07:24
致:我...
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

请记住,CODEC是2的补码设备,将是MSB aligned.

因此,要从编解码器中获取最大值,您需要左移,

如果左移1023,将得到很小的值,约为1mV。

问候

菲尔

来自:我... [mailto:lpc2000... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月23日06:21
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

I2C现在工作正常。问题是L3MODE未接地。但 仍然无法播放音频。

对于内部DAC,如果我分配1023<<6个数字值,那么我可以检查模拟值 DOUT上的电压值(3.3v)
同样的事情,可以通过发送数字值来检查UDA1380 I2SSend?

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月23日,星期一,9:22 AM
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

是的。我给了SCL和SDA线上拉电阻。并配置了I2C Specifically.

我没有按原样使用“ LPC17xxSpeexVocoder LPCXpresso”代码。因为我 不需要Speex和录音等其他内容。只有我在尝试玩 wave file.

我所指的示意图是
http://support.code-red-tech.com/CodeRedWiki/RDB1768V2Support?action=AttachFile &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf

感谢您的详细邮件。首先,我将解决I2C问题,然后研究I2S and SYSTCLK.

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上11:17
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

这与I2S接口无关,只是通过I2C发送命令 界面来设置编解码器。

当然,您还需要在LPC1768上设置I2S接口,并且 I2S接口模式上的设置需要反映您如何配置 1380.

在执行此代码之前,您需要设置I2C接口引脚 正确地设置I2C接口的时钟分频器,以便 与1380的通信低于最大速率。

由于I2C仅需要2个信号,捕获这些信号很简单 使用DSO来确保正确驱动接口。

无需SYSCLK,就可以通过I2C接口进行通信 我已经在1380上运行了

就我而言,我使用了aardvark来监视I2C接口并验证它 工作正常。

该应用笔记未介绍如何设置I2C界面, 没有电路板的原理图,但是您正在运行代码 完全与项目中的状态相同,或者您是否以此为基础进行新的设计 project?.

为了使I2C正常工作,您需要在SDA和SCL上具有外部上拉电阻, 并专门配置I2C引脚,在1768年这取决于哪个I2C 您正在使用的某些接口由I2CPADCFG寄存器控制。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日16:37
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

感谢您的详细邮件。

我指的是RDB1768V2和CoiNel LPC1768的示意图。

并从以下链接引用代码,

http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip

按照原理图进行连接。但是它不能 “ I2C_MasterTransferData”。

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

是否取决于SYSTCLK?
在我的应用程序中,我不需要speex和录音。只想玩 wave file.

请帮助我解决这个问题。

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上8:29
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

我可以在当前的硬件上可靠地工作,但是可能有些棘手 取决于您选择连接的信号。

UDA1380可以使用以下命令从Tx或Rx通道数据时钟生成时钟 内部PLL,但是在执行此操作时会遇到一些时序问题 防止在4线模式下工作

如果您从LPC1768提供sysclk,则可以使4线模式工作 since the

在这种情况下,I2S模块不需要MClk信号,但可以使用 驱动MCLK信号。

本来我打算使用此模式,从1768年生成Tx时钟 并使用1380内部的PLL生成SYSCLK,但在这种情况下, 由于设备中的相位延迟,Rx数据的时序不正确,因此 最好从1768年生成MCLk并将其提供给SYSCLK。

从属模式下UDA1380中的sysclk必须与以下对象具有固定的相位关系 Tx和Rx时钟。

我发现的最简单可靠的解决方案是从1768年生成一个时钟 使用计时器(如果可以使用键盘,则使用MCLK),然后设置1380 到主模式,在该模式下它将生成Rx_SCK并将其连接到Tx_Sck, WS信号也一样。

然后设置1768 I2S接口,以便Tx和Rx都使用来自 1380作为主计时时钟,然后可以将I2S设置为产生 每个收到的新样本都会产生中断,从而避免了计时问题。

即将时钟驱动到1380.SYSCLK为256x

将1380.BCKO连接到1380.BCKI和1768.I2S_RX_SCK(或1768.I2S_TX_SCK)

将1380.WSO连接到1380.WSI和17868.I2S_RX_WS(或1768.I2S_TX_WS)

在1768年将Rx和Tx I2S设置为从设备,因此1380提供位时钟。

问候

菲尔

来自:我... [mailto:lpc2000 ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日10:34
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式如下:
每125us产生一个中断。即8KHz采样率。但是什么是 16Khz configured
在I2S中?即I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月22日,星期日,下午3:01
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式为: 每125us产生一次中断。但是I2S中配置的16Khz是什么? IE I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:肯尼斯 >
致:我...
发送:2012年4月21日,星期六,晚上8:37
主题:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

AN的更新版本位于NXP.com网站和 LPCware.com site:

http://www.lpcware.com/gfiles/devper/lpc175x_6x
http://www.nxp.com/products/microcontrollers/cortex_m3/lpc1700/LPC1768FET100.html#documentation

问候,


-在... ,Sharan Nalawadad写道:
>
>感谢您的回复。
>
>
>
>
>________________________________
> From: cfbsoftware1
> To: l...
>发送:2012年4月21日,星期六,上午11:33
>主题:[lpc2000]回复:LPC1768与UDA1380的接口
>
>
> Â
> --- In l... ,Sharan Nalawadad写道:
> >
> > Hello,
> >
> >
> >我正在尝试通过使用播放音频波形文件(48Khz采样率和16位) 带UDA1380的CoiNel LPC1768H。
> >
> >我发现与“在NXP的LPC175x / 6x MCU系列中使用Speex”相关的文档 AN11085文件在pdf中,它说明了有关UDA1380的信息。但是在此源代码中 没有与UDA1380相关的代码。我在以下链接中获得了此源代码,
> >
> > http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip
> >但是在此源代码中,没有与UDA1380相关的代码。
> >
> >我在哪里可以获得工作代码?请共享示例源代码。
> >
>
>在an11085.zip中,您将找到另一个名为'LPC17xxSpeexVocoder的zip文件。 LPCXpresso.zip”。在该zip文件中,您会找到“ uda1380_driver.c”,我认为 是您要查找的文件(或其中一个文件)。
>
> Regards,
> Chris Burrows
>
> CFB Software
>Astrobe v4.1:现在支持Cortex-M3微控制器
> http://www.astrobe.com
>
>
>
>
>
>























----------

/ ***************************************************** ********************** // **
* @文件uda1380.h
* @brief头文件,用于UDA1380音频编解码器的音频驱动程序代码
*在code_red RDB1768v2板上使用
* @版本1.0
* @日期04.五月。 2011年
* @作者CT-PIM
****************************************************** ************************
*本文描述的软件仅用于说明目的
*为客户提供有关
* 产品。该软件按“原样”提供,没有任何保证。
*恩智浦半导体公司不承担任何责任。
*使用该软件,不传达任何专利的许可或所有权,
*版权,或掩盖该产品的版权。恩智浦半导体
*保留在不更改软件的情况下进行更改的权利
* 通知。恩智浦半导体也不做任何陈述或
*保证该应用程序适用于指定的
*无需进一步测试或修改即可使用。
****************************************************** ************************ /
#ifndef UDA1380_H_
#定义UDA1380_H_

/ *编解码器的I2C地址* /
#定义UDA1380_ADDR(0x30>>1)
#if 0
#定义UDA1380_REG00_EVALCLK 0x00 / *评估模式,WSPLL设置,时钟 分频器和时钟选择器* /
#定义UDA1380_REG01_I2S 0x01 / * I2S总线I / O设置* /
#定义UDA1380_REG02_PWRCTRL 0x02 / *电源控制设置* /
#定义UDA1380_REG03_ANAMIX 0x03 / *模拟混音器设置* /
#定义UDA1380_REG04_HEADAMP 0x04 / *耳机放大器设置* /
#定义UDA1380_REG10_MSTRVOL 0x10 / *主音量控制* /
#定义UDA1380_REG11_MIXVOL 0x11 / *混音器音量控制* /
#define UDA1380_REG13_MODEBBT 0x12 / *模式选择,左右低音增强, 和高音设置* /
#定义UDA1380_REG13_MSTRMUTE 0x13 / *主静音,通道1和通道2 去加重和通道静音* /
#定义UDA1380_REG14_MIXSDO 0x14 / *混频器,静音检测器和插值 过滤器过采样设置* /
#定义UDA1380_REG20_DECVOL 0x20 / *抽取器音量控制* /
#定义UDA1380_REG21_PGA 0x21 / * PGA设置并静音* /
#定义UDA1380_REG22_ADC 0x22 / * ADC设置* /
#定义UDA1380_REG23_AGC 0x23 / * AGC设置* /
#定义UDA1380_REG7F_SW_RESET 0x7F / *恢复L3默认值* /
#万一

/ *注册控制设置图(写)* /
Typedef枚举
{
UDA1380_REG00_EVALCLK = 0x00,/ *评估模式,WSPLL设置,时钟分频器 和时钟选择器* /
UDA1380_REG01_I2S,/ * I2S总线I / O设置* /
UDA1380_REG02_PWRCTRL,/ *电源控制设置* /
UDA1380_REG03_ANAMIX,/ *模拟混音器设置* /
UDA1380_REG04_HEADAMP,/ *耳机放大器设置* /
UDA1380_REG10_MSTRVOL = 0x10,/ *主音量控制* /
UDA1380_REG11_MIXVOL,/ *混音器音量控制* /
UDA1380_REG12_MODEBBT,/ *模式选择,左右低音增强和高音 settings */
UDA1380_REG13_MSTRMUTE,/ *主静音,通道1和通道2去加重和 channel mute */
UDA1380_REG14_MIXSDO,/ *混频器,静音检测器和插值滤波器 过采样设置* /
UDA1380_REG20_DECVOL = 0x20,/ *抽取器音量控制* /
UDA1380_REG21_PGA,/ * PGA设置和静音* /
UDA1380_REG22_ADC,/ * ADC设置* /
UDA1380_REG23_AGC,/ * AGC设置* /
UDA1380_REG7F_SW_RESET = 0x7F / *恢复L3默认值* /
} UDA1380_Registers;
/ *状态位的寄存器映射(读出)* /
#定义UDA1380_REG18_HEADPHONE 0x18 / *插值过滤器状态* /
#定义UDA1380_REG28_DEC 0x28 / *抽取器状态* /

/ *评估模式和时钟设置* /
#定义REG00_EV(x)(x<< 13)
#定义REG00_EN_ADC(1<< 11)
#定义REG00_EN_DEC(1<< 10)
#定义REG00_EN_DAC(1<< 9)
#定义REG00_EN_INT(1<< 8)
#定义REG00_ADC_CLK(1<< 5)
#定义REG00_DAC_CLK(1<< 4)
#定义REG00_SYS_DIV_768Fs(3 << 2)
#定义REG00_SYS_DIV_512Fs(2<< 2)
#定义REG00_SYS_DIV_384Fs(1<< 2)
#定义REG00_SYS_DIV_256Fs(0<< 2)
#定义REG00_PLL_50_TO_100 3
#定义REG00_PLL_25_TO_50 2
#定义REG00_PLL_12_5_TO_25 1
#定义REG00_PLL_6_25_TO_12_25 0

/ * I2S总线输入和输出设置* /
#定义REG01_SFORI_I2S_BUS(0<< 8)
#定义REG01_SFORI_LSB_JUSTIFIED_16BIT(1 << 8)
#定义REG01_SFORI_LSB_JUSTIFIED_18BIT(2<< 8)
#定义REG01_SFORI_LSB_JUSTIFIED_20BIT(3<< 8)
#定义REG01_SFORI_MSB_JUSTIFIED(5<< 8)
#定义REG01_SFORO_I2S_BUS 0
#定义REG01_SFORO_LSB_JUSTIFIED_16BIT 1
#定义REG01_SFORO_LSB_JUSTIFIED_18BIT 2
#定义REG01_SFORO_LSB_JUSTIFIED_20BIT 3
#定义REG01_SFORO_MSB_JUSTIFIED 5
#定义REG01_SEL_SOURCE_DOUT_DECIMATOR(0<< 6)
#定义REG01_SEL_SOURCE_DOUT_MIXER(1<< 6)
#定义REG01_SIM_INTERFACE_SLAVE(0<< 4)
#定义REG01_SIM_INTERFACE_MASTER(1<< 4)

/ *电源控制设置* /
#定义REG02_PON_PLL(1<< 15)
#定义REG02_PON_HP(1<< 13)
#定义REG02_PON_DAC(1<< 10)
#定义REG02_PON_BIAS(1<< 8)
#定义REG02_EN_AVC(1<< 7)
#定义REG02_PON_AVC(1<< 6)
#定义REG02_PON_LNA(1<< 4)
#定义REG02_PON_PGAL(1<< 3)
#定义REG02_PON_ADCL(1<< 2)
#定义REG02_PON_PGAR(1<< 1)
#定义REG02_PON_ADCR(1<< 0)

/ * ADC设置* /
#定义REG22_ADC_ADCPOL_INV(值)(值<< 12)
#定义REG22_VGA_CTRL(值)((值& 0xF) << 8)
#定义REG22_SEL_LNA_ENABLE(1<< 3)
#定义REG22_SEL_MIC_ENABLE(1<< 2)
#定义REG22_SKIP_DCFIL(1<< 1)
#定义REG22_EN_DCFIL(1<< 0)

#定义ADC_L_LINE_IN 0
#定义ADC_L_SEL_MIC 1

#定义MULTIPLEXER_ADC_R 0
#定义MULTIPLEXER_ADC_L 1 / * * /

void UDA1380_vfAudioInit(void);
// void UDA1380_I2S_IRQHandler(void);

extern int UDA1380_EnableAudioOut(int32_t使能);
extern int UDA1380_EnableAudioIn(int32_t enable);
extern void UDA1380_CodecInit(void);

#万一 / * UDA1380_H_ * /

----------

/ **
* @文件uda1380.c
* @在RDB1768v2上使用的UDA1380音频编解码器的用途驱动程序代码
* @版本0.3
* @日期14. 2012年2月
* @作者CT-PIM / NXP
* ----------------------
*本文描述的软件仅用于说明目的
*为客户提供有关
* 产品。该软件按“原样”提供,没有任何保证。
*恩智浦半导体公司不承担任何责任。
*使用该软件,不传达任何专利的许可或所有权,
*版权,或掩盖该产品的版权。恩智浦半导体
*保留在不更改软件的情况下进行更改的权利
* 通知。恩智浦半导体也不做任何陈述或
*保证该应用程序适用于指定的
*无需进一步测试或修改即可使用。
****************************************************** ******************** /

/ ***************************************************** ********************* /
/ *包含文件* /
/ ***************************************************** ********************* /
#包括“ LPC17xx.h”
#包括“ lpc_types.h”
#包括“ lpc17xx_pinsel.h”
#包括“ lpc17xx_i2c.h”
#包括“ lpc17xx_i2s.h”

#包括“ uda1380.h”
#包括

/ **将I2C设备用作从设备定义* /
#定义USEDI2CDEV_M 0

/ **最大缓冲区长度* /
#定义BUFFER_SIZE 0x10
#定义AUDIO_INIT_DELAY 2000

#定义ECHO_RECORDING
//#定义REC_FROM_LINE_IN

#if(USEDI2CDEV_M == 0)
#定义I2CDEV_M LPC_I2C0
#elif(USEDI2CDEV_M == 2)
#定义I2CDEV_M LPC_I2C2
#别的
#error“未定义主I2C设备!”
#万一

I2C_M_SETUP_Type transferMCfg;
uint8_t I2C_data_transfer [3];

extern long int gQ31_Peak_L,gQ31_Peak_R;
extern long int gQ31_Peak [2];

long int Q31_I2S_Left,Q31_I2S_Right;

结构uda1380_setup
{
UDA1380_Registers reg;
uint16_t val;
};

/ *编解码器预设* /
静态const struct uda1380_setup uda1380_init [] =
{
{UDA1380_REG7F_SW_RESET,0xFFFF},
{UDA1380_REG01_I2S,0x0000},
{UDA1380_REG03_ANAMIX,0x3F3F},
{UDA1380_REG13_MSTRMUTE,0x0000},
#ifdef REC_FROM_LINE_IN
{UDA1380_REG22_ADC,0x00},
#别的
{UDA1380_REG22_ADC,REG22_SEL_LNA_ENABLE | REG22_SEL_MIC_ENABLE | REG22_SKIP_DCFIL},
#万一
{UDA1380_REG21_PGA,0x00},
};

静态const struct uda1380_setupplaying_enable [] =
{
{UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},
{UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},
};

静态const struct uda1380_setupplayback_disable [] =
{
{UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},
{UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},
};

静态const struct uda1380_setup recording_enable [] =
{
#ifdef ECHO_RECORDING
{UDA1380_REG02_PWRCTRL,(1<<15) | (1 << 13) | (1 << 10) | ( 1 << 8) | (1 << 7) | (1 << 6) | (1 << 4) | (1 << 3) | (1<<2) | (1 << 1) | (1<<0)},
{UDA1380_REG00_EVALCLK,(1<<11) | (1<<10) | (1<<9) | (1<<8) | (1<<4) | (1<<5)},
#别的
{UDA1380_REG02_PWRCTRL,(1<<15) | ( 1 << 8) | (1 << 7) | (1 << 6) | (1 << 4) | (1 << 3) | (1<<2) | (1 << 1) | (1<<0)},
{UDA1380_REG00_EVALCLK,(1<<11) | (1<<10)| (1<<5)},
#万一
};

静态const struct uda1380_setup recording_disable [] =
{
{UDA1380_REG02_PWRCTRL,0x00},
{UDA1380_REG00_EVALCLK,0x00},
};

/ ***************************************************** ********************* /
/ *本地函数原型* /
/ ***************************************************** ********************* /
静态int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值);
静态整数uda1380_SetupData(const struct uda1380_setup * preset,int cnt);

/ ***************************************************** ********************* /
/ *公共功能定义* /
/ ***************************************************** ********************* /
int UDA1380_EnableAudioIn(int32_t启用)
{
const struct uda1380_setup *预设=启用? recording_enable: recording_disable;
int cnt =启用? sizeof(recording_enable):sizeof(recording_disable);
cnt / = sizeof(* preset);
返回uda1380_SetupData(preset,cnt);
}

int UDA1380_EnableAudioOut(int32_t启用)
{
const struct uda1380_setup *预设=启用? playing_enable: playback_disable;
int cnt =启用? sizeof(playback_enable):sizeof(playback_disable);
cnt / = sizeof(* preset);
返回uda1380_SetupData(preset,cnt);
}

无效的UDA1380_CodecInit(void)
{
PINSEL_CFG_Type PinCfg;

/ * I2C块---------------------- * /
/ *
*初始化I2C引脚连接
* /
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Funcnum = 1;
PinCfg.Pinnum = 27;
PinCfg.Portnum = 0;
PINSEL_ConfigPin(&PinCfg);
PinCfg.Pinnum = 28;
PINSEL_ConfigPin(&PinCfg);

/ *初始化主I2C外设* /
I2C_Init(I2CDEV_M,400000);

/ *启用主I2C操作* /
I2C_Cmd(I2CDEV_M,ENABLE);

/ *首先启动I2C从设备* /
transferMCfg.sl_addr7bit = UDA1380_ADDR;
transferMCfg.tx_data = I2C_data_transfer;
transferMCfg.tx_length = sizeof(I2C_data_transfer);
transferMCfg.rx_data = NULL;
transferMCfg.rx_length = 0;
transferMCfg.retransmissions_max = 3;

uda1380_SetupData(uda1380_init,sizeof(uda1380_init)/ sizeof(* uda1380_init));
}

/ ***************************************************** ********************* /
/ *本地函数定义* /
/ ***************************************************** ********************* /
int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

静态整数uda1380_SetupData(const struct uda1380_setup * preset,int cnt)
{
整数错误= 0,我;
对于(i = 0; i< cnt; i ++)
{
错误+ = UDA1380_SetRegister(预设->reg,(uint32_t)preset->val) != (uint32_t)preset->val;
预设++;
}
返回错误;
}





抱歉,我的意思是大端。





发件人:l ... [mailto:l ...]代表Phil Young
发送:2012年4月23日11:12
致:我...
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口





你好,

这将有助于打开抽取器和插值器块

尝试在寄存器0中设置EN_ADC,EN_DEC,EN_DAC,EN_INT。

这些是我的设置,适用于外部应用的24位ADC,单DAC sysclk at 256Fs

请注意,它们按16位小端顺序排列。

const unsigned short CODEC_SETUP_0 [] = {//系统设置

0x000F,// [0] EvalMode

0x1000,// [1] I2SIO

0x0F25,// [2]电源控制

0x0000,// [3]混音器

0x0202 // [4]耳机放大器

};

const unsigned short CODEC_SETUP_1 [] = {//插值过滤器

0x2121,// [0]主音量

0x0000,// [1]混音器

0x0000,// [2]模式

0x0000,// [3]静音

0x0000 // [4]过采样

};

const unsigned short CODEC_SETUP_2 [] = {//抽取滤波器

0x0000,// [0]抽取器音量48(最大)

0x0000,// [1] PGA,8(最大)

0x0000,// [2] ADC

0x0000 // [3] AGC

};

问候

菲尔

发件人:l ... [mailto:lp ... ]代表Sharan Nalawadad
发送:2012年4月23日10:55
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

遵循我为编解码器设置的值,

/ *编解码器预设* /
静态const struct uda1380_setup uda1380_init [] =
{
{UDA1380_REG7F_SW_RESET,0xFFFF},
{UDA1380_REG01_I2S,0x0000},
{UDA1380_REG03_ANAMIX,0x3F3F},
{UDA1380_REG13_MSTRMUTE,0x0000},
{UDA1380_REG22_ADC,REG22_SEL_LNA_ENABLE | REG22_SEL_MIC_ENABLE | 1个<<1},
{UDA1380_REG21_PGA,0x00},
};

静态const struct uda1380_setupplaying_enable [] =
{
{UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},
{UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},
};

每当我在VOUTL,VOUTR,VOUTLHP和VOUTRHP处获得0v时。

随函附上uda1380的驱动程序文件。

代码中是否缺少任何内容。

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月23日,星期一,下午12:58
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

在16位I2S模式下,这取决于I2S的配置方式。 正确,除非您将输出取反。

您必须确保以与I2S控制器相同的方式配置I2S控制器。 codec.

编解码器可以在左对齐或右对齐的多种模式下工作。

尝试查看带有示波器的I2S_TX_SDA / I2S_TX_SCK / I2S_TX_WS信号。

计算SCK / WS之间的比率,以确定您真正发送的格式, 然后查看SDA与WS的一致性,以了解I2S的真正价值 sending.

您发送什么值来设置编解码器?默认情况下,几乎所有内容 内部电源关闭。

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月23日08:02
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

为了调试,我在TIMER0_IRQHandler中连续发送0x7FFF。溃败 (VOUTR)线显示0V。如果我没记错的话,ROUT应该显示3.3V对吗?

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月23日,星期一,上午11:58
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

抱歉,相对于“ 0”电平的偏移量约为-1mv,该电平应为 1.6v.

另外,您还需要继续发送它,因为它是流,因此任何值都将保留 在那里只有1个音频采样时钟周期。

我会编写一个简单的ISR,以16位交替输出0x8000和0x 7ffff 模式,或在24位模式下为0x80000000和0x7fffffff。

来自:我... [mailto:lpc2000... ] On Behalf Of Phil Young
发送:2012年4月23日07:24
致:我...
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

请记住,CODEC是2的补码设备,将是MSB aligned.

因此,要从编解码器中获取最大值,您需要左移,

如果左移1023,将得到很小的值,约为1mV。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月23日06:21
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

I2C现在工作正常。问题是L3MODE未接地。但 仍然无法播放音频。

对于内部DAC,如果我分配1023<<6个数字值,那么我可以检查模拟值 DOUT上的电压值(3.3v)
同样的事情,可以通过发送数字值来检查UDA1380 I2SSend?

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月23日,星期一,9:22 AM
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

是的。我给了SCL和SDA线上拉电阻。并配置了I2C Specifically.

我没有按原样使用“ LPC17xxSpeexVocoder LPCXpresso”代码。因为我 不需要Speex和录音等其他内容。只有我在尝试玩 wave file.

我所指的示意图是
http://support.code-red-tech.com/CodeRedWiki/RDB1768V2Support?action=AttachFile &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf> &do=get&target = rdb1768v2r4.pdf

感谢您的详细邮件。首先,我将解决I2C问题,然后研究I2S and SYSTCLK.

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上11:17
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

这与I2S接口无关,只是通过I2C发送命令 界面来设置编解码器。

当然,您还需要在LPC1768上设置I2S接口,并且 I2S接口模式上的设置需要反映您如何配置 1380.

在执行此代码之前,您需要设置I2C接口引脚 正确地设置I2C接口的时钟分频器,以便 与1380的通信低于最大速率。

由于I2C仅需要2个信号,捕获这些信号很简单 使用DSO来确保正确驱动接口。

无需SYSCLK,就可以通过I2C接口进行通信 我已经在1380上运行了

就我而言,我使用了aardvark来监视I2C接口并验证它 工作正常。

该应用笔记未介绍如何设置I2C界面, 没有电路板的原理图,但是您正在运行代码 完全与项目中的状态相同,或者您是否以此为基础进行新的设计 project?.

为了使I2C正常工作,您需要在SDA和SCL上具有外部上拉电阻, 并专门配置I2C引脚,在1768年这取决于哪个I2C 您正在使用的某些接口由I2CPADCFG寄存器控制。

问候

菲尔

来自:我... [mailto:lpc2000 ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日16:37
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好菲尔先生,

感谢您的详细邮件。

我指的是RDB1768V2和CoiNel LPC1768的示意图。

并从以下链接引用代码,

http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip

按照原理图进行连接。但是它不能 “ I2C_MasterTransferData”。

int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

是否取决于SYSTCLK?
在我的应用程序中,我不需要speex和录音。只想玩 wave file.

请帮助我解决这个问题。

谢谢

________________________________
来自:菲尔·杨 >
致:我...
发送:2012年4月22日,星期日,晚上8:29
主题:RE:[lpc2000] Re:将LPC1768与UDA1380接口

你好,

我可以在当前的硬件上可靠地工作,但是可能有些棘手 取决于您选择连接的信号。

UDA1380可以使用以下命令从Tx或Rx通道数据时钟生成时钟 内部PLL,但是在执行此操作时会遇到一些时序问题 防止在4线模式下工作

如果您从LPC1768提供sysclk,则可以使4线模式工作 since the

在这种情况下,I2S模块不需要MClk信号,但可以使用 驱动MCLK信号。

本来我打算使用此模式,从1768年生成Tx时钟 并使用1380内部的PLL生成SYSCLK,但在这种情况下, 由于设备中的相位延迟,Rx数据的时序不正确,因此 最好从1768年生成MCLk并将其提供给SYSCLK。

从属模式下UDA1380中的sysclk必须与以下对象具有固定的相位关系 Tx和Rx时钟。

我发现的最简单可靠的解决方案是从1768年生成一个时钟 使用计时器(如果可以使用键盘,则使用MCLK),然后设置1380 到主模式,在该模式下它将生成Rx_SCK并将其连接到Tx_Sck, WS信号也一样。

然后设置1768 I2S接口,以便Tx和Rx都使用来自 1380作为主计时时钟,然后可以将I2S设置为产生 每个收到的新样本都会产生中断,从而避免了计时问题。

即将时钟驱动到1380.SYSCLK为256x

将1380.BCKO连接到1380.BCKI和1768.I2S_RX_SCK(或1768.I2S_TX_SCK)

将1380.WSO连接到1380.WSI和17868.I2S_RX_WS(或1768.I2S_TX_WS)

在1768年将Rx和Tx I2S设置为从设备,因此1380提供位时钟。

问候

菲尔

来自:我... [mailto:l... ] On 夏兰·纳拉瓦达(Sharan Nalawadad)的代表
发送:2012年4月22日10:34
致:我...
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式如下:
每125us产生一个中断。即8KHz采样率。但是什么是 16Khz configured
在I2S中?即I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:莎朗·纳拉瓦达德(Sharan Nalawadad) >
致:“我... " >
发送:2012年4月22日,星期日,下午3:01
主题:回复:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

感谢您的回复。

我正在尝试播放波形文件,采样率为48Khz,16位和单声道 channel.

我是音频编解码器的新手。所以这可能是低级的问题:)

1.我对UDA1380的SYSTCLK有点困惑,是需要外部时钟还是我 必须将TX_MCLK连接到UDA1380的SYSTCLK。

2.在此代码中,红色示例代码TIMER0的配置方式为: 每125us产生一次中断。但是I2S中配置的16Khz是什么? IE I2S_FreqConfig(LPC_I2S,16000,I2S_TX_MODE);

谢谢

________________________________
来自:肯尼斯 >
致:我...
发送:2012年4月21日,星期六,晚上8:37
主题:[lpc2000]回复:LPC1768与UDA1380的接口

你好,

AN的更新版本位于NXP.com网站和 LPCware.com site:

http://www.lpcware.com/gfiles/devper/lpc175x_6x
http://www.nxp.com/products/microcontrollers/cortex_m3/lpc1700/LPC1768FET100.html#documentation

问候,


-在... , Sharan Nalawadad wrote:
>
>感谢您的回复。
>
>
>
>
>________________________________
> From: cfbsoftware1
> To: l...
>发送:2012年4月21日,星期六,上午11:33
>主题:[lpc2000]回复:LPC1768与UDA1380的接口
>
>
> Â
> --- In l... , Sharan Nalawadad wrote:
> >
> > Hello,
> >
> >
> >我正在尝试通过使用播放音频波形文件(48Khz采样率和16位) 带UDA1380的CoiNel LPC1768H。
> >
> >我发现与“在NXP的LPC175x / 6x MCU系列中使用Speex”相关的文档 AN11085文件在pdf中,它说明了有关UDA1380的信息。但是在此源代码中 没有与UDA1380相关的代码。我在以下链接中获得了此源代码,
> >
> > http://ics.nxp.com/support/documents/microcontrollers/zip/an11085.zip
> >但是在此源代码中,没有与UDA1380相关的代码。
> >
> >我在哪里可以获得工作代码?请共享示例源代码。
> >
>
>在an11085.zip中,您将找到另一个名为'LPC17xxSpeexVocoder的zip文件。 LPCXpresso.zip”。在该zip文件中,您会找到“ uda1380_driver.c”,我认为 是您要查找的文件(或其中一个文件)。
>
> Regards,
> Chris Burrows
>
> CFB Software
>Astrobe v4.1:现在支持Cortex-M3微控制器
> http://www.astrobe.com
>
>
>
>
>
>























----------

/ ***************************************************** ********************** // **
* @文件uda1380.h
* @brief头文件,用于UDA1380音频编解码器的音频驱动程序代码
*在code_red RDB1768v2板上使用
* @版本1.0
* @日期04.五月。 2011年
* @作者CT-PIM
****************************************************** ************************
*本文描述的软件仅用于说明目的
*为客户提供有关
* 产品。该软件按“原样”提供,没有任何保证。
*恩智浦半导体公司不承担任何责任。
*使用该软件,不传达任何专利的许可或所有权,
*版权,或掩盖该产品的版权。恩智浦半导体
*保留在不更改软件的情况下进行更改的权利
* 通知。恩智浦半导体也不做任何陈述或
*保证该应用程序适用于指定的
*无需进一步测试或修改即可使用。
****************************************************** ************************ /

#ifndef UDA1380_H_
#定义UDA1380_H_

/ *编解码器的I2C地址* /
#定义UDA1380_ADDR(0x30>>1)

#if 0
#定义UDA1380_REG00_EVALCLK 0x00 / *评估模式,WSPLL设置,时钟 分频器和时钟选择器* /
#定义UDA1380_REG01_I2S 0x01 / * I2S总线I / O设置* /
#定义UDA1380_REG02_PWRCTRL 0x02 / *电源控制设置* /
#定义UDA1380_REG03_ANAMIX 0x03 / *模拟混音器设置* /
#定义UDA1380_REG04_HEADAMP 0x04 / *耳机放大器设置* /
#定义UDA1380_REG10_MSTRVOL 0x10 / *主音量控制* /
#定义UDA1380_REG11_MIXVOL 0x11 / *混音器音量控制* /
#define UDA1380_REG13_MODEBBT 0x12 / *模式选择,左右低音增强, 和高音设置* /
#定义UDA1380_REG13_MSTRMUTE 0x13 / *主静音,通道1和通道2 去加重和通道静音* /
#定义UDA1380_REG14_MIXSDO 0x14 / *混频器,静音检测器和插值 过滤器过采样设置* /
#定义UDA1380_REG20_DECVOL 0x20 / *抽取器音量控制* /
#定义UDA1380_REG21_PGA 0x21 / * PGA设置并静音* /
#定义UDA1380_REG22_ADC 0x22 / * ADC设置* /
#定义UDA1380_REG23_AGC 0x23 / * AGC设置* /
#定义UDA1380_REG7F_SW_RESET 0x7F / *恢复L3默认值* /
#万一

/ *注册控制设置图(写)* /
Typedef枚举
{
UDA1380_REG00_EVALCLK = 0x00,/ *评估模式,WSPLL设置,时钟分频器 和时钟选择器* /
UDA1380_REG01_I2S,/ * I2S总线I / O设置* /
UDA1380_REG02_PWRCTRL,/ *电源控制设置* /
UDA1380_REG03_ANAMIX,/ *模拟混音器设置* /
UDA1380_REG04_HEADAMP,/ *耳机放大器设置* /
UDA1380_REG10_MSTRVOL = 0x10,/ *主音量控制* /
UDA1380_REG11_MIXVOL,/ *混音器音量控制* /
UDA1380_REG12_MODEBBT,/ *模式选择,左右低音增强和高音 settings */
UDA1380_REG13_MSTRMUTE,/ *主静音,通道1和通道2去加重和 channel mute */
UDA1380_REG14_MIXSDO,/ *混频器,静音检测器和插值滤波器 过采样设置* /
UDA1380_REG20_DECVOL = 0x20,/ *抽取器音量控制* /
UDA1380_REG21_PGA,/ * PGA设置和静音* /
UDA1380_REG22_ADC,/ * ADC设置* /
UDA1380_REG23_AGC,/ * AGC设置* /
UDA1380_REG7F_SW_RESET = 0x7F / *恢复L3默认值* /
} UDA1380_Registers;

/ *状态位的寄存器映射(读出)* /
#定义UDA1380_REG18_HEADPHONE 0x18 / *插值过滤器状态* /
#定义UDA1380_REG28_DEC 0x28 / *抽取器状态* /

/ *评估模式和时钟设置* /
#定义REG00_EV(x)(x<< 13)
#定义REG00_EN_ADC(1<< 11)
#定义REG00_EN_DEC(1<< 10)
#定义REG00_EN_DAC(1<< 9)
#定义REG00_EN_INT(1<< 8)
#定义REG00_ADC_CLK(1<< 5)
#定义REG00_DAC_CLK(1<< 4)
#定义REG00_SYS_DIV_768Fs(3 << 2)
#定义REG00_SYS_DIV_512Fs(2<< 2)
#定义REG00_SYS_DIV_384Fs(1<< 2)
#定义REG00_SYS_DIV_256Fs(0<< 2)
#定义REG00_PLL_50_TO_100 3
#定义REG00_PLL_25_TO_50 2
#定义REG00_PLL_12_5_TO_25 1
#定义REG00_PLL_6_25_TO_12_25 0

/ * I2S总线输入和输出设置* /
#定义REG01_SFORI_I2S_BUS(0<< 8)
#定义REG01_SFORI_LSB_JUSTIFIED_16BIT(1 << 8)
#定义REG01_SFORI_LSB_JUSTIFIED_18BIT(2<< 8)
#定义REG01_SFORI_LSB_JUSTIFIED_20BIT(3<< 8)
#定义REG01_SFORI_MSB_JUSTIFIED(5<< 8)
#定义REG01_SFORO_I2S_BUS 0
#定义REG01_SFORO_LSB_JUSTIFIED_16BIT 1
#定义REG01_SFORO_LSB_JUSTIFIED_18BIT 2
#定义REG01_SFORO_LSB_JUSTIFIED_20BIT 3
#定义REG01_SFORO_MSB_JUSTIFIED 5
#定义REG01_SEL_SOURCE_DOUT_DECIMATOR(0<< 6)
#定义REG01_SEL_SOURCE_DOUT_MIXER(1<< 6)
#定义REG01_SIM_INTERFACE_SLAVE(0<< 4)
#定义REG01_SIM_INTERFACE_MASTER(1<< 4)

/ *电源控制设置* /
#定义REG02_PON_PLL(1<< 15)
#定义REG02_PON_HP(1<< 13)
#定义REG02_PON_DAC(1<< 10)
#定义REG02_PON_BIAS(1<< 8)
#定义REG02_EN_AVC(1<< 7)
#定义REG02_PON_AVC(1<< 6)
#定义REG02_PON_LNA(1<< 4)
#定义REG02_PON_PGAL(1<< 3)
#定义REG02_PON_ADCL(1<< 2)
#定义REG02_PON_PGAR(1<< 1)
#定义REG02_PON_ADCR(1<< 0)

/ * ADC设置* /
#定义REG22_ADC_ADCPOL_INV(值)(值<< 12)
#定义REG22_VGA_CTRL(值)((值& 0xF) << 8)
#定义REG22_SEL_LNA_ENABLE(1<< 3)
#定义REG22_SEL_MIC_ENABLE(1<< 2)
#定义REG22_SKIP_DCFIL(1<< 1)
#定义REG22_EN_DCFIL(1<< 0)

#定义ADC_L_LINE_IN 0
#定义ADC_L_SEL_MIC 1

#定义MULTIPLEXER_ADC_R 0
#定义MULTIPLEXER_ADC_L 1 / * * /

void UDA1380_vfAudioInit(void);
// void UDA1380_I2S_IRQHandler(void);

extern int UDA1380_EnableAudioOut(int32_t使能);
extern int UDA1380_EnableAudioIn(int32_t enable);
extern void UDA1380_CodecInit(void);

#万一 / * UDA1380_H_ * /

----------

/ **
* @文件uda1380.c
* @在RDB1768v2上使用的UDA1380音频编解码器的用途驱动程序代码
* @版本0.3
* @日期14. 2012年2月
* @作者CT-PIM / NXP
* ----------------------
*本文描述的软件仅用于说明目的
*为客户提供有关
* 产品。该软件按“原样”提供,没有任何保证。
*恩智浦半导体公司不承担任何责任。
*使用该软件,不传达任何专利的许可或所有权,
*版权,或掩盖该产品的版权。恩智浦半导体
*保留在不更改软件的情况下进行更改的权利
* 通知。恩智浦半导体也不做任何陈述或
*保证该应用程序适用于指定的
*无需进一步测试或修改即可使用。
****************************************************** ******************** /

/ ***************************************************** ********************* /
/ *包含文件* /
/ ***************************************************** ********************* /
#包括“ LPC17xx.h”
#包括“ lpc_types.h”
#包括“ lpc17xx_pinsel.h”
#包括“ lpc17xx_i2c.h”
#包括“ lpc17xx_i2s.h”

#包括“ uda1380.h”
#包括

/ **将I2C设备用作从设备定义* /
#定义USEDI2CDEV_M 0

/ **最大缓冲区长度* /
#定义BUFFER_SIZE 0x10
#定义AUDIO_INIT_DELAY 2000

#定义ECHO_RECORDING
//#定义REC_FROM_LINE_IN

#if(USEDI2CDEV_M == 0)
#定义I2CDEV_M LPC_I2C0
#elif(USEDI2CDEV_M == 2)
#定义I2CDEV_M LPC_I2C2
#别的
#error“未定义主I2C设备!”
#万一

I2C_M_SETUP_Type transferMCfg;
uint8_t I2C_data_transfer [3];

extern long int gQ31_Peak_L,gQ31_Peak_R;
extern long int gQ31_Peak [2];

long int Q31_I2S_Left,Q31_I2S_Right;

结构uda1380_setup
{
UDA1380_Registers reg;
uint16_t val;
};

/ *编解码器预设* /
静态const struct uda1380_setup uda1380_init [] =
{
{UDA1380_REG7F_SW_RESET,0xFFFF},
{UDA1380_REG01_I2S,0x0000},
{UDA1380_REG03_ANAMIX,0x3F3F},
{UDA1380_REG13_MSTRMUTE,0x0000},
#ifdef REC_FROM_LINE_IN
{UDA1380_REG22_ADC,0x00},
#别的
{UDA1380_REG22_ADC,REG22_SEL_LNA_ENABLE | REG22_SEL_MIC_ENABLE | REG22_SKIP_DCFIL},
#万一
{UDA1380_REG21_PGA,0x00},
};

静态const struct uda1380_setupplaying_enable [] =
{
{UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},
{UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},
};

静态const struct uda1380_setupplayback_disable [] =
{
{UDA1380_REG00_EVALCLK,(1<<9) | (1<<8) | (1<<4)},
{UDA1380_REG02_PWRCTRL,REG02_PON_BIAS | REG02_PON_DAC | REG02_PON_HP | (1<<15)},
};

静态const struct uda1380_setup recording_enable [] =
{
#ifdef ECHO_RECORDING
{UDA1380_REG02_PWRCTRL,(1<<15) | (1 << 13) | (1 << 10) | ( 1 << 8) | (1 << 7) | (1 << 6) | (1 << 4) | (1 << 3) | (1<<2) | (1 << 1) | (1<<0)},
{UDA1380_REG00_EVALCLK,(1<<11) | (1<<10) | (1<<9) | (1<<8) | (1<<4) | (1<<5)},
#别的
{UDA1380_REG02_PWRCTRL,(1<<15) | ( 1 << 8) | (1 << 7) | (1 << 6) | (1 << 4) | (1 << 3) | (1<<2) | (1 << 1) | (1<<0)},
{UDA1380_REG00_EVALCLK,(1<<11) | (1<<10)| (1<<5)},
#万一
};

静态const struct uda1380_setup recording_disable [] =
{
{UDA1380_REG02_PWRCTRL,0x00},
{UDA1380_REG00_EVALCLK,0x00},
};

/ ***************************************************** ********************* /
/ *本地函数原型* /
/ ***************************************************** ********************* /
静态int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值);
静态整数uda1380_SetupData(const struct uda1380_setup * preset,int cnt);

/ ***************************************************** ********************* /
/ *公共功能定义* /
/ ***************************************************** ********************* /
int UDA1380_EnableAudioIn(int32_t启用)
{
const struct uda1380_setup *预设=启用? recording_enable: recording_disable;
int cnt =启用? sizeof(recording_enable):sizeof(recording_disable);
cnt / = sizeof(* preset);
返回uda1380_SetupData(preset,cnt);
}

int UDA1380_EnableAudioOut(int32_t启用)
{
const struct uda1380_setup *预设=启用? playing_enable: playback_disable;
int cnt =启用? sizeof(playback_enable):sizeof(playback_disable);
cnt / = sizeof(* preset);
返回uda1380_SetupData(preset,cnt);
}

无效的UDA1380_CodecInit(void)
{
PINSEL_CFG_Type PinCfg;

/ * I2C块---------------------- * /
/ *
*初始化I2C引脚连接
* /
PinCfg.OpenDrain = 0;
PinCfg.Pinmode = 0;
PinCfg.Funcnum = 1;
PinCfg.Pinnum = 27;
PinCfg.Portnum = 0;
PINSEL_ConfigPin(&PinCfg);
PinCfg.Pinnum = 28;
PINSEL_ConfigPin(&PinCfg);

/ *初始化主I2C外设* /
I2C_Init(I2CDEV_M,400000);

/ *启用主I2C操作* /
I2C_Cmd(I2CDEV_M,ENABLE);

/ *首先启动I2C从设备* /
transferMCfg.sl_addr7bit = UDA1380_ADDR;
transferMCfg.tx_data = I2C_data_transfer;
transferMCfg.tx_length = sizeof(I2C_data_transfer);
transferMCfg.rx_data = NULL;
transferMCfg.rx_length = 0;
transferMCfg.retransmissions_max = 3;

uda1380_SetupData(uda1380_init,sizeof(uda1380_init)/ sizeof(* uda1380_init));
}

/ ***************************************************** ********************* /
/ *本地函数定义* /
/ ***************************************************** ********************* /
int32_t UDA1380_SetRegister(UDA1380_Registers reg,uint32_t值)
{
I2C_data_transfer [0] = reg;
I2C_data_transfer [1] =(uint8_t)((值>> 8) & 0xFF);
I2C_data_transfer [2] =(uint8_t)(值& 0xFF);
如果(I2C_MasterTransferData(I2CDEV_M,&transferMCfg,I2C_TRANSFER_POLLING)== SUCCESS)
{
返回(值);
}
别的
{
return(〜value);
}
}

静态整数uda1380_SetupData(const struct uda1380_setup * preset,int cnt)
{
整数错误= 0,我;
对于(i = 0; i< cnt; i ++)
{
错误+ = UDA1380_SetRegister(预设->reg,(uint32_t)preset->val) != (uint32_t)preset->val;
预设++;
}
返回错误;
}