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.

[参考译文] CCS/TMS320C5545:C5545 BoosterPack I2S 输出不传输数据

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/703541/ccs-tms320c5545-c5545-boosterpack-i2s-output-is-not-transmitting-data

器件型号:TMS320C5545

工具/软件:Code Composer Studio

大家好,我 一直在努力解决这个问题,但这并不是一个幸运。 我正在 Booster Pack 上运行回送代码,其中线路输入到 Booster Pack 插孔中的线路,并尝试将 DSP 过滤的数据传输到提供 BCLK 的蓝牙模块,然后连接 Booster Pack 接头上的 I2S 音频输出引脚。 还将 Booster Pack 引脚的时钟引脚和 fsync 引脚连接到我的蓝牙模块上的相应引脚。 我的蓝牙模块工作正常、因为我测试了从编解码器提供 I2S 输入、并且接收效果完美。 其他详细信息:IM 以8000Hz 的频率在 Booster Pack 上运行我的编解码器。 请提供有关如何解决此问题的建议。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    团队将收到通知。 他们将直接在此处发布反馈。

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

    您好、您好吗?

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

    添加更多详细信息。 提供 BCLK 的蓝牙模块采用16/20/24/32位。 我是否假设 Booster Pack I2S 输出为16位? 另请注意、我的 aic3206以8000Hz 的采样率运行。 我希望它这样。 WS 也是8kHz 吗?

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

    HI V Pot、

    您遇到了什么问题?

    您的系统是否与下图类似?

    U12、U13电平转换器的默认方向要求 C5545 I2S1为 I2S 从器件(J7接头上的蓝牙器件为时钟/FS 主器件):

    U12 2DIR =低电平、DSP_I2C1_DX -> LP_AUD_DIN = J7:20 (B -> A)

    U13 2DIR =低电平、J7:14/16 = LP_AUD_SYNC/CLK -> DSP_I2C1_FS/CLK (B -> A)

    您能否确认为 J7:1提供了 VCC? 1.8V 或3.3V 正常-以蓝牙 IO 电压为准。 此电压是必需的、可通过 TP3提供3.3V 电压、或通过 TP4提供1.8V 电压(通过从 TP 到 J7:1的线缆)

    您的 AIC3206是否配置为主器件-驱动 BCLK 和 FS? I2C 寄存器写入控制此操作。

    I2S2是否配置为从器件? I2SCTRL:从器件的 MODE 位= 0。

    您说蓝牙配置为主设备-驱动 BCLK 和 FS、对吧?

    I2S1是否配置为从设备? I2SCTRL:从器件的 MODE 位= 0。

    编解码器是否配置为传输单声道或立体声? 每个通道应为16位。

    因此、如果单声道、16位、Fs = 8000Hz、则 BCLK 应为128000Hz。 您能确认它吗?

    立体声系统的 BCLK 速率加倍。 您的蓝牙设备能否输入和传输立体声?

    蓝牙可配置为提供相同的 FS (或 WS)= 8k 且 BCLK = 128k。 保存 DSP 软件中的任何采样率转换。

    fs (WS)等于采样频率(每秒样本数)。 字的大小(16/20/24/32)和单声道/立体声决定所需的 BCLK 频率。

    确保编解码器和 I2S2 (I2S 或 DSP)以及蓝牙和 I2S1之间的 FS 格式相同。

    确保从 FS 到数据的延迟配置相同(0位、1位、2位)

    同时检查 CLK 和 FS 极性。

    使 I2S 环回位保持禁用状态(这用于内部环回、而不是外部环回)

    希望这对您有所帮助、
    标记

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

    Mark、

    感谢您的回复。

    1) 1)您的图片和文本显示我应该使用 Din、您确定吗? 不是很让人担心? 因为我需要将来自 DSP 的音频传输到蓝牙。

    2)您的图片显示了从蓝牙到 DSP J7接头引脚的 BCLK 和 WCLK。 我在蓝牙上有 SCK 和 ws 引脚、它们应该连接到 J7接头上的确切引脚? LP_aud_clk 和 LP_aud_sync 分别是什么?

    3) 3)是的、我使用的是3.3V、因为我的蓝牙是3.3V。 我将使用 BoosterPack 上的 T3孔

    4)默认情况下、aic3206为主器件、I2S 输出为从器件 I guess。 我没有改变任何东西。

    5)我是否必须使 aic3206也成为从设备、因为我的蓝牙正在为 DSP 提供 BCLK 和 ws?

    6) 6)我假设它是立体声、因为它将数据写入代码中的左右通道、它是16位

    7) 7)对于蓝牙的立体声 BCLK、应为16或20或24或32?

    8) 8)是的、蓝牙的 ws 设置为8k

    9) 9)我不确定如何在 我的代码中执行后续操作、请您更精确

    //确保编解码器和 I2S2 (I2S 或 DSP)以及蓝牙和 I2S1之间的 FS 格式相同。

    确保从 FS 到数据的延迟配置相同(0位、1位、2位)

    保持 I2S 环回位被禁用(这用于内部环回、而不是外部)//

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

    一些问题答案。 请告诉我、这是否是您正在寻找的详细程度。

    1) 1)您的图片和文本显示我应该使用 Din、您确定吗? 不是很让人担心? 因为我需要将来自 DSP 的音频传输到蓝牙。

    您需要将来自 DSP 的音频传输到蓝牙。
    LP_AUD_DIN 是相对于 LaunchPad - LaunchPad 的 DIN、DSP 的 DOUT
    查看 U12电平转换器、了解 LP_AUD_DIN 连接到 DSP_I2C1_DX (I2S 数据输出)

    2)您的图片显示了从蓝牙到 DSP J7接头引脚的 BCLK 和 WCLK。 我在蓝牙上有 SCK 和 ws 引脚、它们应该连接到 J7接头上的确切引脚? LP_aud_clk 和 LP_aud_sync 分别是什么?
    SCK 是否与 BCLK 相同? 是 ws 的16倍还是32倍? SCK 也可以是12.288MHz 左右的系统时钟(在我们的编解码器上称为 MCLK)。 这在内部进行分频、以生成128k 至1.536MHz 范围内的 BCLK
    ws 是与采样率8k 匹配的时钟还是以8k 频率脉冲的选通信号? I2S 可以支持时钟(I2S 模式)或脉冲(DSP 模式)
    我期望的所有命名问题。
    J7引脚14 = LP_AUD_SYNC =帧同步= FS = WS
    J7引脚16 = LP_AUD_CLK =位时钟= BCLK = SCK (我希望)
    J7引脚18 = LP_AUD_DOUT = Launchpad 的输出- DSP 的输入
    J7引脚20 = LP_AUD_DIN = launchpad 的输入- DSP 的输出

    3) 3)是的、我使用的是3.3V、因为我的蓝牙是3.3V。 我将使用 BoosterPack 上的 T3孔
    很好。 您是否还通过 J7接头为蓝牙提供3.3V 电压? 理想情况下、蓝牙上的3.3V 与 BoosterPack 电平转换器上的3.3V 相同。 有时、它们可能会关断数十伏左右。

    4)默认情况下、aic3206为主器件、I2S 输出为从器件 I guess。 我没有改变任何东西。
    您的程序将对 AIC3206编解码器执行多个 I2C 写入以对其进行配置(函数称为 AIC3206_write()……)-检查写入第0页寄存器27的内容。


    AIC3206有一个寄存器将其定义为主器件(位时钟和帧同步的源/输出)
    请参阅《TLV320AIC3206应用参考指南》(SLAA463B)中的5.2.27第0页/寄存器27:音频接口设置寄存器1 - 0x00 / 0x1B
    位3 BCLK 方向控制:
    0:BCLK 被输入到器件
    1:BCLK 从器件输出
    位2 WCLK 方向控制
    0:WCLK 被输入到器件
    1:器件输出 WCLK

    C5545 I2S 寄存器
    I2S2 I2SCTRL = addres 0x2A00 -您可以在设置 I2S 后在程序中设置断点、并读取寄存器 I2S2->I2SCTRL 并读取这些位。

    请参阅《TMS320C5545/35/34/33/32超低功耗 DSP 技术参考手册》(SPRUH87)中的10.3.1 I2Sn 串行器控制寄存器(I2SSCTRL)
    I2SCTRL 位1模式:
    0 =串行器配置为从器件。 I2Sn_CLK 和 I2Sn_FS 引脚配置为输入。 位时钟和帧同步信号来自外部源、并直接提供给 I2S 同步器、而无需进一步分频。
    1 =串行器配置为主器件。 I2Sn_CLK 和 I2Sn_FS 引脚配置为输出并由时钟发生器驱动。 位时钟和帧同步信号来自内部 CPU 时钟。

    5)我是否必须使 aic3206也成为从设备、因为我的蓝牙正在为 DSP 提供 BCLK 和 ws?
    如果您可以将 I2S BCLK 和 WCLK 从蓝牙连接到 I2S1、I2S2 (连接到编解码器)、那么您可以有一个主器件(蓝牙)和3个从器件(I2S1、I2S2和编解码器)。 但是、我没有这样设置 BoosterPack。 因此、您将有2个主器件和2个从器件。 AIC3204是 I2S2主器件、C5545 I2S2是从器件(推荐)。 蓝牙是 I2S1主设备、建议使用 C5545 I2S1作为从设备。
    现在、当 AIC3206生成8k FS 和256k BCLK 时、它不会与蓝牙8k FS 和256k BCLK 完全匹配。 当这些频率随着时间的推移而漂移时、它们将不同步、您将投放样本、并听到干扰或一些伪影。 这是拥有一个主器件和三个从器件的一个原因。 DSP 还可以运行软件来处理这一问题-异步采样率转换器可以无缝桥接这两个略有不同的时钟速率。

    6) 6)我假设它是立体声、因为它将数据写入代码中的左右通道、它是16位
    立体声是典型的。 因此 BCLK 应该= 2x16xFS = 2x16x8000 = 256000Hz。 您将有一个左16位样本和一个右16位样本来处理并传输到蓝牙。

    7) 7)对于蓝牙的立体声 BCLK、应为16或20或24或32?
    嗯、我必须查看蓝牙器件文档。 它是指每个字(通道)还是指每帧的位数? 2通道 x 每个字每帧16位将与每帧32位相同。

    8) 8)是的、蓝牙的 ws 设置为8k
    好的

    9) 9)我不确定如何在我的代码中执行后续操作、请您更精确

    对于 AIC3206、将会有一节 AIC3206_WRITE 命令(使用 I2C 向 AIC3206上的寄存器进行写入):
    AIC3206_WRITE( 27, 0x0d );// BCLK 和 WCLK 被设置为 o/p;AIC3206 (主器件)

    相同的 I2SCTRL 具有定义...的位
    -格式(位0、I2S/左对齐(时钟)设置为0、或1至 DSP 格式(脉冲) 0
    -数据延迟(位8、1位延迟设置为0、2位延迟设置为1)
    -回送(位11、正常设置为0)

    在 C5545诊断源文件(c55xx_diagnostics\board\diag)中、I2S 配置部分被抽象化、以使人更容易读取。
    搜索 initial_I2S_interface()并修改以下格式的参数...
    hwconfig.datatype = I2S_立体声_ENABLE;
    hwconfig.loopBackMode = I2S_LOOP_DISABLE;
    hwconfig.fsPol = I2S_FSPOL_LOW;
    hwconfig.clkPol = I2S_RISE_EDGE;
    hwconfig.datadalay = I2S_DATADELAY_ONEBIT;
    hwconfig.datapack = I2S_DATAPACK_ENABLE;
    hwconfig.signext = I2S_SIGNEXT_DISABLE;
    hwconfig.wordLen = I2S_WORDLEN_32;
    hwconfig.i2sMode = I2S_SLAVE;
    hwconfig.FError = I2S_FSERROR_ENABLE;
    hwconfig.OuError = I2S_OUERROR_ENABLE;

    //确保编解码器和 I2S2 (I2S 或 DSP)以及蓝牙和 I2S1之间的 FS 格式相同。

    确保从 FS 到数据的延迟配置相同(0位、1位、2位)

    保持 I2S 环回位被禁用(这用于内部环回、而不是外部)//

    希望这对您有所帮助、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我想对我的上述答复作补充。

    -当我执行回送时,我希望将 I2S 音频输出传输到蓝牙,并且能够在连接到 Booster Pack 耳机插孔的耳机中收听

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mark、
    感谢您的详细回答。 请查看下面的蓝牙文档。 第6.67段时钟计算示例。
    www.silabs.com/.../UG218.pdf

    1) 1)此外、您的程序还将能够将数据传输到蓝牙、还能通过 Booster Pack 上的耳机插孔收听耳机?

    2) 2) 1主器件3从器件无法正确使用 Booster Pack? 如果我错了,如何使蓝牙主设备和 booster pack 从设备的所有3个组件?

    3) 3)蓝牙模块仅提供 BCLK、并允许 ws 使用8k 或16k Hz。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HI V Pot、

    [引用 user="V Pot"]1)此外、您的操作过程还将能够将数据传输到蓝牙、还能通过 Booster Pack 上的耳机插孔收听耳机?
    [/报价]

    是的、您可以将相同的音频数据传输到 DSP_I2S1_DX (LP_AUD_DIN 至蓝牙)和 DSP_I2S2_DX (至 AIC3206 DIN)

    [引用 USER="V Pot]2) 1主器件3从器件不能正确使用 Booster Pack? 如果我错了,如何使蓝牙主设备和 booster pack 从设备的所有3个组件?

    [/报价]

    1主器件3从器件不受 C5545 BoosterPack 支持。

    如果您将 LP_AUD_CLK 从 JP7:16焊接到 R42处的 I2S2_CLK、并将 LP_AUD_SYNC 从 JP7:14焊接到 R43处的 I2S2_FS、则可能会发生这种情况、但这需要连接到 J7的蓝牙器件在1.8V 电压下工作。

    为了将3.3V 器件保持在 J7上、您必须将其焊接到 U13引脚8和9上、这些引脚可能太小且太靠近、无法实现。 但并非不可能!

    [引用 user="V Pot"]3)蓝牙模块仅提供 BCLK、并允许 ws 使用8k 或16k Hz。

    [/报价]

    BCLK 计算方法与 mine 相同:“CVSD 的 BCLK 应介于256kHz (8kHz*2*16)和512kHz (8kHz*2*32)之间,而 WBS/MSB 则介于512kHz (16kHz*2*16)和1024kHz (16kHz 2*32)之间。”  但我不确定16kHz*2*32的情况。

    第146页关于 I2S 接口用法的说明使蓝牙设备看起来必须是 I2S 从设备。

    C5545 I2S1必须提供时钟、您必须通过将 R127脱焊并将其焊接到 R126的焊盘上来更改 U13电平转换器的方向。

    本文档是用户指南和 API 参考。 您是否有要确认的器件型号或数据表?

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

    您好、Mark、

    1) 1)可能我会在 PCB 上制作1主器件3从器件现在我想尝试 aic3206为 DSP 提供 i2s2时钟、而 wt32i (蓝牙模块)为 DSP 的 i2s1提供 BCLK 时钟。

    2) 2) wt32i 无法为 I2S 接口提供 BCLK 时钟。 它内部有一个主时钟发生器。 要更清楚地了解以下开发套件原理图,其中 wt32i 在开发套件上提供外部 TI 音频编解码器时钟。 我通过为外部编解码器提供输入来测试开发套件、它通过 I2S 完美地将音频传输到 wt32i。 请查看下面文档中的图8、其中 wt32i 提供时钟。

    3) 3)这是数据表

    4)根据时钟计算得出。 正如我说过的、我的音频采样率为8kHz。 以及 Aic3206发送16位数据。 那么、我还应该使 wt32i 成为16位吗?

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

    是的-我会在编解码器和蓝牙上匹配 I2S BCLK 和 WS 速率、以简化处理。 使用示波器确认时钟。

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

    Mark、

    我看到您在上述回复中提到的其中一个回复、以确保蓝牙和 DSP I2S 均来自相同的3.3V 电压。 我正在使用 bluetooth 开发套件 dkwt32i、它可以选择通过 USB 或电池供电。 我必须在板上查看是否可以从 DSP 引脚提供电源输入... 如果不能、我可以提供3.3V 输入来运行 DSP、并且仍然能够在调试模式下连接到笔记本电脑并运行 code composer 来运行回送测试?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果同时为 C5545 BoosterPack 和蓝牙供电、则应将3.3V 从蓝牙连接到 J7引脚1 (VCC3V3_LP)、以便为电平转换器提供从1.8V 到电平位移的参考。

    BoosterPack 的工作电压为5V (电路板上的5V 产生1.8V 电压)。 如果您想通过其他电路板为 C5545 BoosterPack 供电、则需要为 J7引脚2 (DC_5V_IN)提供5V 电压。 我们在电路板上放置了二极管、以允许来自 J7引脚2或两个 USB 端口中的任何一个的5V 电压。

    是的、您可以在所有电源情况下都连接到笔记本电脑并对电路板进行调试。

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

    还可以。 因此、通过将蓝牙3V3连接到 J7 3V3、我不再需要将 TP3孔连接到 J7 3.3V 引脚、对吧?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    V Pot、

    没错。 J7引脚1 LP_3V3仅为电平转换器提供基准。 没有其他东西。

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

    我按照您的指示操作、部分成功。 我能够使用手机上的 HFP 配置文件记录从 DSP 传输到蓝牙的数据。 但它不稳定、这意味着有时它传输、有时它不传输任何数据。 我确保折射3.3V、数据、FS、BCLK 导线全部完好无损。 我仍然不会低估其根本原因。 请提供建议、谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    HI V Pot、

    很酷。

    您是否有用于探测 I2S 信号的示波器? 它们可能会揭示问题、或者至少将问题隔离到编解码器、C55xx 或蓝牙。 例如、如果 I2S 时钟和来自编解码器的数据看起来正常、它会让我们知道编解码器是否正确地传输数据。

    可能 I2C 总线上也会发生停止编解码器的情况。

    也可能是 C55xx 内的软件。 尝试隔离问题。 也许您可以尝试将虚拟 I2S 流量写入 C55xx 至蓝牙的正弦波。

    您使用的是 I2S 中断还是 DMA? 您可以在 ISR 内添加软件计数器来比较每个中断的速率。 我希望一个 I2S 端口的 RX 中断与另一个 I2S 端口的 TX 中断相匹配。

    希望这对您有所帮助、
    标记

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

    Mike。

    感谢您的回复。 您所说的对我来说技术不太强,但我将尝试理解并处理它。

    1) 1)我可以尝试对其进行范围界定。

    2) I2C 总线是什么意思? 您是指 I2S 信号?

    3) 3)您谈论的是什么中断? 在蓝牙或 DSP 中?

    4)我使用 CCS 在连接到蓝牙的 Booster Pack 上运行环回示例。 Booster Pack 中没有这样的软件

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

    Mike、

    我需要将滤波后的 DSP 数据发送到一些基于 Sitara 的处理器、并将其馈送到一些机器学习算法中。 因为 i2s1和 i2s2都用于编解码器和蓝牙传输器件。 我还可以如何向微处理器发送数据?  这是我们要与 c5545 DSP 配合使用的处理器

    如果不是 I2S、我们还有哪些其他选项以及如何实现它们。 提前感谢

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

    您好、Mark、

    还有任何与上述问题有关的问题吗?

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

    HI V Pot、

    使用 UART 与微处理器进行通信。

    通常使用 UART 在处理器之间进行通信、UART 引脚可路由到 C5545 BoosterPack 的 launchpad 接头。

    我们使用 UART 与 MSP430与另一个 C55音频电容式触控 BoosterPack 进行通信、但由于软件具有 MP3编码、我们无法释放其来源...

    http://processors.wiki.ti.com/index.php/Audio_Capacitive_Touch_BoosterPack_C5535_Software 

    http://processors.wiki.ti.com/index.php/Audio_Capacitive_Touch_BoosterPack_MSP430_Software

    http://processors.wiki.ti.com/index.php/Low-level_UART_Virtual_Register_Control_Protocol

    在 C5545 BoosterPack 上设置这些跳线、将 UART 连接到 LaunchPad 接头。

    芯片支持库包含 UART 示例:ti.com/tool/SPRC133

    此致、
    标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    标记。
    那么、您确认我们可以使用 UART 接口将 DSP 音频从 c5545传输到上面提到的基于 Octavo ti 的处理器吗?

    请问在您的上述应用程序中、传输的数据是 PCM 格式还是 MP3格式。 我想知道我的处理器将以何种格式接收数据?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哦、抱歉。 我们没有通过 UART 传输音频-只是以低得多的波特率传输数据和命令。

    从理论上讲、UART 波特率可以足够快地运行、但我有一个问题、那就是启动它并通过串行端口发送音频并不那么简单。

    在 C5545上、UART 与 I2S3进行引脚多路复用、但 UART_CTS/ I2S3_FS 会进入 SD 卡插槽而不是 LaunchPad 接头。

    如果您愿意将导线焊接到 J3引脚9或 R119、I2S3可能仍是您的最佳选择... 其他 I2S3/UART 信号会进入 launchpad 接头(通过电平转换器)。

    此致、
    标记

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

    Mark、

    1)无论如何,我们将制作一个仅使用 c5545、aic3206的 PCB。 那么、您是否确认 c5545 DSP 有一个 i2s3用于传输到微处理器?

    2)我尚未决定在什么天气下我将添加一个触摸屏,引导至 DSP 或微处理器。 但我选择从 c5545dsp 执行它、我最好的办法是什么?

    3) 3)如果我向 DSP 添加触摸屏。 我需要编写与 DSP 触摸屏相关的错误。 那么、这会影响 DSP 的性能吗? 因为我要同时运行 DSP 滤波器,我希望它是实时的,没有延迟。

    4) 4)我可以使用 TP3或 TP1作为3V3或1v8电源来运行我的外部模拟电路吗? 如果没有、我可以向外部电路提供1v8。 接地轨应使用什么引脚?

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

    我的上述问题是否有任何解决方案?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mark、

    1)我已确定 BoosterPack I2S 输出的范围、但我没有收到任何内容。 I 范围 DIN、I2S CLK、I2S FSYNC。 我看不到读数。

    2)我对蓝牙及其工作正常进行了限定。

    3) 3)我假设问题是 aic3206设置或 BoosterPack 中的某个设置。 TI 编解码器专家 Diego 说、在我的设置中、我使用 BCLK N 分频器值8、他建议我使用48来使 I2S 正常工作。 但仍然不幸运。

    以下是使用 aic3206设置的环回测试的完整代码、我在 CSS 中使用。

    注:-不要在代码中遵循注释、它们意味着什么。 只需查看与调试相关的寄存器编号和值。

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

    请提供解决方案。 我在这些论坛上闲逛了一段时间、但我的问题仍未解决


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

    继续执行上述环回测试代码... 在 audio_common.c 模块中定义了上述 aic3206环回测试设置中使用的函数、我将在下面的模块中附加代码。 它还包含 I2C 配置。 请看一下、如果我需要更改其中的任何设置、请告诉我。

    /*
    版权所有(c) 2016、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    */
    
    /*! \file audio_common.c
    *
    \brief 函数,用于初始化 i2c 和 I2S 接口以及读取和
    * 使用这些接口的操作。
    *
    /
    
    #include "audio_common.h"
    
    CSL_I2sHandle hI2 = 0;
    volatile UINT16 sw3 Pressed = 0;
    
    /**
    *\brief GPIO 中断服务例程
    *
    *\param testArgs [IN]测试参数
    *
    \返回 none
    */
    interrupt void gpioISR (void)
    {
    int16 RetVal;
    
    * disableIRQ (*
    );* disable****/ disable in*******/ disable inrupts
    (void ************
    
    /*检查 GPIO 中断标志寄存器*/
    if ((1 == GPIO_statusBit (gpioHandle、CSL_GPIO_PIN13、RetVal)))
    {
    /*清除 GPIO 中断标志寄存器*/
    GPIO_clearInt (gpioHandle、CSL_GPIO_PIN13);
    sw3预置= 1;
    }
    
    IRQ_CLEAR (GPIO_EVENT);
    }
    
    TEST_STATUS GPIO_INTERRUPT_INPSIVATION (void)
    {
    
    Int16 RetVal;
    
    CSL_GpioPinConfig 配置;
    易失性 UINT32循环;
    sw3预置= 0;
    
    //为 GPIO 设置总线*
    CSL_FINST (CSL_SYSCTRL_REGs->EBSR、PPSYS_MODE1);
    
    /*禁用 CPU 中断*/
    IRQ_globalDisable ();
    
    //清除任何挂起的中断*/
    IRQ_CLEARALL();
    
    //禁用所有中断*/
    IRQ_disableAll();
    
    /*初始化中断矢量表*/
    IRQ_setVecs ((uint32)(&VECSTART));
    
    /*打开 GPIO 模块*/
    gpioHandle = GPIO_open (&GpioObj、&RetVal);
    if ((NULL =gpioHandle)||(CSL_Sok!= RetVal))
    {
    C55x_msgWrite ("GPIO_open failed\n");
    返回(test_fail);
    }
    
    /*重置 GPIO 模块*/
    GPIO_RESET (gpioHandle);
    
    for (loop=0;loop < 0x5F5E10;loop++){}
    
    C55x_msgWrite ("按 BoosterPack 上的 SW3退出测试\n\n"\};
    
    /**测试 GPIO_CONFIG API 以使 PIN13成为 I/p */
    config.pinNum = CSL_GPIO_PIN13;
    CONFIG.DIRECTION = CSL_GPIO_DIR_INPUT;
    CONFIG.TRIGGER = CSL_GPIO_TRIG_RISING _EDGE;
    RetVal = GPIO_configBit (gpioHandle、&config);
    if (CSL_Sok!= RetVal)
    {
    C55x_msgWrite ("test failed - GPIO_configBit\n");
    返回(TEST_FAIL);
    }
    
    //启用 GPIO 中断*
    RetVal = GPIO_enableInt (gpioHandle、CSL_GPIO_PIN13);
    if (CSL_Sok!= RetVal)
    {
    C55X_msgWrite ("test failed- GPIO_enableInt\n");
    return (RetVal);
    }
    
    //清除任何挂起的中断*/
    IRQ_CLEAR (GPIO_EVENT);
    
    IRQ_plug (GPIO_EVENT、&gpioISR);
    
    /*启用中断*/
    IRQ_ENABLE (GPIO_EVENT);
    IRQ_globalEnable();
    
    return (test_pass);
    
    }//**
    
    
    *
    \brief 此函数用于启用和初始化 I2S 模块
    *
    *\param void
    *
    *\return
    *\n TEST_PASS -测试通过
    *\n TEST_FAIL -测试失败
    *
    //
    test_status initialize_I2S_interface (void)
    {
    I2S_Config hwconfig;
    Int16 结果= 0;
    
    //用实例0打开器件*/
    hI2 = I2S_open (I2S_instance2、I2S_polled、I2S_CHAN_STEREO);
    
    //设置配置结构的值*/hwconfig.datatype
    = I2S_立体声_ENABLE;
    hwconfig.loopBackMode = I2S_loopback_disable;
    hwconfig.fsPol = I2S_FSPOL_LOW;
    hwconfig.clkPol = I2S_Rising;
    hwconfig.datadalay = I2S_DATADELAY_ONEBIT;
    hwconfig.datapack = I2S_DATAPACK_ENABLE;
    hwconfig.signext = I2S_SIGNEXT_DISABLE;
    hwconfig.wordLen = I2S_WORDLEN_32;
    hwconfig.i2sMode = I2S_SLAVE;
    hwconfig.FError = I2S_FSERROR_ENABLE;
    hwconfig.OuError = I2S_OUERROR_ENABLE;
    
    //配置硬件寄存器*/
    结果+= I2S_setup (hI2、&hwconfig);
    结果+= I2S_transEnable (hI2、TRUE);
    
    返回结果
    
    ;}
    
    /**
    *
    \brief 此函数读取传入的 I2S 左通道字并将其写入
    * "数据"的位置。
    *
    *\param * data -如果 I2S 数据目标
    为位置的指针*
    *\return void
    *
    //
    void I2S_readLeft (Int16* data)
    {
    ioport CSL_I2sRegs *寄存器;
    
    regs = hI2s->hwRegs;
    while ((0x08 & regs->I2SINTFL)=0);//等待接收中断挂起
    *data = regs->I2SRXLT1; // 16位左侧通道接收音频数据
    }
    
    //
    *
    \brief 此函数用于写入 I2S 左侧通道字
    *
    \param data -I2S 左侧数据
    *
    *\return void
    *
    //
    void I2S_writeLeft (Int16 data)
    {
    ioport CSL_I2sRegs *寄存器;
    
    regs = hI2s->hwRegs;
    while (((CSL_I2S_I2S_I2SINTFL_XMITSTFL_MASK & regs->I2SINTFL)=0);//等待发送中断挂起
    regs->I2STXLT1 =(数据); // 16位左声道传输音频数据
    }
    
    /**
    *
    \brief 此函数读取传入的 I2S 右声道字并将其写入
    * "数据"的位置。
    *
    *\param * data -如果 I2S 数据目标
    为位置的指针*
    *\return void
    *
    //
    void I2S_readRight (Int16* data)
    {
    ioport CSL_I2sRegs *寄存器;
    
    regs = hI2s->hwRegs;
    // while (((0x08 & regs->I2SINTFL)=0);//等待接收中断挂起
    *data = regs->I2SRXRT1; // 16位左侧通道接收音频数据
    }
    
    //
    *
    \brief 此函数用于写入 I2S 右侧通道字
    *
    \param 数据-I2S 右侧数据
    *
    *\return void
    *
    //
    void I2S_writeRight (Int16 data)
    {
    ioport CSL_I2sRegs *寄存器;
    
    regs = hI2s->hwRegs;
    // while (((CSL_I2S_I2S_I2SINTFL_XMITSTFL_MASK & regs->I2SINTFL)=0);//等待发送中断挂起
    regs->I2STXRT1 =(数据); // 16位左声道传输音频数据
    }
    
    //*
    
    \brief 此函数用于启用和初始化 I2C 模块
    *I2C 时钟设置为以100KHz 运行
    *
    *\param testArgs [IN]测试参数
    *
    \return
    *\n TEST_PASS -测试通过
    *\n test_Fail -测试失败
    *
    //
    test_status initialize_i2c_interface (void * testArgs)
    {
    CSL_Status 状态;
    CSL_I2cConfig i2cConfig;
    
    status = I2C_init (CSL_I2C0);
    
    //将 I2C 模块配置为写入*/
    i2cConfig.icoar = CSL_I2C_ICOAR_DEFVAL;
    i2cConfig.icimr = CSL_I2C_ICIMR_DEFVAL;
    i2cConfig.ickl = i2cSAR
    
    = i2cSAR = i2cConfig.icar_iCSIC.iC20_Icc_Icc=iCSIL.CSIMP_Icc_Icc=20;iCSR_Icc=Icc=Icc=Icc=I
    i2cConfig.icmdr = CSL_I2C_ICMDR_WRITE_DEFVAL;
    i2cConfig.icemdr = CSL_I2C_ICEMDR_DEFVAL;
    i2cConfig.icpsc = 20;
    
    状态|= I2C_CONFIG (&i2cConfig);
    
    返回0;
    
    }
    
    /**
    *
    \brief 此函数用于写入音频编解码器寄存器
    *
    \param testArgs RegNum -寄存器编号
    * regVal -寄存器数据
    *
    \return
    *\n TEST_PASS -测试通过
    *\n TEST_FAIL -测试失败
    *
    */
    TEST_STATUS AIC3206_WRITE (UINT16 RegNum、UINT16 regval)
    {
    Int16 RetVal;
    UINT16 startStop =((CSL_I2C_START)|(CSL_I2C_STOP));
    uint16 cmd[2];
    CMD[0]= RegNum & 0x007F; // 7位器件寄存器
    CMD[1]= regval; // 8位寄存器数据
    
    C55x_DELAY_msec (3);
    
    /* I2C 写入*/
    RetVal = I2C_WRITE (cmd、2、AIC3206_I2C_ADDR、
    true、startStop、CSL_I2C_MAX_TIMEOUT);
    if (RetVal!= 0)
    {
    C55x_msgWrite ("I2C Write Failed\n\r");
    //return -1;
    }
    
    返回(0);
    }
    

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

    您好、Mark、

    您是否有机会查看上述两个代码?

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

    您好,Mark,

    感谢您迄今提供的帮助。 但是、如果您很忙、您可以将问题转发给其他 TI 专家、他们可以解决我的问题。 因为我们的项目迟到了

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

    HI V Pot、  

    很抱歉、我没收到您的回复。

    [引用 user="V Pot"]

    1)无论如何,我们将制作一个仅使用 c5545、aic3206的 PCB。 那么、您是否确认 c5545 DSP 有一个 i2s3用于传输到微处理器?

    [/报价]


    是的、C5545具有一个 I2S3、您可以使用它将音频传输到微处理器。 有关 I2S2和 I2S3、请参阅表6-7。 然后、针对 I2S1和 I2S0引脚多路复用器选择、请参阅表6-8和表6-9。

    [引用 user="V Pot"]

    2)我尚未决定在什么天气下我将添加一个触摸屏,引导至 DSP 或微处理器。 但我选择从 c5545dsp 执行它、我最好的办法是什么?

    [/报价]

    最好将触摸屏添加到微处理器中。
    如果您将触摸屏添加到 C5545 DSP、则必须使用 SPI 或 I2C 进行显示和触摸屏捕获。 这将限制其分辨率和刷新率。
    我不确定触摸屏、但您可以找到可与 SPI 配合使用的 OLED 显示屏-我们在 C5517 EVM 上使用此功能(support.spectrumdigital.com/.../evm5517)
    OSD-28GDEDF11 - https://www.osddisplays.com/

    在 Spectrum Digital Target Content (support.spectrumdigital.com/.../evm5517_EVM_BSL_revf.zip)中提供了该 SPI 显示屏的软件示例

    C5545 BoosterPack 上的显示屏使用 I2C、其软件可在 BoosterPack 软件诊断文件中找到。

    大多数触摸屏都基于 I2C。 还有一些触摸屏使用 C55x DSP 上的 SAR ADC。 请参阅 TRM 中的11.2.7触摸屏数字化。
    使用 C5545执行此 ADC 触摸屏方法的一个常见问题是它没有像 C5535、C5515、C5505系列产品成员那样的 GPAIN0引脚。

    请记住、C5545具有100MHz 的最大时钟速率、因此所有内容必须以该时钟速率实时运行(音频处理等)。

    [引用 user="V Pot"]

    3) 3)如果我向 DSP 添加触摸屏。 我需要编写与 DSP 触摸屏相关的错误。 那么、这会影响 DSP 的性能吗? 因为我要同时运行 DSP 滤波器,我希望它是实时的,没有延迟。

    [/报价]


    您可以使用 CCS 对软件进行配置、并找出每个函数(滤波、ISR)所需的周期数。 然后、您可以从周期性实时最后期限向后工作、以查看剩余多少个周期未使用。 您的实时最后期限将由音频时钟速率决定- 16kHz = 62.5uS、以获取音频数据、对其进行处理并将其返回。 在100MHz 时为6250个周期。 (62.5E-6/10E-9)。

    [引用 user="V Pot"]

    4) 4)我可以使用 TP3或 TP1作为3V3或1v8电源来运行我的外部模拟电路吗? 如果没有、我可以向外部电路提供1v8。 接地轨应使用什么引脚?

    [/报价]

    只要不超过每个电源的电流最大值、您就可以使用这些电源中的任何一个。

    请参阅 TPS62161和 TPS62162的数据表-它们各自都说可以提供高达1A 的电流。 这很有很多。 瞬时电流尖峰应由位于 MCU 附近的大容量电容器提供- 10uF 电容器、以提供数字处理器上常见的电流尖峰。 这些电源上的噪声可能会增加、而另一个 MCU 由它们供电。

    确保在电路板之间连接 GND、使其处于同一基准。 除音频插孔之外的所有 GND 引脚都短接至 GND 平面-我想说 J8引脚2或 J7引脚4。

    [引用 user="V Pot"]

    1)我已确定 BoosterPack I2S 输出的范围、但我没有收到任何内容。 I 范围 DIN、I2S CLK、I2S FSYNC。 我看不到读数。

    [/报价]


    您是否在探测 I2S3信号? 您在哪里探测 DIN、I2S CLK、I2S FSYNC? 是否有一个编解码器连接到 I2S3/UART? 编解码器是为 I2S3提供时钟、还是 C5545应该驱动时钟?

    您是否相应地设置了 JP2和 JP3?
    您是否将导线焊接到 J3引脚9或 R119以连接到 I2C3_FS?
    您是否将导线焊接到 LED3信号 R58以连接到 I2C3_CLK?
    我认为将 C5545作为 I2S3主设备(发送)而不是从设备(接收时钟)来探测这些信号会更容易。
    请记住、C5545的 IO 电压为1.8V、并且有一个用于 UART_RX/TX 信号(I2C3_RX/TX)的电平转换器、该电平转换器可能允许它们变为3.3V。 I2S3_FS 和 I2S3_CLK 信号没有电平转换器、因此它们必须保持在1.8V。
    当您制作自己的电路板时、您可以匹配 IO 电压或电平位移所有4个信号。


    稍微研究一下您的代码...

    =-=-=-
    在 AIC3206_LOOP_LINEIN()中,编解码器看起来像是被配置为输出时钟……
    AIC3206_WRITE( 27, 0x0d );// BCLK 和 WCLK 被设置为 o/p;AIC3206 (主器件)

    =-=-=-
    Initialize_I2S_interface()似乎仅初始化 I2S2。 您还需要初始化 I2S1和 I2S3、对吧? 根据需要通过修改配置1和3来复制和粘贴。
    test_status initial_I2S_interface (void)

    I2S_Config hwconfig;
    int16结果= 0;

    /*打开实例0的设备*/
    hI2 = I2S_OPEN (I2S_instance2、I2S_polled、I2S_CHAN_STEREO);


    =-=-=-

    该软件正在轮询 I2S 接收寄存器-最好使用中断、尤其是在为多个 I2S 端口提供服务时...
    但是、如果 I2S 完全同步、则可以通过轮询从一个端口接收数据(并在等待接收时阻止除中断之外的所有其他内容)、然后同时发送到两个端口。 该传输需要在下一个接收(62.5us 或6250个周期)之前发生...

    //读取16位左通道数据
    I2S_readLeft (&data1);

    //读取16位右通道数据
    I2S_readRight (&data2);

    =-=-=-
    引脚多路复用器将 I2S3配置为 UART -将 I2S3的 PPMODE_1更改为 PPMODE_6 ...
    RetVal = SYS_setEBSR (CSL_EBSR_FIELD_PPMODE、CSL_EBSR_PPMODE_1);//为 I2S2配置并行端口

    希望这对您有所帮助、
    标记

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

    请查看我最初发布的此主题。 我不是在谈论 i2s3。

    我正在尝试从 J7接头上的 I2S 引脚传输 I2S 输出。 我想他们是 i2s1。 我询问了 i2s3以用于未来的微处理器实施。 首先、我需要最终确定 BoosterPack DSP。

    请提供用于初始化 J7引脚接头的 I2S 的代码。

    另外,我不知道 i2s1是否未初始化,我是如何传输一次数据的,而不是现在的数据呢? 请参阅我之前的回复、其中我提到我在传输数据方面成功了几次
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    继续上述答复

    您能否在终端的 BoosterPack 上测试我的代码、看看它是否适合您。 您可以执行所讨论的更改、这样调试问题就更快了。 我再次强调一点、我需要 J7 i2s1引脚的 I2S 输出、它接收来自蓝牙模块的时钟。 谢谢

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

    我不知道为什么你对这个问题如此困惑。 我无法从 c5545 BoosterPack J7接头引脚传输 I2S 数据。 就像这样简单。 我不想获得有关触摸屏或微处理器问题的帮助。 它们只是介于两者之间的讨论。 但我仍然无法解决我启动此主题的原始问题。

    我只需要从 J7接头引脚的 i2s1输出 I2S 数据。 我在上述帖子中发布了编解码器设置和 i2c 设置代码。 您要求我对输出进行范围界定,我对其进行了范围界定,但我看不到读数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    V Pot、

    您的 MCU 是否会为 I2S1提供 BCLK 和 FS? BoosterPack 具有一个方向电平转换器、用于将 I2C1_FS 和 I2C1_CLK 的方向从 J7接头默认为 C5545。 即使您将 MCU 配置为与编解码器相同的 BCLK 和 FS 频率、时钟速率也不能100%相同、并且会发生漂移。 最好将编解码器 BCLK 和 FS 输出用作 I2S2、I2S1和 MCU 的输入。

    如果 C5545是 I2S1主器件、它无法从 I2S2生成其时钟、并且仍将与 I2S2不同步。 因此、您必须将 I2S1用作从设备。

    我没有修改电路板以将 I2S2_BCLK 短接至 I2S1_BCLK 或将 I2S2_FS 短接至 I2S1_FS。 理想情况下、这两个输入都短接至每个输入的编解码器输出。 您必须将一根导线从 I2S2_BCLK 焊接到 I2S1_BCLK、并将另一根导线从 I2S2_FS 焊接到 I2S1_FS。

    因此,我无法测试此代码,但我将其打开以向您显示要执行的操作...

    看看我是如何复制 I2S1和 I2S2的句柄的、如何复制每个句柄的 INIT 函数、将这两个函数都作为从机、将写入合并到 I2S2和 I2S1、并且只保留 I2S2读取...

    它未经测试、但我在 I2S2_1_writeLeft 函数中留下了注释、如果无法正常工作、请尝试不同的操作...

    您必须从这里获取它...

    void I2S2_1_writeLeft (Int16 data)
    {
    ioport CSL_I2sRegs * regs2;
    ioport CSL_I2sRegs *寄存器1;
    
    regs2=hI2s2->hwRegs;
    regs1 = hI2s1->hwRegs;
    // while (((CSL_I2S_I2S_I2SINTFL_XMITSTFL_MASK & regs->I2SINTFL)=0);//等待发送中断挂起
    // regs->I2STXLT1 =(data); // 16位左声道发送音频数据
    
    //如果这不起作用,请尝试在下面替换,同时使用... while (((CSL_I2S_I2S_I2SINTFL_XMITSTFL_MASK & regs->I2SINTFL)=0);
    //或者您可能必须从 I2S2_readLeft 和 I2S2_readRight 函数中的 I2S1读取
    while ((((CSL_I2S_I2S_I2SINTFL_XMITSTFL_MASK & regs2->I2SINTFL)=0)&&(((CSL_I2S_I2SINTFL_XMITSTFL_MASK & s1->I2SregINTFL)=0)));//等待发送中断挂起
    regs2->I2STXLT1 =(数据); // 16位左声道发送音频数据
    regs1->I2STXLT1 =(数据); // 16位左声道发送音频数据
    } 

    Audio_header_loopback_test_V_Pot……
    
    /*
    版权所有(c) 2016、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    */
    
    /*! \file audio_header_loopback_test.c
    *
    \brief 函数、用于为音频
    配置音频编解码器稳压器* 耳机回送操作。
    *
    */
    
    #include "Audio 耳机回送测试.h"
    #include "Audio common.h"
    
    extern test_status aic3206_headsetloop_config (void * testArgs);
    
    /**
    
    *\brief 此函数会配置
    *音频耳机回送测试
    *
    *\param testArgs [in]测试参数
    *
    
    **\n *的所有音频编解码器寄存器 TEST_PASS -测试通过
    *\n test_fail -测试失败
    *
    //
    test_status aic3206_headsetloop_config (void * testArgs)
    {
    int16秒、msec;
    int16样片、data1、data2;
    
    C55x_msgWrite ("测试从 HP MIC 接收音频样本并输出\n"\}
    "耳机端口上的情况相同\n\r\n");
    
    C55x_msgWrite ("将耳机连接到 BoosterPack 的耳机端口\n\r\n\r\n");
    
    c55x_msgWrite ("在耳机 MIC 附近讲话并检查耳机输出中的音频\n\r\n\r\n");
    
    /*配置 AIC3206 */
    AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
    AIC3206_WRITE( 1, 0x01 );//重置编解码器
    C55x_DELAY_msec (1);//复位后等待1ms
    AIC3206_WRITE( 0, 0x01 );//选择第1页
    AIC3206_WRITE( 1, 0x08 );//禁用从 DVDD 生成粗 AVDD
    AIC3206_WRITE( 2, 0x01 );//启用模拟块,使用 LDO 电源
    AIC3206_WRITE( 1230x05 );//强制参考在40ms 内加电
    C55x_DELAY_msec (40);//等待至少40ms
    AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
    
    /* PLL 和时钟配置和上电*/
    AIC3206_WRITE( 27, 0x0d );// BCLK 和 WCLK 设置为 o/p;aic3206 (主器件)
    AIC3206_WRITE( 28, 0x00 );//数据设置= 0
    AIC3206_WRITE (4、0x03);// PLL 设置:PLLCLK <- MCLK、CODE_CLKIN <-PLL CLK
    AIC3206_WRITE( 6, 0x07 );// PLL 设置:J=7
    AIC3206_WRITE( 7, 0x06 );// PLL 设置:hi_BYTE (D=1680)
    AIC3206_WRITE (8、0x90);// PLL 设置:LO_BYTE (D=1680)
    AIC3206_WRITE( 30, 0x88 );//仅在主控模式下,每帧32位时钟
    // BCLK=DAC_CLK/N =(12288000/8)= 1.536MHz = 32*FS
    AIC3206_WRITE( 5, 0x91 );// PLL 设置:加电 PLL,P=1和 R=1
    C55x_DELAY_msec (1);//等待 PLL 出现
    AIC3206_WRITE( 13, 0x00 );//对于 DOSR = 128十进制或0x0080 DAC 过采样,为 HI_Byte (DOSR)
    AIC3206_WRITE( 14, 0x80 );// LO_Byte (DOSR) for DOSR=128 thetal 或0x0080
    AIC3206_WRITE( 20, 0x80 );// AOSR = 128十进制或0x0080 AoSR =抽取滤波器1至6
    AIC3206_WRITE( 11, 0x82 );//加电 NDAC 并将 NDAC 值设置为2.
    AIC3206_WRITE( 12, 0x87 );//为 MDAC 加电并将 MDAC 值设置为7
    AIC3206_WRITE( 18, 0x87 );//加电 NADC 并将 NADC 值设置为7.
    AIC3206_WRITE( 19, 0x82 );//加电 mAdc 并将 mAdc 值设置为2.
    
    /* DAC 布线和上电*/
    AIC3206_WRITE( 0, 0x01 );//选择第1页
    AIC3206_WRITE( 12, 0x08 );//路由至 HPL 的 LDAC AFIR
    AIC3206_WRITE( 13, 0x08 );// RDAC AFIR 路由到 HPR
    AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
    AIC3206_WRITE( 64, 0x02 );//左容积=右容积
    AIC3206_WRITE( 65, 0x20 );//左 DAC 增益至0dB VOL;右轨左
    AIC3206_WRITE( 63, 0xd4 );//向左、右上电数据路径并设置通道
    AIC3206_WRITE( 0, 0x01 );//选择第1页
    AIC3206_WRITE( 16, 0x00 );//取消 HPL 静音,0dB 增益
    AIC3206_WRITE( 17, 0x00 );//取消 HPR 静音,0dB 增益
    AIC3206_WRITE( 9, 0x30 );//加电 HPL、HPR
    C55x_DELAY_msec (1); //等待
    
    /* ADC 路由和上电*/
    AIC3206_WRITE( 0, 0x01 );//选择第1页
    AIC3206_WRITE (51、0x68);//加电 micBIAS、micBIAS = 2.5V (CM = 0.9V)
    AIC3206_WRITE( 52, 0x4 );//立体声1插孔
    //将 IN2_L 更改为 LADC_P、阻值为40千欧
    AIC3206_WRITE (54、0x40);// CM_1 (共模)通过40千欧连接到 LADC_M
    
    AIC3206_WRITE( 59, 0x00 );// MIC_PGA_L 取消静音
    AIC3206_WRITE( 60, 0x00 );// MIC_PGA_R 取消静音
    
    AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
    AIC3206_WRITE( 81, 0xc0 );//向左和右上电 ADC
    AIC3206_WRITE( 82, 0x00 );//取消左右 ADC 的静音
    AIC3206_WRITE( 0, 0x00 );//选择 PAGE 0
    C55x_DELAY_msec (1); //等待
    
    /*初始化 I2S */
    initialize_i2s2_interface();
    initialize_i2s1_interface();
    
    GPIO_interrupt_initiation();
    
    /*播放循环5秒*/
    // for (sec = 0;sec < 5;sec++)
    while (1)
    {
    对于(msec = 0;msec < 5000;msec++)
    {
    对于(sample = 0;sample < 48;sample++)
    {
    /*读取16位左通道数据*/
    I2S2_readLeft (&data1);
    
    /*读取16位右通道数据*/
    I2S2_readRight (&data2);
    
    /*写入16位左通道数据*/
    I2S2_1_writeLeft (data1);
    
    /*写入16位右通道数据*/
    I2S2_1_writeRight (data1);
    }
    if (sw3预置== true)
    {
    中断;
    }
    
    }
    if (sw3预置== true)
    {
    中断;
    }
    
    }
    I2S_CLOSE (hI2s2);//可断开 I2S2
    // I2S_CLOSE (hI2s1);//可断开 I2S1
    
    AIC3206_WRITE( 1, 0x01 );//重置编解码
    
    器返回(TEST_PASS);
    
    }//*
    
    
    
    \brief 此函数用于初始化 i2c 接口并运行
    * 音频耳机环回测试
    *
    *\param testArgs [in]测试参数
    *
    \return
    *\n TEST_PASS -测试通过
    *\n TEST_FAIL -测试失败
    *
    */
    static test_status run_audio_header_loopback _test (void * testArgs)
    {
    Int16 RetVal;
    uint8 c = 0;
    
    //启用到所有外设的时钟*
    CSL_SYSCTRL_regs->PCGCR1 = 0x0000;
    CSL_SYSCTRL_regs->0xPCGCR2;
    
    RetVal = SYS_setEBSR (CSL_EBSR_FIELD_PPMODE、
    CSL_EBSR_PPMODE_1);//为 I2S2配置并行端口
    RetVal |= SYS_setEBSR (CSL_EBSR_FIELD_SP1MODE、
    CSL_EBSR_SP1MODE_1);//串行端口模式1 (I2S1和 GP[11:10])。
    
    msVal = initialize_i2c_interface (testArgs);
    if (RetVal!= 0)
    {
    C55X_msgWrite ("I2C initialization failed\n"r);
    return (test_FAIL);
    }
    
    RetVal = aic3206_headsetloop_config (testArgs);
    if (RetVal!= 0)
    {
    return (test_FAIL
    
    
    
    
    );}Retr_mic = n (如果接收到输入、则使用#mc55x_user_defn)
    "在耳机输出端正确观察到\n"\}
    "任何其他故障密钥:\n\n");
    
    C55x_msgRead (&c、1);
    if ((c!='y')&&(c!='Y')
    ){
    C55x_msgWrite ("从耳机 MIC 到\n\r\n 的音频回送"
    "至耳机端口不正确\n");
    
    return (test_FAIL);
    }
    #endif
    return (test_pass);
    }
    
    //**
    *
    \brief 此函数执行音频耳机环回测试
    *
    \param testArgs [IN]测试参数
    *
    \return
    *\n TEST_PASS -测试通过
    *\n test_Fail -测试失败
    *
    //
    test_status audioHeadsetLoopbackTest (void * testArgs)
    {
    test_status testStatus;
    
    C55x_msgWrite ("\n ********* \n\n");
    C55x_msgWrite (" 音频耳机环回测试\n");
    C55x_msgWrite ("********* \n\n");
    
    testStatus = run_audio_header_loopback _test (testArgs);
    if (testStatus!= test_pass)
    {
    C55x_msgWrite ("\n\n 音频耳机回送测试失败!\n\n");
    返回(test_fail);
    }
    其他
    {
    C55x_msgWrite ("\n\n 音频耳机回送测试通过!\n\n");
    }
    
    C55x_msgWrite ("\n 音频耳机回送测试已完成!\n\n");
    
    返回 testStatus;
    
    }
    

    Audio_common.c...
    
    
    /*
    版权所有(c) 2016、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    */
    
    /*! \file audio_common.c
    *
    \brief 函数,用于初始化 i2c 和 I2S 接口以及读取和
    * 使用这些接口的操作。
    *
    /
    
    #include "audio_common.h"
    
    CSL_I2sHandle hI2s2 = 0;
    CSL_I2sHandle hI2s1 = 0;
    volatile UINT16 sw3Pressed = 0;
    
    //
    *\brief GPIO 中断服务例程
    *
    \param testArgs [IN]测试参数
    *
    *\return none
    */***
    ***
    
    
    
    ************************************************************
    
    
    
    /*检查 GPIO 中断标志寄存器*/
    if ((1 == GPIO_statusBit (gpioHandle、CSL_GPIO_PIN13、RetVal)))
    {
    /*清除 GPIO 中断标志寄存器*/
    GPIO_clearInt (gpioHandle、CSL_GPIO_PIN13);
    sw3预置= 1;
    }
    
    IRQ_CLEAR (GPIO_EVENT);
    }
    
    TEST_STATUS GPIO_INTERRUPT_INPSIVATION (void)
    {
    
    Int16 RetVal;
    
    CSL_GpioPinConfig 配置;
    易失性 UINT32循环;
    sw3预置= 0;
    
    //为 GPIO 设置总线*
    CSL_FINST (CSL_SYSCTRL_REGs->EBSR、PPSYS_MODE1);
    
    /*禁用 CPU 中断*/
    IRQ_globalDisable ();
    
    //清除任何挂起的中断*/
    IRQ_CLEARALL();
    
    //禁用所有中断*/
    IRQ_disableAll();
    
    /*初始化中断矢量表*/
    IRQ_setVecs ((uint32)(&VECSTART));
    
    /*打开 GPIO 模块*/
    gpioHandle = GPIO_open (&GpioObj、&RetVal);
    if ((NULL =gpioHandle)||(CSL_Sok!= RetVal))
    {
    C55x_msgWrite ("GPIO_open failed\n");
    返回(test_fail);
    }
    
    /*重置 GPIO 模块*/
    GPIO_RESET (gpioHandle);
    
    for (loop=0;loop < 0x5F5E10;loop++){}
    
    C55x_msgWrite ("按 BoosterPack 上的 SW3退出测试\n\n"\};
    
    /**测试 GPIO_CONFIG API 以使 PIN13成为 I/p */
    config.pinNum = CSL_GPIO_PIN13;
    CONFIG.DIRECTION = CSL_GPIO_DIR_INPUT;
    CONFIG.TRIGGER = CSL_GPIO_TRIG_RISING _EDGE;
    RetVal = GPIO_configBit (gpioHandle、&config);
    if (CSL_Sok!= RetVal)
    {
    C55x_msgWrite ("test failed - GPIO_configBit\n");
    返回(TEST_FAIL);
    }
    
    //启用 GPIO 中断*
    RetVal = GPIO_enableInt (gpioHandle、CSL_GPIO_PIN13);
    if (CSL_Sok!= RetVal)
    {
    C55X_msgWrite ("test failed- GPIO_enableInt\n");
    return (RetVal);
    }
    
    //清除任何挂起的中断*/
    IRQ_CLEAR (GPIO_EVENT);
    
    IRQ_plug (GPIO_EVENT、&gpioISR);
    
    /*启用中断*/
    IRQ_ENABLE (GPIO_EVENT);
    IRQ_globalEnable();
    
    return (test_pass);
    
    }//**
    
    
    *
    \brief 此函数用于启用和初始化 I2S 模块
    *
    *\param void
    *
    *\return
    *\n TEST_PASS -测试通过
    *\n TEST_FAIL -测试失败
    *
    /
    TEST_STATUS initial_i2s2_interface (void)
    {
    I2S_Config hwconfig;
    Int16 结果= 0;
    
    //用实例0打开器件*/
    hI2s2 = I2S_open (I2S_instance2、I2S_polled、I2S_cho_sisteo);
    
    //设置配置结构的值*/hwconfig.datatype
    = I2S_立体声_ENABLE;
    hwconfig.loopBackMode = I2S_loopback_disable;
    hwconfig.fsPol = I2S_FSPOL_LOW;
    hwconfig.clkPol = I2S_Rising;
    hwconfig.datadalay = I2S_DATADELAY_ONEBIT;
    hwconfig.datapack = I2S_DATAPACK_ENABLE;
    hwconfig.signext = I2S_SIGNEXT_DISABLE;
    hwconfig.wordLen = I2S_WORDLEN_32;
    hwconfig.i2sMode = I2S_SLAVE;
    hwconfig.FError = I2S_FSERROR_ENABLE;
    hwconfig.OuError = I2S_OUERROR_ENABLE;
    
    //配置硬件寄存器*/
    结果+= I2S_setup (hI2s2、&hwconfig);
    结果+= I2S_transEnable (hI2s2、true);
    
    返回结果
    
    ;}
    
    
    /**
    *
    \brief 此函数用于启用和初始化 I2S 模块
    *
    *\param void
    *
    *\return
    *\n TEST_PASS -测试通过
    *\n TEST_FAIL -测试失败
    *
    /
    TEST_STATUS initial_i2s1_interface (void)
    {
    I2S_Config hwconfig;
    Int16 结果= 0;
    
    //用实例0打开器件*/
    hI2s1 = I2S_open (I2S_instance1、I2S_polled、I2S_CHAN_STEREO);
    
    //设置配置结构的值*/hwconfig.datatype
    = I2S_立体声_ENABLE;
    hwconfig.loopBackMode = I2S_loopback_disable;
    hwconfig.fsPol = I2S_FSPOL_LOW;
    hwconfig.clkPol = I2S_Rising;
    hwconfig.datadalay = I2S_DATADELAY_ONEBIT;
    hwconfig.datapack = I2S_DATAPACK_ENABLE;
    hwconfig.signext = I2S_SIGNEXT_DISABLE;
    hwconfig.wordLen = I2S_WORDLEN_32;
    hwconfig.i2sMode = I2S_SLAVE;
    hwconfig.FError = I2S_FSERROR_ENABLE;
    hwconfig.OuError = I2S_OUERROR_ENABLE;
    
    //配置硬件寄存器*/
    结果+= I2S_setup (hI2s1、&hwconfig);
    结果+= I2S_transEnable (hI2s1、true);
    
    返回结果;
    
    }
    
    /**
    *
    \brief 此函数读取传入的 I2S 左通道字并将其写入
    * "数据"的位置。
    *
    *\param * data -如果 I2S 数据目标
    为位置的指针*
    *\return void
    *
    //
    void I2S2_readLeft (Int16* data)
    {
    ioport CSL_I2sRegs *寄存器;
    
    regs = hI2s2->hwRegs;
    while ((0x08 & regs->I2SINTFL)=0);//等待接收中断挂起
    *data = regs->I2SRXLT1; // 16位左侧通道接收音频数据
    }
    
    //
    *
    \brief 此函数用于写入 I2S 左侧通道字
    *
    \param data -I2S 左侧数据
    *
    *\return void
    *
    //
    void I2S2_1_writeLeft (Int16 data)
    {
    ioport CSL_I2sRegs * regs2;
    ioport CSL_I2sRegs *寄存器1;
    
    regs2=hI2s2->hwRegs;
    regs1 = hI2s1->hwRegs;
    // while (((CSL_I2S_I2S_I2SINTFL_XMITSTFL_MASK & regs->I2SINTFL)=0);//等待发送中断挂起
    // regs->I2STXLT1 =(data); // 16位左声道发送音频数据
    
    //如果这不起作用,请尝试在下面替换,同时使用... while (((CSL_I2S_I2S_I2SINTFL_XMITSTFL_MASK & regs->I2SINTFL)=0);
    //或者您可能必须从 I2S2_readLeft 和 I2S2_readRight 函数中的 I2S1读取
    while ((((CSL_I2S_I2S_I2SINTFL_XMITSTFL_MASK & regs2->I2SINTFL)=0)&&(((CSL_I2S_I2SINTFL_XMITSTFL_MASK & s1->I2SregINTFL)=0)));//等待发送中断挂起
    regs2->I2STXLT1 =(数据); // 16位左声道发送音频数据
    regs1->I2STXLT1 =(数据); // 16位左声道传输音频数据
    }
    
    /**
    *
    \brief 此函数读取传入的 I2S 右声道字并将其写入
    * "数据"的位置。
    *
    *\param * data -如果 I2S 数据目标
    为位置的指针*
    *\return void
    *
    //
    void I2S2_readRight (Int16* data)
    {
    ioport CSL_I2sRegs *寄存器;
    
    regs = hI2s2->hwRegs;
    // while (((0x08 & regs->I2SINTFL)=0);//等待接收中断挂起
    *data = regs->I2SRXRT1; // 16位左侧通道接收音频数据
    }
    
    //
    *
    \brief 此函数用于写入 I2S 右侧通道字
    *
    \param 数据-I2S 右侧数据
    *
    *\return void
    *
    //
    void I2S2_1_writeRight (Int16 data)
    {
    ioport CSL_I2sRegs * regs2;
    iopcsl_I2sRegs * regs1;
    
    // regs2 = hI2s2->hwRegs;
    // regs1 = hI2s2->hwRegs;
    // while (((CSL_I2S_I2S_I2SINTFL_XMITTSTFL_MASK & regs->I2SFL)= 0)= 0)等待发送中断/等待挂起
    regs2->I2STXRT1 =(数据); // 16位左声道发送音频数据
    regs1->I2STXRT1 =(数据); // 16位左声道传输音频数据
    }
    
    //*
    
    \brief 此函数用于启用和初始化 I2C 模块
    *I2C 时钟设置为以100KHz 运行
    *
    *\param testArgs [IN]测试参数
    *
    \return
    *\n TEST_PASS -测试通过
    *\n test_Fail -测试失败
    *
    //
    test_status initialize_i2c_interface (void * testArgs)
    {
    CSL_Status 状态;
    CSL_I2cConfig i2cConfig;
    
    status = I2C_init (CSL_I2C0);
    
    //将 I2C 模块配置为写入*/
    i2cConfig.icoar = CSL_I2C_ICOAR_DEFVAL;
    i2cConfig.icimr = CSL_I2C_ICIMR_DEFVAL;
    i2cConfig.ickl = i2cSAR
    
    = i2cSAR = i2cConfig.icar_iCSIC.iC20_Icc_Icc=iCSIL.CSIMP_Icc_Icc=20;iCSR_Icc=Icc=Icc=Icc=I
    i2cConfig.icmdr = CSL_I2C_ICMDR_WRITE_DEFVAL;
    i2cConfig.icemdr = CSL_I2C_ICEMDR_DEFVAL;
    i2cConfig.icpsc = 20;
    
    状态|= I2C_CONFIG (&i2cConfig);
    
    返回0;
    
    }
    
    /**
    *
    \brief 此函数用于写入音频编解码器寄存器
    *
    \param testArgs RegNum -寄存器编号
    * regVal -寄存器数据
    *
    \return
    *\n TEST_PASS -测试通过
    *\n TEST_FAIL -测试失败
    *
    */
    TEST_STATUS AIC3206_WRITE (UINT16 RegNum、UINT16 regval)
    {
    Int16 RetVal;
    UINT16 startStop =((CSL_I2C_START)|(CSL_I2C_STOP));
    uint16 cmd[2];
    CMD[0]= RegNum & 0x007F; // 7位器件寄存器
    CMD[1]= regval; // 8位寄存器数据
    
    C55x_DELAY_msec (3);
    
    /* I2C 写入*/
    RetVal = I2C_WRITE (cmd、2、AIC3206_I2C_ADDR、
    true、startStop、CSL_I2C_MAX_TIMEOUT);
    if (RetVal!= 0)
    {
    C55x_msgWrite ("I2C Write Failed\n\r");
    //return -1;
    }
    
    返回(0);
    }
    

    audio_common.h...
    
    
    /*
    版权所有(c) 2016、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *
    */
    
    /**
    *
    \file audio_common.h
    *
    \brief 此文件包含结构、typedef、函数和
    * 用于回送测试音频线路的原型
    *
    /
    
    #ifndef _audio_common_H_
    #define _audio_common_H_
    
    #include "platform_internals.h"
    #include "evm5515.h"
    
    
    #define AIC3206_I2C_ADDR 0x18
    
    #define Rcv 0x08
    #define Xextern
    
    CSL_I2gose2
    
    静态异常 GpioObj;
    静态 CSL_GpioObj *gpioHandle;
    
    extern volatile UINT16 sw3 Pressed;
    
    /*引用中断矢量表的开头*/
    /*此符号在文件 vectors.asm 中定义 //
    extern void VECSTART (void);
    
    //
    *\brief GPIO 中断服务例程
    *
    \param testArgs [IN]测试参数
    *
    \return none
    */
    interrupt gpioISR (void);
    
    
    test_status GPIO_interrupt_initiallion (void);
    
    //
    *\brief 此函数用于启用和初始化 I2S 模块
    
    *\param *
    
    *\n ** return *\void *
    TEST_PASS -测试通过
    *\n test_Fail -测试失败
    *
    //
    test_status initialize_i2s1_interface (void);
    
    //
    *\brief 此函数用于启用和初始化 I2S 模块
    *
    \param void
    *
    *\return
    *\n TEST_PASS -测试通过
    *\n TEST_FAIL -测试失败
    *
    //
    test_status initialize_i2s2_interface (void);
    
    /**
    \brief 此函数读取传入的 I2S 左通道字并将其写入
    * "数据"的位置。
    *
    *\param * data -如果 I2S 数据目标为位置指针
    *
    *\return void
    *
    /
    void I2S2_readLeft (Int16* data);
    
    /**
    *\brief 此函数用于写入 I2S 左通道字
    *
    *\param data -I2S 左侧数据
    *
    \return void
    *
    *//
    void I2S2_1_writeLeft data (Int16);
    
    /**
    *\brief 此函数读取传入的 I2S 右通道字并将其写入
    * "数据"的位置。
    *
    *\param * data -如果 I2S 数据目标为位置的指针
    *
    *\return void
    *
    /
    void I2S2_readRight (Int16* data);
    
    /**
    *\brief 此函数用于写入 I2S 右侧通道字
    *
    *\param data -I2S 右侧数据
    *
    \return void
    *
    *//
    void I2S2_1_writeRight (Int16);
    
    /**
    *\brief 此函数用于启用和初始化 I2C 模块
    *I2C 时钟设置为以100KHz 运行
    *
    \param testArgs [IN]测试参数
    *
    \return
    *\n TEST_PASS -测试通过
    *\n test_fail -测试失败
    *
    //
    test_status initialize_i2c_interface (void * testArgs);
    
    /**
    *\brief 此函数用于写入音频编解码器寄存器
    *
    \param RegNum -寄存器编号
    * regVal -寄存器数据
    *
    \return
    *\n TEST_PASS -测试通过
    *\n TEST_FAIL -测试失败
    *
    /
    TEST_STATUS AIC3206_WRITE (UINT16 RegNum、UINT16 regval);
    
    #endif
    

    希望这对您有所帮助、
    标记

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

    Mark、

    谢谢好友。 我真的很感谢。

    1)是的、我将通过蓝牙模块向 i2s1提供 BCLK 和 FS。

    2)如果我为 i2s1提供时钟和 FS、我不必像您说的那样短接?

    3) 3)我将测试代码并恢复。 再次感谢

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

    Mark、

    我已经尝试过您的代码... 这里是更新

    1) 1)我在 I2S2_1_writeLeft (Int16 data)中使用了 regs1和 regs2、但仅 regs 不起作用、因为我们需要单独打开 I2S1和 I2S2

    2) 2) aic3206设置有问题、耳机发出噪音... 我将其更改为以前的 aic3206设置、它通过耳机播放输出、没有任何出色的效果。

    3) 3)现在进入 i2s1变速器。 正如我之前所说、我通过蓝牙为 i2s1引脚提供了时钟和 FS、现在它肯定会传输 I2S 输出...但它主要是失真削波噪声以及一些良好的音频... 我已附加了几首 i2s1输出的歌曲录音。 请倾听并告诉我可能会出现什么问题。 谢谢

    e2e.ti.com/.../I2s-Recording.m4a

    e2e.ti.com/.../Recording-I2s1.m4a

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

    进展顺利。

    C5545 I2S 和编解码器 I2S 可能都配置为主接口? 这会导致电平转换器 C5545侧的 BCLK 和 FS 信号发生竞争。 您是否将 I2S1配置从主设备更改为从设备? 是否已组装 J13接头? 它强制 U13电平转换器的方向从 B 到 A (使蓝牙成为主控)。

    您是否可以使用示波器探测信号? 电平转换器 C5545侧的探头-您必须将探头触摸到 U13引脚8和9以检查是否存在争用。 电平转换器不允许从 A 侧到 J7接头所在的 B 侧的任何内容。

    与 I2S2_CLK 和 I2S2_FS 相比、我还想查看 I2S1_CLK 和 I2S2_FS -如果它们不同步、则在使用轮询软件时可能会产生噪声。

    我会在软件中隔离 I2S2和 I2S1。 证明每项工作都是分开的、然后将它们组合在一起、以便将从 I2S2接收的内容传输到 I2S1。 您必须更改 I2S2读取和写入函数、并创建 I2S1_READ 函数以在隔离时测试 I2S1。
    如果您可以从蓝牙回送内容并将其发送回蓝牙、则读取 I2S1并将其写回 I2S1。
    如果您不能、则创建正弦波并将其发送到 I2S1。

    您可以使用该正弦查找表作为测试输出。
    int16 sinetable[48]={
    0x0000、0x10b4、0x2120、0x30fb、0x3fff、 0x4dea、0x5a81、0x658b、
    0x6ed8、0x763f、0x7ba1、0x7e5、0x7ffd、 0x7e5、0x7ba1、0x76ef、
    0x6ed8、0x658b、0x5a81、0x4dea、0x3fff、 0x30fb、0x2120、0x10b4、
    0x0000、0xef4c、0xdee0、0xcf06、0xc002、 0xb216、0xa57f、0x9a75、
    0x9128、0x89c1、0x845f、0x811b、0x8002、 0x811b、0x845f、0x89c1、
    0x9128、0x9a76、0xa57f、bb2216、0xc002、 0xcf06、0xdee0、0xef4c
    };

    此致、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Mark、
    感谢您回来。 我将会消化您今晚建议的测试,并更新您的最新信息。 请稍后与我联系、并在明天返回查看我的更新状态。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Mark、

    请查找以下更新...

    1) 1)我在 BoosterPack 上根本看不到您提到的 J13接头。

    2) 2)我运行了以下测试。

    测试1:播放您提供的正弦波数据。 i2s1输出仍然是相同的失真声音。 但信标输出与以前一样完美。

    注意:-在 void I2S2_1_writeRight (Int16数据) 中、注释掉 regs1对 i2s1输出的传输不起作用、但仍然向蓝牙的左右耳机传输失真的声音。 但是、注释掉 void I2S2_1_writeLeft (Int16 data)中的 regs1会完全停止传输、没有 i2s1输出。 因此 i2s1的写入函数存在问题、可以在测试2之后进一步确认

    测试2:在蓝牙上播放歌曲,为 i2s1提供音频输入,现在从 i2s1读取左侧数据(相应地更改了代码)。 将输出写入 i2s2的左侧和右侧(音频编解码器)、已注释 i2s1的写入命令。 我可以听到来自 BoosterPack 耳机插孔的完美输出。 这样可以排除时钟不匹配问题。 但当我向左启用 i2s1的写入命令时。 现在、即使是 i2s2输出(即来自 BoosterPack 耳机插孔的输出)也有噪声。

    我觉得问题是 i2s1的写入函数。 i2s1的配置是否缺少 audiocommon.c 模块以外的内容?

    3) 3)在 hwconfig 中将 i2s1设置为 I2S_SLAVE、以便使其成为从站而不会出现任何问题。 我不认为 I2S 是主器件、是否还有其他地方需要使其成为从器件?

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

    Mark、

    您能查看我的上述测试结果并回复一下。 谢谢

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

    Mark、

    您能否回复、或者我是否应该启动一个新的主题。

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

    [引用 user="V Pot"]

    1) 1)我在 BoosterPack 上根本看不到您提到的 J13接头。

    [/报价]

    抱歉、J13仅计划在下一个电路板修订版中使用。 我查看的是这些原理图。 因此、要将 I2S1 CLK 和 FS 更改为从 C5545输出(如果需要、在主模式下为 I2S1)、您需要对电阻器 R126进行降级并将其移至 R127。

    [引用 user="V Pot"]3) i2s1在 hwconfig 中设置为 I2S_SLAVE、以便使其成为从站而不会出现任何问题。 我不认为 I2S 是主器件、是否还有其他地方需要使其成为从器件?

    您可以通过在音频回放期间停止执行并在 CCS 寄存器窗口中检查寄存器来验证每个 I2S 是否配置为从器件。 点击 View -> Registers、然后找到 I2S1并展开 I2SCTRL、查看 MODE 位。

    确保您可以通过仅使用处于轮询模式的 I2S2返回原始代码来清理 I2S1音频。 将所有 I2S2更换为 I2S1。 然后使用正弦表输出正弦音频。  

    使用示波器探测 I2S 时钟、FS 和数据输出信号。 您可以在此处发布示波器截图。

    希望这对您有所帮助、
    标记

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

    Mark、

    谢谢。 将跟进这些测试。

    请定期检查该主题、并帮助我解决该问题。

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

    Mark、

    1) 1)我在仅轮询 i2s1的情况下尝试了代码、但输出仍然具有相同的噪声。

    2) 2)令人惊讶的是、使用 I2S 输入引脚将蓝牙输入带入 DSP 是干净的、只有输出是混乱的。

    3) 3)以下是的屏幕截图

    • I2S 输出
    • fsync
    • I2S 卡式
    • 蓝牙 I2S 输出

    除了蓝牙输出之外、其他波形对我来说并不重要。

    4) 4)像我们使用 c 代码向 i2s1引脚写入数据一样、我们还需要在 c 代码中启用或配置 fs 和 I2S_clk 吗???

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

    继续以上测试回复... 以下是蓝牙 WS 和 SCK 的屏幕截图(蓝牙提供时钟记住功能)

    5) 5)我还想知道1位的 DSP 输出数据延迟是否会导致噪声问题? 这是蓝牙模块的 adat 表

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

    Mark、您好!

    您能不能查看并更新它。 谢谢

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

    我在所附的波形中看不到太多。 它们的缩放太远。 您的示波器是否允许放大更远的距离以查看信号边缘如何对齐?

    您能不能提醒我 I2S1的时钟源是什么? 今晚我会再看一看。

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

    Mark、您好!

    1) 1)我有意放大。 我可以缩小
    2) 2)时钟源是蓝牙设备... 我在上面的回复中附加了蓝牙 ws 和 clk 范围。

    3)此处是已缩小的 DSP 输出、fysnc 和 I2S_clk 范围...注意:DSP i2s1处于从模式、在范围界定时未连接源时钟...但在范围界定时数据正在写入 i2s1。

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

    HI V Pot、

    我希望您放大、而不是缩小。

    让我们看看我所附的示波器屏幕截图中的信号。

    然后、您可以使用 I2S2数据探测 I2S1 CLK 和 FS 与 I2S2 CLK 和 FS 之间的关系以及 I2S1 CLK、FS 和数据。 让我们看看发生了什么。

    此致、
    标记