主题中讨论的其他器件:EVMK2G、 AUDK2G
工具/软件: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、¶mSet1);
EDMA3_DRV_setPaRAM (hEdma、chId2、¶mSet2);
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。 我是否可以通过任何方法从循环缓冲区获取最后写入的样本的索引? 谢谢。