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/TMS320F2.8027万:F2.8027万

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/575557/ccs-tms320f28027-f28027

部件号:TMS320F2.8027万

工具/软件:Code Composer Studio

尊敬的C2000 Picollo团队:

我有一个关于F2.8027万 ADC模块的问题, 我启动ADC模块是为了逐步说明:

1.单采样模式

2.配置所有ADCSOCxCTL.bit.CHSEL (x=0至15)

3.配置所有ADCSOCxCTL.bit.TRIGEL =0 (x=0至15)

4.配置所有ADCSOCxCTL.bit.ACQPS =6 (x=0到15)

5. AdcRegs.INTSEL1N2.bit.INT1E = 1

6. AdcRegs.INTSEL1N2.bit.INT1SEL = 15

之后,我尝试通过设置寄存器AdcRegs.ADCSOCFRC1.ALL = 0xFFFF来启动转换,我计划在检查ADCINTFLG.Bit.ADCINTx=0后读取所有RESULTx寄存器,如下所示:

while (AdcRegs.ADCINTFLG.bit.ADCINT1 =0){}

AdcRegs.ADCINTFLGCLL.bit.ADCINT1 = 1;

Data0 = AdcResult.ADCRESULT0;

二,委员会的工作安排

Data15 = AdcResult.ADCRESULT15;

我的问题是:

在XDS100仿真器的单步模式下,每次设置AdcRegs.ADCSOCFRC1.ALL = 0xFFFF时,ADCINTFLG.Bit.ADCINT1立即设置为1,我认为这一寄存器将在所有16个通道的转换完成后设置,但实际情况并非如此。 我出了什么问题? 非常感谢。

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

    单步调试器不会阻止硬件模块继续运行,仅CPU暂停/步进。 实际上,您可以在设备处于断点时进入“表达式”窗口,并将0xFFFF写入SOC强制寄存器-这将导致ADC转换这些通道,您可以将这些通道视为已更新的ADC结果值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的Devin:
    感谢您的回复。

    1.我在3.3 .83.20 上找不到表达式窗口,它在哪里?
    2.上面提到的问题是我的项目的软件触发采样示例,事实上,当T1CTR =0时,我需要使用EPWM1SOCA来触发所有16通道转换。 我按如下所示配置了相关寄存器:
    (1)。 ADCSAMPLEMODE = 0xFF
    (2)。配置所有ADCSOCxCTL.bit.TRIGEL = 5 (x=0到15)

    我计划读取ePWM1中断服务中的所有ADCRESULTx寄存器,下面是代码:
    (1). while (AdcRegs.ADCINTFLG.bit.ADCINT1 =0){}//正在等待转换完成
    (2)。 AdcRegs.ADCINTFLGCLL.bit.ADCINT1 = 1;
    (3)。 Data0 = AdcResult.ADCRESULT0;//读取结果
    二,委员会的工作安排
    Data15 = AdcResult.ADCRESULT15;

    但我发现每次我读取的所有数据都是最后一个PWM周期的结果,这意味着我获得的所有数据都是1 Tpwm周期延迟。

    在调试模式中,我在行设置了断点,而(AdcRegs.ADCINTFLG.Bit.ADCINT1 =0){}在ePWM1_ISR()函数中,我发现ADCINTFLG.Bit.ADCINT1每次都设置为1。这是因为每次都绕过等待指令,而下一个读取指令读取软件控制的旧转换数据。
    为什么?

    3.我查看了参考指南中关于皮外模式采样的内容,SOCx的触发器都将启动一对转换,我认为我可以启动两次16-ch AD转换,因为我配置了所有16 ADCSOCxCTL.bit.TRIGEL =5, 但当我删除ODD SOCx时,问题仍然存在(绕过等待指示,我得到旧的转换数据)。
    为什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    发生了另一个奇怪的情况:
    如果我在ePWM1_ISR()例程中只配置4 ADCSOCxCTL.bit.TRIGEL =5 (x=0到3)并读取4 ADCRESULT,则结果是正确的。 它是最新的转换数据。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Simone:

    CCS版本3有一个“监视窗口”,它等同于CCS版本4或更高版本的“表达式窗口”。

    最好在ADC ISR中读取ADC结果,以确保您获得最新结果,并且在ISR内不会花费太长的旋转等待时间。 当然,您可以在ePMW ISR内阅读结果,但您需要注意时间安排,以确保获得最新结果。 除了建议您仔细地绘制系统的时间安排图,特别注意如何在第一个ePWM期间启动,我在这里没有什么可以提供的直接帮助。

    您是否调用ADC自校准示例函数? 您可能需要清除该功能使用的一些剩余设置。