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.

[参考译文] MSPM0G3107:ADC 配置

Guru**** 2527790 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1548690/mspm0g3107-adc-configuration

器件型号:MSPM0G3107
主题:SysConfig 中讨论的其他器件

工具/软件:

我尝试使用 MSPM0G 器件为 ADC0 和 ADC1 构建双通道同步采样的数据 ACQ、并希望优化硬件解决方案并更大限度地减少 CPU 干预。   我想

1) 启动一个计时器、该计时器定义两个 ADC 的采样时间 (1ms)

2) 每个溢出都会通过两个 ADC 的计时器事件通道开始 ADC 采样。  (这对我来说很合适)

3) 对于 ADC 的 DMA 通道 0 和 DMA 通道 1、MEM 中断会通过 DMA 将结果移动到外部缓冲器。  效果很好。

4) ADC 重新触发并为下一个计时器溢出事件做好准备。  这适用于单 ADC 转换、但当我启用单次重复模式时、ADC 中断只是会不断中断处理器、我无法获得复位中断不会退出。  我已经在调试模式下尝试过、甚至在运行模式下仍然可以复位中断、并让 ADC 等待下一个溢出中断。

下面是为一个 ADC 生成的 SysConfig 文件:

/**
*将自定义配置值写入导入的模块。
*/
ADC121.$NAME =“ADC12_0";“;
ADC121.enabledInterrupts =[“DL_ADC12_INTERRUPT_MEM0_RESULT_LOADE"];“;
ADC121.trigSrc =“DL_ADC12_TRIG_SRC_EVENT";“;
ADC121.subChanID = 1
ADC121.adcMem0avgen = true
ADC121.sampClkSrc =“DL_ADC12_clock_ULPCLK";“;
ADC121.adcMem0chansel =“DL_ADC12_INPUT_CHAN_3";“;
ADC121.sampCnt = 1
ADC121.SampleTime0 =“500ns
ADC121.configureDMA = true
ADC121.enabledDMATriggers =[“DL_ADC12_DMA_MEM0_RESULT_LOADED"];“;
ADC121.repeatMode = true
ADC121.peripheral.$assign =“ADC0";“;
ADC121.adcPin3Config.$name =“ti_driverlib_GPIO_GPIOPinGeneric0";“;
ADC121.DMA_channel.$NAME =“DMA_CH0_ADC0";“;
ADC121.DMA_channel.transferMode =“FULL_CH_REPEAT_Single";“;
ADC121.DMA_CHANNEL.srcLength =“HALF_WORD";“;
ADC121.DMA_CHANNEL.dstLength =“HALF_WORD";“;
ADC121.DMA_CHANNEL.enableInterrupt = true
ADC121.DMA_channel.peripheral.$ASSIGN =“DMA_CH0";“;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据您的说明、我想您想要 MEMCTL[0].trig=1 [Ref TRM (SLAU846B) 表 12-47]。

    (在 sysconfig 中:ADC12_0->Basic->Sampling Mode->Conversion Memory Configuration->Conversion Memory 0->Optional->Trigger Mode->“valid Trigger Will STEP“)。

    在.syscfg 文件中、这类似于:“ADC121.adcMem0trig =“DL_ADC12_TRIGGER_MODE_TRIGGER_NEXT";“;“

    使用默认设置(“Trigger 将自动步进“)时、它将连续采样、而不是基于计时器进行采样。

    【编辑:添加了参考;为了清晰起见,稍微重新格式化。】

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

    感谢您的详细回答、这就是问题所在。   

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

    我遇到了类似的问题、但现在在 UART 上、我尝试配置 DMA、将采样的 ADC 数据推送到 UART。  我没有运气地启用了 Block 或 Single Repat、

    工作流程如下:  

    1) ADC 完成转换  ->触发 DMA CHAN0 以将数据从 ADC MEM 移动到 ADC_BUFFER

    2) DMA CHAN0 ->自动触发 UART DMA。

    目前、我在 CHAN0 之后生成中断、然后手动启动 DMA CHA1 以将数据发送出去。  

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

    我想我通过使用内部而不是外部 DMA 配置 DMA 来解决问题。  通过 DMA 配置进行配置、而不是通过 UART DMA 配置进行配置。