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/LAUNCHXL-F28379D:F28379D 同步采样

Guru**** 2538950 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/598583/ccs-launchxl-f28379d-simultaneous-sampling-in-f28379d

器件型号:LAUNCHXL-F28379D
Thread 中讨论的其他器件:controlSUITE

工具/软件:Code Composer Studio

您好!

如何将第二个 ADC 通道(同步)添加到 controlSUITE:"2837x_rfft_adc_rt"项目?

感谢你的帮助。

此致、

Amin

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

    您可以复制示例中已经存在的用于启动的 FPU_initADCA()函数,然后对其进行更改,使其使用 ADCB。 您可以在此处更改其他设置(如转换触发器、通道等)

    您可以在 TRM 中通读 ADC 寄存器的说明、以获得 www.ti.com/.../spruhm8帮助

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

    尊敬的惠特尼:

    我进行了所有更改、但 对于第二个通道(ADC B2)中的输入信号、它不接受数据、也不起作用。

    main.c :

    uint16_t RFFTin1Buff[2*RFFT_SIZE];
    uint16_t RFFTin2Buff[2*RFFT_SIZE];//<--- 新建
    
    
    __interrupt void adcaIsr ()
    {
    RFFTin1Buff[sampleIndex++]= AdcaResultRegs.ADCRESULT0;
    RFFTin2Buff[sampleIndex++]= AdcbResultRegs.ADCRESULT0;//<--- 新
    if (sampleIndex ==(RFFT_SIZE - 1))){
    sampleIndex = 0;
    flagInputReady = 1;
    }
    
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//清除 INT1标志
    AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//clear INT1 flag//<--- 新
    PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;
    } 

    Examples_setup.c :

    void FPU_initADCA (void)
    {
    EALLOW;
    //写入配置
    AdcaRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4
    AdcbRegs.ADCCTL2.bit.prescale = 6;//set ADCCLK divider to /4//<--- 新
    AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);
    AdcSetMode (ADC_ADCB、ADC_Resolution 12位、ADC_SIGNALMODE_SINGLE);//<--- 新
    //将脉冲位置设置为早
    AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 0;
    AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 0;//<--- 新
    //为 ADC 加电
    AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
    AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;//<--- 新
    //延迟1ms 以允许 ADC 加电时间
    DELAY_US (1000);
    
    //选择要转换的通道和转换结束标志 ADCA
    AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;//SOC0将转换引脚 A0
    AdcaRegs.ADCSOC0CTL.bit.ACQPS = 14;//采样窗口为15个 SYSCLK 周期
    AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 5;// ePWM1 SOCA/C 上的触发
    AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;//EOC0被设定为触发 ADCINT1
    AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除
    
    AdcbRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0将转换引脚 A0//<--------------- 新
    AdcbRegs.ADCSOC0CTL.bit.ACQPS = 14;//采样窗口是15个 SYSCLK 周期//<--------------- 新
    AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 5;//trigger on ePWM1 SOCA/C//<--- 新
    AdcbRegs.ADCINTSEL1N2.bit.INT1SEL = 0;//EOC0设置为触发 ADCINT1//<--- 新
    AdcbRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志//<--- 新
    AdcbRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除//<--- 新
    
    EDIS;
    } 

    感谢你的帮助。

    此致、

    Amin

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

    你执行 sampleIndex 的方式看起来是关闭的。 我想您希望执行以下操作:

    RFFTin1Buff[sampleIndex]= AdcaResultRegs.ADCRESULT0;
    RFFTin2Buff[sampleIndex++]= AdcbResultRegs.ADCRESULT0;

    此外、无需为 ADCB 启用中断。 转换应该同时完成、并且您将在同一 ISR 中读取这两个结果。

    如果上述修复程序无法解决问题、您能否为我提供更多有关发生什么错误的详细信息? 结果是否错误? 转换是否未触发?

    惠特尼

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

    尊敬的惠特尼:

    感谢你的帮助。 两个 ADC 通道工作正常。

    这话什么意思?:

    "此外、无需为 ADCB 启用中断。 转换应该同时完成、并且您将在同一 ISR 中读取这两个结果。"

     我在添加第二个 ADC 通道 PWM 发生器(ePWM2)后意识到 不起作用。 上一帖子中显示的所有更改、并且我没有更改默认程序(rfft_adc_RT)。

    此致、

    Amin

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

    尊敬的 Amin:

    很抱歉不能早点回来。 我离开办公室几天。 您是否对您的项目有任何更新? 您是否使 ePWM2再次运行?

    谢谢、
    惠特尼

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

    现在它工作正常、但我不知道为什么它第一次不工作。
    采样频率将会减半?

    谢谢、此致、
    Amin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ADCA 和 ADCB 是可以同时运行的独立模块。 如果一个通道位于 ADCA 上、另一个通道位于 ADCB 上、则采样频率不应减半。 您觉得它会减半吗?

    惠特尼
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    问题是内存分配(.cmd 文件)。 解决了。 谢谢你。
    我的最后一个问题是:
    您在之前的帖子中说过:
    "此外、无需为 ADCB 启用中断。 转换应该同时完成、并且您将在同一 ISR 中读取这两个结果。"
    这话什么意思? 我需要更改部分代码?
    感谢你的帮助。

    此致、
    Amin
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的意思是 ADCA 和 ADCB 转换将同时完成、因此您不需要来自 ADCA 和 ADCB 的中断。 来自 ADCA 的单个中断足以告诉您这两个中断都已完成。

    在 FPU_initADCA()中的代码中,这意味着可以将 AdcbRegs.ADCINTSEL1N2.bit.INT1E 设置为0而不是1。

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

    此致、
    Amin