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.

[参考译文] TMS570LS0914:ADC1事件组内存问题

Guru**** 2459550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/642128/tms570ls0914-adc1-event-group-memory-problem

器件型号:TMS570LS0914

您好!

我想根据这个线程从 ADC 创建 DMA 传输:"如果在单个组中配置了多个通道、是否有任何其他方法可以使用除 FIFO 之外的 DMA 读取 ADC 结果数据"。 这适用于 ADC1组1和组2、实际上 DMA 部件也适用于 ADC1事件组。 但是、当我检查内存时、我发现事件组内存不好:

0xFF3E0000 0x000014AB 0x00002000 0x0000A000 0x0000A000 0x00008000 0x00008000 0x00008000
0xFF3E001C 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0038 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0054 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0070 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E008C 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E00A8 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E00C4 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E00E0 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E00FC 0x00008000 0x00001000 0x00002000 0x0000A000 0x0000A000 0x00008000 0x00008000
0xFF3E0118 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0134 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0150 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E016C 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E0188 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E01A4 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000
0xFF3E01C0 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000

上述存储器应与组2类似:

0xFF3E0070 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x000014A0
0xFF3E008C 0x00002000 0x0000A000 0x00001498 0x00002000 0x0000A000 0x00001494 0x00002000
0xFF3E00A8 0x0000A000 0x000014A5 0x00002000 0x0000A002 0x000014AA 0x00002000 0x0000A000
0xFF3E00C4 0x000014A4 0x00002000 0x0000A000 0x00001000 0x00002000 0x0000A000 0x00001000
0xFF3E00E0 0x00002000 0x0000A000 0x00001000 0x00002000 0x0000A000 0x0000148F 0x00002000
0xFF3E00FC 0x0000A000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000 0x00008000

 我附加了 ADC 配置、这里也是我的 DMA 配置:

dmaEnable();

ADC 通道0的// DMA 配置
dma_config.Sadd =(uint32_t) 0xFF3E0000;
dma_config.DADD =(uint32_t) adc_DATA0;
DMA_CONFIG.CHCTRL = 0; //链接到下一个通道
DMA_CONFIG.FRCNT = 1;
DMA_CONFIG.ELCNT = transfer_size;
DMA_CONFIG.ELDOFFSET = 0;
DMA_CONFIG.ELSOFFSET = 12;
DMA_CONFIG.FRDOFFSET = 0;
DMA_CONFIG.FRSOFFSET = 0;
DMA_CONFIG.PORTASGN = 4;
DMA_CONFIG.RDSIZE = ACCESS_32_BIT;
DMA_CONFIG.WRSIZE = ACCESS_32_BIT;
dma_config.tType = FRAME_TRANSFRAME;
dma_config.ADDMODERD = ADDR_OFFSET;
DMA_CONFIG.ADDMODEWR = ADDR_INC1;
DMA_CONFIG.AUTOINIT = AUTOINIT_ON;
//为 ADC 通道0设置 DMA 控制数据包
dmaSetCtrlPacket (DMA_CH0、DMA_CONFIG);

ADC 通道1的// DMA 配置
dma_config.Sadd =(uint32_t) 0xFF3E0004;
DMA_CONFIG.DADD =(uint32_t) ADC_Data1;
DMA_CONFIG.CHCTRL = 0; //链接到下一个通道
DMA_CONFIG.FRCNT = 1;
DMA_CONFIG.ELCNT = transfer_size;
DMA_CONFIG.ELDOFFSET = 0;
DMA_CONFIG.ELSOFFSET = 12;
DMA_CONFIG.FRDOFFSET = 0;
DMA_CONFIG.FRSOFFSET = 0;
DMA_CONFIG.PORTASGN = 4;
DMA_CONFIG.RDSIZE = ACCESS_32_BIT;
DMA_CONFIG.WRSIZE = ACCESS_32_BIT;
dma_config.tType = FRAME_TRANSFRAME;
dma_config.ADDMODERD = ADDR_OFFSET;
DMA_CONFIG.ADDMODEWR = ADDR_INC1;
DMA_CONFIG.AUTOINIT = AUTOINIT_ON;
//为 ADC 通道1设置 DMA 控制数据包
dmaSetCtrlPacket (DMA_CH1、DMA_CONFIG);

ADC 通道2的// DMA 配置
dma_config.Sadd =(uint32_t) 0xFF3E0008;
dma_config.DADD =(uint32_t) adc_DATA2;
DMA_CONFIG.CHCTRL = 0; //链接到下一个通道
DMA_CONFIG.FRCNT = 1;
DMA_CONFIG.ELCNT = transfer_size;
DMA_CONFIG.ELDOFFSET = 0;
DMA_CONFIG.ELSOFFSET = 12;
DMA_CONFIG.FRDOFFSET = 0;
DMA_CONFIG.FRSOFFSET = 0;
DMA_CONFIG.PORTASGN = 4;
DMA_CONFIG.RDSIZE = ACCESS_32_BIT;
DMA_CONFIG.WRSIZE = ACCESS_32_BIT;
dma_config.tType = FRAME_TRANSFRAME;
dma_config.ADDMODERD = ADDR_OFFSET;
DMA_CONFIG.ADDMODEWR = ADDR_INC1;
DMA_CONFIG.AUTOINIT = AUTOINIT_ON;
//为 ADC 通道2设置 DMA 控制数据包
dmaSetCtrlPacket (DMA_CH2、DMA_CONFIG);

dmaReqAssign (0.7); // MIBADC1 G1连接到 Reqline 10。 将 Reqline 10映射到 DMA 通道0
dmaReqAssign (1、7); // MIBADC1 G1连接到 Reqline 10。 将 Reqline 10映射到 DMA 通道1
dmaReqAssign (2、7); // MIBADC1 G1连接到 Reqline 10。 将 Reqline 10映射到 DMA 通道2

dmaSetChEnable (0、dma_HW); //启用 DMA 通道0
dmaSetChEnable (1、dma_HW); //启用 DMA 通道1
dmaSetChEnable (2、dma_HW); //启用 DMA 通道2

adcStartConversion (adcREG1、adcGROUP0); 

那么、问题是、为什么 ADC 事件组工作得不好?  

谢谢!

此致、

Keno

e2e.ti.com/.../0844.adc.ce2e.ti.com/.../7206.adc.h

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

    您好、Keno、

    我没有从您的代码中找到任何问题。 启用 ADC DMA。 ADC 在向 ADC 存储器写入30个缓冲区时生成 DAM 请求。  

    您说它适用于具有/不具有 DMA 的组1、组2和事件组。 ADC 存储器中的正确值应该是多少? 对事件组中的多少个通道进行采样?  

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

    您好 QJ、

    它适用于组1、组2、但事件组的 ADC 转换错误。 在事件组中对3个通道进行采样(与组1或组2相同)、ADC 存储器应与组1或组2相同。 在我看来、事件组 ADC 转换工作错误。 谢谢!

    此致、

    Norbert

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

    您说事件组 ADC 转换工作错误。 采样数据是否不正确? 还是 ADC RAM 中的采样数据不能通过 DMA 正确传输? 事件组必须由 HW (GIO、NHET 或 RTI 计时器)触发。