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.

[参考译文] Starterware/TMS320F28377S:Timer0采样上所有通道的 ADC 读取

Guru**** 2482225 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/600255/starterware-tms320f28377s-adc-reading-of-all-channels-on-timer0-sample

器件型号:TMS320F28377S

工具/软件:Starterware

是否有人可以用示例代码帮助我读取 TIMER0触发器的所有通道(ADCA、ADCB、ADCC、ADCD + 2 = 20通道)?

Timer0配置为40us ISR 并正常工作、但无法获取任何 ADC 更新。

我假设 ADCA 是最后一个触发 ADCB SOC 的通道、依此类推。  

无法查看用于读取所有通道/或除 ADCA 之外的任何样本。

模式12位、非差分。

提前感谢



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

    从概念上讲、您希望为每个 ADC 设置多个 SOC、这些 SOC 等于要在该 ADC 上采样的通道数。 应设置每个 SOC:
    CHANNEL =要在该 ADC 上进行采样的通道之一
    -ACQPS =足够长的 S+H、可为给定的输入驱动器硬件提供良好的输入趋稳
    触发= CPU 定时器0

    因此、如果您只有 ADCA 和 B、并且想要对 A1、A2和 B4进行采样:

    ADCA-SOC0 => CH = 1、ACQPS = 50、TRIGGER = CPUTIME0
    ADCA-SOC1 => CH = 2、ACQPS = 50、TRIGGER = CPUTIME0
    ADCB-SOC0 => CH = 4、ACQPS = 50、触发= CPUTIME0

    (ACQPS = 50是任意选择-这取决于您的硬件)

    然后、您只希望从最长的 SOC 链触发1个中断。 在我们的示例中:

    ADCA INT1 =从 SOC1转换结束时触发

    当 CPU 定时器0触发发生时、A1和 B4将被并行转换、然后 A2将被转换。 在 A2 ADCA int 1结束时触发。 在 ADCA int 1 ISR 中、您可以为全部3次转换收集样本。

    注意:为了确保 ADC 以锁步方式运行、ACQPS 选择应该是给定 SOC 编号上所有转换的最大值(因为它们将并行转换)。 在上述示例中、ADCA-SOC0和 ADCB-SOC0应使用相同的 ACQPS 设置、该设置应是 A1和 B4所需的最大值。 然后、ADCA-SOC1可以具有适合 A2的不同 ACQPS。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的回答。
    我不清楚通道编号。 每个 ADC 的数字从0开始、如 ADCA0-A5 (6)、ADCB0-B3 (4)、ADCC2-C4 (3)和 ADCD0-D4 (5)以及 ADC14和 ADC15。 总共20个通道。
    我想使用 ADCA:2、3、4
    ADCB:0、2、3
    ADCC:2、3、4
    ADCD:0、1、2、3、4
    ADC??:14、15。
    BTW、我使用的是377S 176引脚封装。

    通道配置采用哪种分流器? 请参阅以下代码。 是这样吗?
    ///----------------------------------------------------------
    //ADCA- 4个通道、2、3、4、5
    AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2;
    AdcaRegs.ADCSOC0CTL.bit.ACQPS = 15;
    AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 1;

    AdcaRegs.ADCSOC1CTL.bit.CHSEL = 3;
    AdcaRegs.ADCSOC1CTL.bit.ACQPS = 15;
    AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 1;

    AdcaRegs.ADCSOC2CTL.bit.CHSEL = 4;
    AdcaRegs.ADCSOC2CTL.bit.ACQPS = 15;
    AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 1;

    AdcaRegs.ADCSOC3CTL.bit.CHSEL = 5;
    AdcaRegs.ADCSOC3CTL.bit.ACQPS = 15;
    AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 1;

    //ADC-B 3个通道、0、2、3

    AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0;
    AdcbRegs.ADCSOC0CTL.bit.ACQPS = 15;
    AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 1;

    AdcbRegs.ADCSOC1CTL.bit.CHSEL = 2;
    AdcbRegs.ADCSOC1CTL.bit.ACQPS = 15;
    AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 1;

    AdcbRegs.ADCSOC2CTL.bit.CHSEL = 3;
    AdcbRegs.ADCSOC2CTL.bit.ACQPS = 15;
    AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = 1;

    //ADC-C 3个通道- 2、3、4

    AdccRegs.ADCSOC0CTL.bit.CHSEL = 2;
    AdccRegs.ADCSOC0CTL.bit.ACQPS = 15;
    AdccRegs.ADCSOC0CTL.bit.TRIGSEL = 1;

    AdccRegs.ADCSOC1CTL.bit.CHSEL = 3;
    AdccRegs.ADCSOC1CTL.bit.ACQPS = 15;
    AdccRegs.ADCSOC1CTL.bit.TRIGSEL = 1;

    AdccRegs.ADCSOC2CTL.bit.CHSEL = 4;
    AdccRegs.ADCSOC2CTL.bit.ACQPS = 15;
    AdccRegs.ADCSOC2CTL.bit.TRIGSEL = 1;

    //ADC-D 5个通道、0、1、2、3、4

    AdcdRegs.ADCSOC0CTL.bit.CHSEL = 0;
    AdcdRegs.ADCSOC0CTL.bit.ACQPS = 15;
    AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 1;

    AdcdRegs.ADCSOC1CTL.bit.CHSEL = 1;
    AdcdRegs.ADCSOC1CTL.bit.ACQPS = 15;
    AdcdRegs.ADCSOC1CTL.bit.TRIGSEL = 1;

    AdcdRegs.ADCSOC2CTL.bit.CHSEL = 2;
    AdcdRegs.ADCSOC2CTL.bit.ACQPS = 15;
    AdcdRegs.ADCSOC2CTL.bit.TRIGSEL = 1;

    AdcdRegs.ADCSOC3CTL.bit.CHSEL = 3;
    AdcdRegs.ADCSOC3CTL.bit.ACQPS = 15;
    AdcdRegs.ADCSOC3CTL.bit.TRIGSEL = 1;

    AdcdRegs.ADCSOC4CTL.bit.CHSEL = 4;
    AdcdRegs.ADCSOC4CTL.bit.ACQPS = 15;
    AdcdRegs.ADCSOC4CTL.bit.TRIGSEL = 1;
    ///---------------------------------------------------------

    如何获取单个中断、转换所有通道?
    我可以看到一些变化的结果、但未生成中断。

    如果 AdcD 具有最大通道数、ADCD 应生成中断、对吧?

    您能不能就中断使能问题给我一些建议吗?