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.

[参考译文] RTOS/66AK2G02:将 McASP 驱动程序用于循环缓冲器

Guru**** 2540720 points
Other Parts Discussed in Thread: AUDK2G

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/569704/rtos-66ak2g02-use-mcasp-driver-for-circular-buffer

器件型号:66AK2G02
主题中讨论的其他器件:EVMK2GAUDK2G

工具/软件:TI-RTOS

我下载了 CCS 和 PDK 并安装在默认目录中:
C:\ti\BIOS_6_46_01_38
C:\ti\ccsv6\        [CCS 版本:6.1.3.00034]
C:\ti\EDMA3_LLD_2_12_02_26
C:\ti\pdk_k2g_1_0_4
C:\ti\processor_sdk_rtos_k2g_3_02_00_05
C:\ti\xdctools_3_32_01_22_core

 

为 McASP 驱动程序提供的示例代码 MCASP_Audio_evmK2G_armExampleProject 使用 McASP2单个 TX/RX 端口。 它按以下顺序利用 API

Edma3init (.) //不是 API,但调用两个 EDMA3 API:EDMA3_DRV_create (.) 和 EDMA3_DRV_open (.)

mcaspBindDev(.)

mcaspCreateChan (.) //调用 EDMA3 API:EDMA3_DRV_requestChannel (.)

mcaspSubmitChan (.) //调用 EDMA3_DRV_linkChannel (.) 和 EDMA3_DRV_enableTransfer (.)

在 EVMK2G 板上运行示例代码时、我能够使用板载 AIC31编解码器获得音频回送。 但该示例与我的示例不同。 由于我需要支持6个以上的端口、因此我使用 McASP0而不是 McASP2。

 

Q1:我想知道如何利用 McASP API 在参数中为 EDMA3配置循环缓冲器、以支持 MCASP_READ 的总共8个 McASP0 AXR 端口[McASP0_AXR0:AXR7]。

请参阅《技术参考手册》、spruhy8e、10.4.4.3持续运行中 EDMA 外设服务的参数配置。 如果我错了、请纠正我的问题。 我认为 EDMA3 API 的顺序如下:

EDMA3_DRV_requestChannel (hEdma、&ChId1、NULL、1、NULL、 null);

EDMA3_DRV_requestChannel (hEdma、&ChId2、NULL、1、NULL、 null);

EDMA3_DRV_setPaRAM (hEdma、chId1、&paramSet1);

EDMA3_DRV_setPaRAM (hEdma、chId2、&paramSet2);

        EDMA3_DRV_linkChannel (hEdma、ChId1、ChId2);

       //  paramSet1和 paramSet2是相同的,只是 paramSet1的链接地址指向 paramSet2。 paramSet2的链接地址指向 paramSet2本身。

         EDMA3_DRV_enableTransfer (hEdma、chId1、EDMA3_DRV_TRIG_MODE_EVENT)

 

但 EDMA3_DRV_requestChannel (.) 和 EDMA3_DRV_linkChannel (.) 在 McASP API 中是分开的:mcaspCreateChan (.) 和 mcaspSubmitChan (.)。 EDMA3_DRV_linkChannel (.) 和 EDMA3_DRV_enableTransfer (.) 位于同一 API mcaspSubmitChan (.)中。 启用 EDMA3传输后能否更改参数集1的链接地址? 如何直接利用 McASP API 来设置 EDMA3以进行循环缓冲?

我修改了 C:\ti\EDMA3_RM_InstanceInitConfig sample_InstInitConfig[NUM_EDMA3_Instances][EDMA3_MAX_regions]中的 C:\ti\EDMA3_LLD_2_12_02_26\packages/ti\sdo\McA3\drv\samples\src\platforms\sample_tci66ak2cfg_gsp02. 我是否有任何地方可以改变以实现我的目标?

Q2:有一个外部信号,我们将其称为 myEvent,既不同步到 McASP 帧同步,也不使用恒定周期。 每当发生 myEvent 时、我需要知道循环缓冲区中最后写入的样本的索引、以便从所有8个通道提取样本块以进行进一步处理。 我似乎需要访问参数来读取目的地址、或者访问计数器来知道循环缓冲区中的写入索引。 但 EDMA3也在更新 Param。 我是否可以通过任何方法从循环缓冲区获取最后写入的样本的索引? 谢谢。

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

    约书亚、

    在 Processor SDK RTOS 中使用 McASP0和 McASP1进行了8通道(4串行器)模拟 IO 环回测试。 此示例使用 AUDK2G 音频子卡作为 IO。 此示例位于下:
    pdk_k2g_1_0_4\packages/ti\addon/audk2g\test\analog\loopback

    文档:
    processors.wiki.ti.com/.../Processor_SDK_RTOS_AUDK2G_AddOn

    TXBUF 和 RXBUF 的大小需要根据所使用的串行器数量进行设置、而将数据移动到缓冲器的 EDMA 配置由 MCASP LLD 配置。 请查看该示例、并告知我们您是否正在寻找该示例

    此致、
    Rahul

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

    在 audk2g 示例中、McASP_cfg.c 中 mcaspRxChanParam 的值
    和 EDMA3_RM_InstanceInitConfig sampleInstInitConfig[NUM_EDMA3_Instances][EDMA3_MAX_REGENTS]的区别
    EDMA3驱动器之间的差异
    C:\ti\EDMA3_LLD_2_12_02_26\packages/ti\sdo\EDMA3\drv\samples\src\platforms\sample_tci66ak2g02_cfg.c
    和 audk2g 示例
    C:\ti\pdk_k2g_1_0_4\packages/ti\addon\audk2g\test\analog\loopback\src\sample_k2g_cfg.c
    有助于了解如何设置 McASP0/1多个端口。
    但它不能解决我的两个问题。

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

    我的问题是否有更新?
    问题1. 用于创建循环缓冲器的美国 McASP API。
    问题2. 每当发生外部事件时、读取指向循环缓冲区中最后写入样本的位置的索引。