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.

[参考译文] TMS570LC4357:ADC DMA

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/804017/tms570lc4357-adc-dma

器件型号:TMS570LC4357

大家好、  

我使用的是由 HET 硬件触发的单个 ADC1通道。 转换结果由 DMA 传输到 RAM 缓冲器。 现在 RAM 缓冲区为32位宽、我想将其减小到16位、并将转换结果(最大12位)传输到该缓冲区。  

我不确定如何设置 DMA 控件数据包以完成作业、现在看起来是这样的:

ADC1_dmaCTRLPKT.Sadd =(CPU_INT32U)(&adcREG1->GxBUF[adcGROUP1]);// DMA 的源地址为 ADC1 GP1 FIFO
ADC1_dmaCTRLPKT.DADD =(CPU_INT32U) ADC1_GP1_Buffers;//目标地址
ADC1_dmaCTRLPKT.CHCTRL = 0;
ADC1_dmaCTRLPKT.FRCNT = 1000;//帧计数-> 1000个 ADC 样本
ADC1_dmaCTRLPKT.ELCNT = 1;//一个 ADC 通道
ADC1_dmaCTRLPKT.ELDOFFSET = 0;//元素目标偏移
ADC1_dmaCTRLPKT.ELSOFFSET = 0;//元素源偏移
ADC1_dmaCTRLPKT.FRDOFFSET = 0;//帧目标偏移
ADC1_dmaCTRLPKT.FRSOFFSET = 0;//帧源偏移
ADC1_dmaCTRLPKT.PORTASGN = 4;//对于所有 TMS570 PORTB;通道的值端口分配寄存器始终为0x100
ADC1_dmaCTRLPKT.RDSIZE = ACCESS_32_BIT;//读取大小
ADC1_dmaCTRLPKT.WRSIZE = ACCESS_16_BIT;//写入大小
ADC1_dmaCTRLPKT.tType = FRAME_TRANSFSION;//传输类型- FRAME_TRANSF/BLOCK_TRANSFRATE
ADC1_dmaCTRLPKT.ADDMODERD = ADDR_FIXED;//地址模式读取
ADC1_dmaCTRLPKT.ADDMODEWR = ADDR_INC1;//地址模式写入:Addr_Fixed/ADDR_INC1/ADDR_OFFSET
ADC1_dmaCTRLPKT.AUTOINIT = AUTOINIT_ON;//自动初始化

将 ADC1_dmaCTRLPKT.WRSIZE 设置为 ACCESS_16_BIT 实际上不起作用、那么缓冲区看起来是这样的:

是否可以仅将 ADC FIFO 的数据部分(低16位)传输到16位缓冲器中?

此致、
Juergen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Juergen、您好!
    所有 ADC 寄存器都允许8位、16位和32位访问。 尝试使用 ADC1_dmaCTRLPKT.RDSIZE = ACCESS_16_BIT;//读取大小

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

    谢谢 Miro、

    它的工作原理。 还必须调整读取地址。 adcREG1->GxBUF[adcGROUP1]指向0xFFF7C0B0。 数据位于0xFFF7C0B2。

    此致、

    Juergen