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.
工具与软件:
我想配置多个 ADC 通道以连续 读取电压、并使用 DMA 将样本存储到 RAM 中。
参考 SDK 示例: adc_soc_continuous_dma
我在这个示例中可以运行、但 SDK 示例填充 DMA 缓冲区、然后停止。
我想修改示例、以便使 ADC 转换在定义的样本数内是连续的。
我 实验了 在 ISR 中删除函数调用(可以在此处看到)、我怀疑这可能会停止我需要的"连续 ADC 到 DMA"。
您好、Yogesh、
您是否能够包含您修改的 ISR 代码?
此致、
Zackary Fleenor
e2e.ti.com/.../8814.adc_5F00_soc_5F00_continuous_5F00_dma.c
我正在使用 TI SDK 附带的代码(adc_soc_continuous_dma.c)。 我刚刚注释掉了从 App_dmach0ISR ()停止的 ADC。 我们的要求是使用 DMA 持续对256个 ADC 进行采样、并始终再次重复该过程。
TollMan 有一个主题解决了类似的问题。 最终工作代码未发布、因此无法理解解决方案。
您好、Yogesh、
由于我们的专家不在办公室、我们对延误深表歉意。 请多提供1-2天时间进行审查和提供更多反馈。
此致、
Zackary Fleenor
嗨、Yogesh、
您能否包含您提到的上一 E2E 帖子的链接?
此致、
Zackary Fleenor
E2E-AM263X:对多个 ADC 到缓冲器进行持续采样-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI MCU-PLUS-SDK 支持论坛
弗勒诺-这是链接:
E2E-AM263X:对多个 ADC 到缓冲器进行持续采样-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI MCU-PLUS-SDK 支持论坛
较大的光学扩展量。 我正面临着完全相同的问题,并希望 TollMan 按照 Madhav 的建议实施的解决方案,我需要帮助来理解解决方案。 请按优先级提供帮助。
Fleenor -这是非常不幸的,我没有得到答复。 我一直在这个问题上、TI 不提供任何支持、这一点很糟糕。
基本上、我要最终实现的目标是以1ms 的频率对所有6个通道的 ADC0至 ADC5进行采样。
首先、我采用了 TI 示例中的"adc_soc_continuous_dma"代码。
修改了示例代码、以持续对 ADC0-AIN0、ADC1-AIN0和 ADC2-AIN0进行采样。
我可以成功修改代码、针对 ADC0-AIN0和 ADC1-AIN1进行连续 DMA 链路传输
但未成功读取 ADC2-AIN0数据。
我附上您的评论中的代码。 请访问 help.e2e.ti.com/.../adc_5F00_soc_5F00_continuous_5F00_dma_5F00_am263x_2D00_lp_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip
您好、Yogesh
对于延迟、我们深表歉意。 我目前正在处理您的问题、请给我一些时间来向您介绍实施情况。
此致、
Akshit
您好、Akshit -我已经根据"adc_soc_continuous_dma"示例代码附上了我的工程的 zip。 请看一下。
以下是 ADC 读数日志。
ADC0:ADC1:ADC2:ADC3:ADC4
第79章:我是谁
81: 79: 0
83: 82: 0
86: 85: 0
88: 86: 0
90: 87: 0
89: 86: 0
86: 85: 0
84: 82: 0
80: 76: 0
ADC0:ADC1:ADC2:ADC3:ADC4
78: 76: 0
77:76:0
77:76:0
77:76:0
77:75:0
78: 75: 0
78: 76: 0
78: 76: 0
78: 76: 0
第79章:我是谁
我还提到以下2个链接、但尚未成功。
(+) ADC-AM263X:对多个到 DMA 缓冲器的持续采样-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI MCU-PLUS-SDK 支持论坛
(+) ADC-AM263X:多通道、多帧 DMA 参数集-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI MCU-PLUS-SDK 支持论坛
谢谢
Yogesh
感谢您提供所有相关的详细信息 Yogesh ,
请向我提供 EOD、以便向您提供工作场景。
Yogesh、
在您的代码中、我看到 EDMA 使用了3个事件队列、但是 EDMA 仅支持2个事件队列、如 TRM 中所示。
好的。 那么、解决方法是什么、您能帮助解决这个问题吗?
可表示为:
APP_dmaConfigure (gAdc1DataBuffer、Results_Buffer_Size、gEdmaHandle[0]、
ADC1_EDMA_channel、CONFIG_ADC1_RESULT_BASE_ADDR、&tccAlloc0、EDMA_TEST_EVT_QUET_NO_0);
APP_dmaConfigure (gAdc2DataBuffer、Results_Buffer_Size、gEdmaHandle[0]、
ADC2_EDMA_channel、CONFIG_ADC2_RESULT_BASE_ADDR、&tccAlloc1、EDMA_TEST_EVT_QUET_NO_1);
APP_dmaConfigure (gAdc3DataBuffer、Results_buffer_size、gEdmaHandle[0]、
ADC3_EDMA_CHANNEL、CONFIG_ADC3_RESULT_BASE_ADDR、&tccAlloc2、EDMA_TEST_EVT_QUEED_NO_0);
APP_dmaConfigure (gAdc4DataBuffer、Results_buffer_size、gEdmaHandle[0]、
ADC4_EDMA_channel、CONFIG_ADC4_RESULT_BASE_ADDR、&tccAlloc3、EDMA_TEST_EVT_QUEED_NO_1);
您好、Akshit、
下面是一个更新:
只是将队列更改为0不起作用。 我必须在 EDMA 注册代码中添加更多参数集。 完成此更改后、我现在可以正确获取 ADC0-AIN0、 ADC1-AIN0 和 ADC2-AIN0 的数据。 参考随附代码。
但添加 ACD3-AIN0现在不能正常工作、前3个 ADC 可以继续正常工作。 我需要将 ADC3和 ADC4添加到该代码中。 请检查代码、并告诉我出了什么问题。 这有点紧急、因此请提供帮助。
尊敬的 Yogesh:
我没有看到在您共享的代码中将 ADC3和 ADC4添加到 SysConfig。 您能检查一下吗?
此致。
Akshit
您好、Akshit、
感谢您的答复。 我可以修改用于读取所有4个 ADC (ADC0至 ADC4)的 AIN0的代码、并可以成功测试。 附件是供您查看的代码。
现在、我要为所有这些 ADC 添加 AIN1至 AIN5。 我想请您快速提供相关帮助。 您可以构建附加项目。
尊敬的 Aksihit:
现在、由于所有 ADC (ADC0-ADC4)的 AIN0都在工作、我将尝试添加其余信道、即所有 ADC 的 AIN1至 AIN5。 参考随附代码。
但 还没有成功。 您能在这里快速帮助解决我出错了吗?
尊敬的 Yogesh:
如果用例用于同时采样全部30个通道(6个通道(AIN0-5)的5个 ADC)? 那么就不可能实现、因为 单个 ADC 无法同时采样4个不同的采样电压。
如果该用例用于在任意时间点对不同 ADC 的任意一个通道进行同步采样、则可以实现这一操作
可以对所有4个 ADC 的 AIN0进行模拟采样
可以对全部4个 ADC 中的 AIN1进行模拟采样
...
可以对全部4个 ADC 中的 AIN5进行模拟采样
但所有这些都需要进行时间多路复用
此致、
Akshit
您好、Akshit、
是的、用例是对全部30个通道进行采样、即对 全部5个 ADC (ADC0至 ADC5)的全部6个通道(AIN0 - AIN0)进行采样。 并不是同时循环采样。 您能看一下代码、知道问题出在哪里吗? 幻灯片。
因为我们在同一时区、能否进行快速呼叫。
尊敬的 Yogesh:
#define ADC1_1_EDMA_CHANNEL
(DMA_TRIG_XBAR_EDMA_MODULE_10)
/* Function Prototypes */
uint16_t App_dmaConfigure(const uint16_t *table, uint16_t table_size,
EDMA_Handle dma_handle, uint32_t dma_ch,
uint32_t adc_base, ADC_SOCNumber socNumber, uint32_t *tccAlloc, uint32_t event_queue_number);
App_dmaConfigure(gAdc1DataBuffer1, RESULTS_BUFFER_SIZE, gEdmaHandle[0],
ADC1_1_EDMA_CHANNEL, CONFIG_ADC1_RESULT_BASE_ADDR, ADC_SOC_NUMBER1, &tccAlloc5, EDMA_TEST_EVT_QUEUE_NO_1);
edmaParam1.srcAddr = (uint32_t) SOC_virtToPhy((void *)(adc_base+CSL_ADC_RESULT_ADCRESULT0+((uint32_t)socNumber * ADC_RESULT_ADCRESULTx_STEP)));
请告诉我这些更改是否能为您解决问题!
此致、
Akshit
您好、Akshit、谢谢。
我使用了您提供的步骤、并修改了所有 ADC (ADC0-4)所有输入(AIN0-AIN5)的代码。 但我得到 AIN3输入的一个例外。
观察结果。 在 example.sysconf DMA_XBAR 只能配置为最多14个、因此所有 ADC 中的 AIN0至 AIN2可按预期工作、但 AIN3-AIN5无法工作。
要测试的图像。 参考附加代码、I DMA 仅针对3个输入进行配置、即所有 ADC 模块的 AIN0-AIN2 (#define REG_ADC_channel 3)、AIN0-AIN2正常工作。 现在问题是、我要修改什么才能使 AIN3-AIN5正常工作? 请查看随附的代码、并告诉我如何纠正 AIN3-AIN5的问题。
您好、Akshit、
感谢您的支持。 看起来所有输入、即所有 ADC 的 AIN0-AIN5 ADC0-ADC4现在都可以正常工作。 一些配置丢失了、我已对其进行纠正。
请允许我查看随附的代码、并提供您对改进的反馈。
尊敬的 Yogesh:
我很高兴系统现在可以工作了。
我对造成的所有不便深表歉意、并感谢您提供最终工作代码。
我今天将回顾并尽快回复您。
此致、
Akshit
您好、Akshit、
我今天再次对其进行了测试、看起来所有 AIN 都未进行转换。 也许我知道原因,但会需要你的帮助。
我认为它昨天是有效的、因为:
-我将 XBAR 触发从 AIN0-AIN2移位到 AIN3-AIN5以测试该组。 AIN3-AIN5正常工作、但 AIN0-AIN2无效。
-然后我再次将 XBAR 触发移位到 AIN0-AIN2、电路板一直处于开启状态、因此当运行此代码时、所有的 ADC 都在转换数据。 可能是因为 AIN3-AIN5触发已在最后运行。 后来电路板断电。
今天早上、我给电路板上电、再次刷写了相同的代码、只有 AIN0-AIN2起作用。 看起来就像昨天一样、因为 AIN3-AIN5的转换触发器已启动、并且电路板始终处于运行状态。
请帮助解决此问题。
尊敬的 Yogesh:
已了解、由于只有16个 DMA Xbar 通道可用、因此无法同时使用30个 ADC 通道。
我想到的方法是:
.../ti-arm-clang/generated/ti_drivers_open_close.c
;功能中查看 XBAR 配置: 让我知道你的想法!