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.

[参考译文] RTOS:由 ETPWM 触发的 TMS570LS1224 ADC

Guru**** 2039500 points
Other Parts Discussed in Thread: LAUNCHXL2-TMS57012, TMS570LS1224, HALCOGEN
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/731352/rtos-tms570ls1224-adc-triggered-by-etpwm

主题中讨论的其他器件:LAUNCHXL2-TMS57012TMS570LS1224HALCOGEN

工具/软件:TI-RTOS

您好:


我使用 LAUNCHXL2-TMS57012 (TMS570LS1224)。 需要将 ADC 的起点连接到 PWM。 在 HALKOGEN 的"驱动程序启用"选项卡中、我启用 ADC 和 PWM 驱动程序、配置并允许 PWM 作为 SOCA 的源。 在“特殊管脚复用”中,设置“触发选项 B”,然后设置 ADC。 代码并刷写控制器之后、我将看到该代码。
程序代码附在下面。 ADC 不工作。 数字化完成的标志始终等于0。 PWM 模块中 SOCA 的标志被生成。
如何解决?

#include "sys_common.h"
#include "gio.h"
#include
"reg_adc.h"
#include "reg_pinmux.h"
#include "etpwm.h"
#include "sys_vim.h"
#include "pinmux.h"




#include "reg_pinmux.h"#include "t.0_inc



= 0、t.0[0、t_data]
= 0、void 0、t.0[0、t.0]、t.0_inu.0_inc = 0、t.0_void、t.0_adc = 0、t.0_inc = 0、t.0_inu.h;t、t.0_data
adcInit();
adcStartConversion (adcREG1、adcGROUP1);
muxInit();
etpwmInit();
etpwmStartTBCLK();
_enable_interrupt_();

while (1)
{
;
}


}

#pragma CODE_STATE (etpwm1Interrupt、32)
#pragma INTERRUPT (etpwm1Interrupt、IRQ)

INTERRUPT void etpwm1Interrupt (void)
{
asm ("_nop");
状态= adcIsConversionComplete (adcREG1、adcGROUP1);
adcGetData (adcREG1、adcGROUP1、&ADC_DATA[0]);
ADC_Result [ADC_DATA[0].id]= ADC_DATA[0].value;
ADC_Result [ADC_DATA[1].id]= ADC_DATA[1].value;
gioToggleBit (gioPORTB、1);
etpwmREG1->ETCLR = 1U;
}

#pragma CODE_STATE (etpwm2Interrupt、32)
#pragma INTERRUPT (etpwm2Interrupt、IRQ)

INTERRUPT void etpwm2Interrupt (void)
{

etpwmREG2->ETCLR = 1U;
} 

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

    您好、Egor、

    1. Pinmux-->特殊的引脚复用:使用备用 ADC 'Trigger Option-B'启用 TBCLK 同步

    您选择了什么事件来生成 ePWM 中断?  

    您能否启用 ADC 中断并在 ADC ISR 中读取 ADC 数据?

    例如:

    adcEnableNotification (adcREG1、adcGROUP0);
    adcStartConversion (adcREG1、adcGROUP0);

    /*用户代码开始(4)*/
    void adcNotification (adcbase_t * adc、uint32组)

      adcData_t 数据;
      uint32计数;
      uint16 cmpA;

      count = adcGetData (adcREG1、adcGROUP0、&data);

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

    大家好、QJ Wang!

    在执行指令后、没有发生任何事情。

    事件是 ETPWM1模块的 CTR_PRD。 我尝试使用 CMPA、但没有效果。

    由于 ADC 中断会破坏 CPU、因此无法使用 ADC 中断进行启动。 所开发软件的特异性假定 ADC 的运行最大独立于处理器。

    谢谢!

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

    我以某种方式启动它... 如果我选择 ETPWMA2、它就会起作用。 显然、PINMMR 寄存器中的问题。

    数据表说明:

    对于 ETPWMA2触发:

    G1SRC = 110;

    PINMMR30[0]=0;

    PINMMR30[1]=1;

    以及我们在 halcogen 之后所拥有的:

    G1SRC = 110;

    PINMMR30[0]=0;

    PINMMR30[1]=0;(!)

    这很奇怪。 但它起作用了。

    对于 ETPWMA1触发:

    G1SRC = 011;

    PINMMR30[0]=0;

    PINMMR30[1]=1;

    PINMMR30[16]=0;

    PINMMR30[17]=1;

    在 halcogen 之后:

    G1SRC = 011;

    PINMMR30[0]=0;

    PINMMR30[1]=0;(!)

    PINMMR30[16]=0;

    PINMMR30[17]=1;

    结束它不起作用。

    halcogen 中是否有确定多路复用器的字段、如第二个图所示?

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

    我发现了一个错误。 我没有考虑 SOCxA_SEL 寄存器。 PINMMR35寄存器 必须手动置位。 一切正常。 但不清楚为什么它在没有 PINMMR[30]=1的情况下起作用。