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/TMS570LC4357:从具有 DMA 的存储器中读取多个 ADC 通道值

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/820493/ccs-tms570lc4357-read-multiple-adc-channel-values-from-memory-with-dma

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

工具/软件:Code Composer Studio

尊敬的 TI 支持团队:  

我刚刚开始使用微控制器(STM32和 Hercules),并希望通过 ADC 读取电流值,尽可能快地计算功率。  
因此,我尝试配置转换后的 ADC 值(2个通道,例如 I1和 I2)的 DMA 传输,而不生成任何会暂时停止主程序的中断。 因此、如果 ADC 也配置为连续模式、则最后转换的电流值应始终可用于主程序。  
我设法通过 STM32实现了这种 ADC DMA 配置、但我很难与 Hercules 搭配使用。 我已经读取了多个线程、比如  

https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/451165?Is-there-any-alternate-way-to-read-ADC-result-data-using-DMA-other-than-FIFO-incase-if-multiple-channels-are-configured-in-single-group

但它仍然不起作用。 我还不理解上面复制的线程中提供的源地址值以及元素源偏移量。 如果我理解正确,Group1 RAM 的基本源地址应为0xFF30000 +(numberofChannelsEvent ( BNDA)+ Result)*4。 例如,通道0的第一个结果始终为0xFF30000 + 4*16 (如果 BNDA = 8)+ 0 (第一个结果)。 这也可以在附件中的 dma_configuration 中看到。  

此外、如果我尝试在没有 DMA 的情况下读取 ADC 数据、看起来工作正常。  

sys_main (我只在那里编写代码)和 HalCoGen 配置可在高速缓存中找到。  

谢谢、

Sebastian e2e.ti.com/.../0310.PowerCalc_5F00_simple.zip

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

    您好!

    ADC1结果存储器的基地址为0xFF3E0000 (数据表中的表6-25)、ADC2结果存储器的基地址为0xFF3A0000 (数据表中的表6-25)

    2.如果在 ADC1组1中使用通道1和通道2、并且希望直接从组1存储器中读出 ADC 转换结果。 组1的转换结果可从地址 ADC RAM 基址+4*2*BNDA 开始访问。 该地址的第一个结果用于输入通道1、下一个结果用于输入通道2、依此类推。

    2.如果要从 FIFO 队列中读出组1的转换结果,可以使用缓冲寄存器(uint32)(&adcREG1->GxBUF[1]作为 DMA 包配置中的源地址。

     

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

    您好!

    只需读取您的代码、DMA 端口不正确。

    在 TMS570LC43x 器件上、Porta 用于闪存、SRAM 和 EMIF。 端口 B 用于所有外设和所有外设存储器(ADC RAM)。 因此、DMA 数据包配置中的 DMA 端口应为:

    PORTB_READ_PORTA_WRITE、其值为0x00。 您在配置中使用4、

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

    尊敬的王先生:

    感谢您的快速回复! 在 DMA 控制包配置中将端口从4更改为0成功解决了 DMA 传输问题。 当然、您是否可以再次查看我的代码在 ADC_postinit 函数中、在该函数中、我将 ADC 注册表配置为在循环模式下启用 DMA?

    接收值似乎是一个随机的位(接收正弦电压时应采用范围形式[0 3.2]V)。 如果我将接收阵列大小(aADC1ConversionDataX)配置为更高,则值与正弦形式不符。 但我首先尝试自己解决这个问题、只有查看 ADC_postinit 函数、这种情况才会更好。  

    此致、

    Sebastian