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.

[参考译文] MSPM0G3507:关于计时器触发 ADC 转换

Guru**** 2529560 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1557477/mspm0g3507-about-timer-triggering-adc-conversion

器件型号:MSPM0G3507
主题:SysConfig 中讨论的其他器件

工具/软件:

您好:

我有一个工程使用 Timer0 来触发 ADC 转换。 Timer0 周期设置为 1.125s、而计时器时钟频率设置为 3.64KHz。

事件发布者为 Timer0、事件订阅者为 ADC12_0。 转换每 100us 发生一次。 但我找不到在 SYSCFG 中配置 100us 的位置。  

以下是 ti_msp_dl_config.c 中的 ADC12_0 初始化函数:

SYSCONFIG_WEAK void SYSCFG_DL_ADC12_0_init(void)
{
    DL_ADC12_setClockConfig(ADC12_0_INST, (DL_ADC12_ClockConfig *) &gADC12_0ClockConfig);

    DL_ADC12_initSeqSample(ADC12_0_INST,
        DL_ADC12_REPEAT_MODE_ENABLED, DL_ADC12_SAMPLING_SOURCE_AUTO, DL_ADC12_TRIG_SRC_EVENT,
        DL_ADC12_SEQ_START_ADDR_00, DL_ADC12_SEQ_END_ADDR_03, DL_ADC12_SAMP_CONV_RES_12_BIT,
        DL_ADC12_SAMP_CONV_DATA_FORMAT_UNSIGNED);
    DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_2,
        DL_ADC12_INPUT_CHAN_2, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
    DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_3,
        DL_ADC12_INPUT_CHAN_3, DL_ADC12_REFERENCE_VOLTAGE_VDDA, DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0, DL_ADC12_AVERAGING_MODE_DISABLED,
        DL_ADC12_BURN_OUT_SOURCE_DISABLED, DL_ADC12_TRIGGER_MODE_AUTO_NEXT, DL_ADC12_WINDOWS_COMP_MODE_DISABLED);
    DL_ADC12_setPowerDownMode(ADC12_0_INST,DL_ADC12_POWER_DOWN_MODE_MANUAL);
    DL_ADC12_setSampleTime0(ADC12_0_INST,20);
    DL_ADC12_setSampleTime1(ADC12_0_INST,50);
    DL_ADC12_setSubscriberChanID(ADC12_0_INST,ADC12_0_INST_SUB_CH);
    /* Enable ADC12 interrupt */
    DL_ADC12_clearInterruptStatus(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM2_RESULT_LOADED
		 | DL_ADC12_INTERRUPT_MEM3_RESULT_LOADED));
    DL_ADC12_enableInterrupt(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM2_RESULT_LOADED
		 | DL_ADC12_INTERRUPT_MEM3_RESULT_LOADED));
    DL_ADC12_enableConversions(ADC12_0_INST);
}

以下是 ti_msp_dl_config.c 中的 Timer0 初始化函数:

SYSCONFIG_WEAK void SYSCFG_DL_TIMER_0_init(void) {

    DL_TimerG_setClockConfig(TIMER_0_INST,
        (DL_TimerG_ClockConfig *) &gTIMER_0ClockConfig);

    DL_TimerG_initTimerMode(TIMER_0_INST,
        (DL_TimerG_TimerConfig *) &gTIMER_0TimerConfig);
    DL_TimerG_enableClock(TIMER_0_INST);


    DL_TimerG_enableEvent(TIMER_0_INST, DL_TIMERG_EVENT_ROUTE_1, (DL_TIMERG_EVENT_ZERO_EVENT));

    DL_TimerG_setPublisherChanID(TIMER_0_INST, DL_TIMERG_PUBLISHER_INDEX_0, TIMER_0_INST_PUB_0_CH);
}

我想这肯定是我错过的地方。 您能为此提供帮助吗?

谢谢!

吊车

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

    尊敬的  Crane:

    您可以在计时器外设页面中更改间隔时间、如下所示。

    此致、
    彼得

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

    您好、Peter:

    更改该值会改变 Timer0 的周期、但不会影响触发 ADC 转换的时间间隔。

    我发现、尽管 ADC12 配置为订阅 Timer0 发布的事件、但 ADC 转换触发器不是 Timer0、而是 ADC 模块本身中的以下设置:

    谢谢!

    吊车

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

    尊敬的  Crane:

    对于最后一个 ADC 存储器通道、请将触发模式设置为:“valid trigger will step……“ 而不是在 SysConfig 中自动触发。 否则、由于您已启用重复模式、在最后一个通道完成 采集后、它将自动 从开始开始开始开始新一轮 ADC 采集、并忽略计时器触发。

    此致、
    Peter Jiang

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

    您好、Peter:

    因此、您的意思是、如果其他所有内容都配置正确、计时器 0 应该是触发器、对吧? 使用 Timer0 作为 ADC 触发器的正确方法应该是这样、不是这样工作的、对吧?

    我现在使用的是通道 2 和通道 3。 当任一配置为“有效触发将停止到下一个存储器转换寄存器“时、没有发生 ADC 转换中断、并且从 ADC 获得了错误的读数。

    此致、

    吊车

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

    尊敬的  Crane:

    e2e.ti.com/.../adc12_5F00_triggered_5F00_by_5F00_timer_5F00_event_5F00_LP_5F00_MSPM0G3507_5F00_nortos_5F00_ticlang.zip

    下面是您的参考演示、使用 4 通道并启用所有通道结果加载中断、还将计时器设置为 1s 以触发 ADC 采集 并将所有 ADC 通道设置为 “valid trigger will step……“ 、您可以看到 PA8 将每 1s 切换一次、如下所示、这意味着计时器每 1s 触发每个通道进行采样。

    因此对于另一个示例、如果您刚刚将最后一个通道(通道 3)设置为“有效触发器将步进到下一个存储器转换寄存器“、而将其余通道设置为“触发器将自动步进到下一个存储器转换寄存器“、您将看到每 1 将触发全部 4 个通道以完成采样。 前三个通道将自动生成下一个并且直到最后一个通道的触发信号、因此它将等待计时器事件触发新的轮序列采样。

    也就是说、“有效触发将跳转到下一个存储器转换寄存器“是指在完成当前 ADC 通道采集时、它将等待下一个触发信号 (无论是软件还是计时器事件)开始下一次采集。 “Trigger 将自动跳转到下一个存储器转换寄存器“意味着它将自动生成触发信号   、在完成当前通道 ADC 采集后开始下一次新的 ADC 采集、如果  是序列转换模式、则“下一次新的 ADC 采集“指下一个存储器通道、如果是单次转换模式、则“下一次新的 ADC 采集“指其自身。

    此致、
    彼得

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

    您好、Peter:

    这是清楚的。 感谢您的帮助!

    此致、

    吊车