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.

[参考译文] MSPM0G1507:ADC 设置

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1527402/mspm0g1507-adc-settings

部件号:MSPM0G1507

工具/软件:

你(们)好  

目前、我正在使用 采用 MSP430 微控制器的 PMP7647_RevC 设计解决方案。 我计划迁移到 MSPM0G1507、  

对于所面临的问题、我需要一些帮助。  

ADC 相关:

我们没有使用 DMA。 使用 ADC 中断读取所有 ADC 值。 我们希望与您联系了解有关 ADC 相关设置的信息。  

如何  在每次读取后将 DL_ADC12_getMemResult (ADC12_0_INST、DL_ADC12_MEM_IDX_0) 设置为零?

如何使用 PWM 触发 ADC? (我们希望在 PWM/2 处获取 ADC 读数)

在 MS430 中、由 SW PMMCTL0 |=PMMSWBOR 进行欠压复位。 MSPM0 中是否有同等产品?

此致、

Yogesh

/* Defines for ADC12_0 */
#define ADC12_0_INST                                                        ADC0
#define ADC12_0_INST_IRQHandler                                  ADC0_IRQHandler
#define ADC12_0_INST_INT_IRQN                                    (ADC0_INT_IRQn)
#define ADC12_0_ADCMEM_0                                      DL_ADC12_MEM_IDX_0
#define ADC12_0_ADCMEM_0_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
#define ADC12_0_ADCMEM_0_REF_VOLTAGE_V                                       3.3
#define ADC12_0_ADCMEM_1                                      DL_ADC12_MEM_IDX_1
#define ADC12_0_ADCMEM_1_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
#define ADC12_0_ADCMEM_1_REF_VOLTAGE_V                                       3.3
#define ADC12_0_ADCMEM_2                                      DL_ADC12_MEM_IDX_2
#define ADC12_0_ADCMEM_2_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
#define ADC12_0_ADCMEM_2_REF_VOLTAGE_V                                       3.3
#define ADC12_0_ADCMEM_3                                      DL_ADC12_MEM_IDX_3
#define ADC12_0_ADCMEM_3_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
#define ADC12_0_ADCMEM_3_REF_VOLTAGE_V                                       3.3
#define ADC12_0_ADCMEM_4                                      DL_ADC12_MEM_IDX_4
#define ADC12_0_ADCMEM_4_REF                     DL_ADC12_REFERENCE_VOLTAGE_VDDA
#define ADC12_0_ADCMEM_4_REF_VOLTAGE_V                                       3.3
#define GPIO_ADC12_0_C0_PORT                                               GPIOA
#define GPIO_ADC12_0_C0_PIN                                       DL_GPIO_PIN_27          /* Panel Voltage */
#define GPIO_ADC12_0_C1_PORT                                               GPIOA
#define GPIO_ADC12_0_C1_PIN                                       DL_GPIO_PIN_26          /* Battery Voltage */
#define GPIO_ADC12_0_C2_PORT                                               GPIOA
#define GPIO_ADC12_0_C2_PIN                                       DL_GPIO_PIN_25       /* Battery Current */
#define GPIO_ADC12_0_C3_PORT                                               GPIOA
#define GPIO_ADC12_0_C3_PIN                                       DL_GPIO_PIN_24       /* Load Voltage */
#define GPIO_ADC12_0_C7_PORT                                               GPIOA
#define GPIO_ADC12_0_C7_PIN                                       DL_GPIO_PIN_22      /* Load Current  */


/* ADC12_0 Initialization */
static const DL_ADC12_ClockConfig gADC12_0ClockConfig = {
    .clockSel       = DL_ADC12_CLOCK_ULPCLK,
    .divideRatio    = DL_ADC12_CLOCK_DIVIDE_1,
    .freqRange      = DL_ADC12_CLOCK_FREQ_RANGE_1_TO_4,
};
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_DISABLED, DL_ADC12_SAMPLING_SOURCE_AUTO, DL_ADC12_TRIG_SRC_SOFTWARE,
        DL_ADC12_SEQ_START_ADDR_00, DL_ADC12_SEQ_END_ADDR_04, DL_ADC12_SAMP_CONV_RES_12_BIT,
        DL_ADC12_SAMP_CONV_DATA_FORMAT_UNSIGNED);

    DL_ADC12_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_0, DL_ADC12_INPUT_CHAN_0, 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_1, DL_ADC12_INPUT_CHAN_1, 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_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_configConversionMem(ADC12_0_INST, ADC12_0_ADCMEM_4,DL_ADC12_INPUT_CHAN_7, 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_configHwAverage(ADC12_0_INST,DL_ADC12_HW_AVG_NUM_ACC_128,DL_ADC12_HW_AVG_DEN_DIV_BY_128);
    DL_ADC12_setSampleTime0(ADC12_0_INST,160);
    /* Enable ADC12 interrupt */
    DL_ADC12_clearInterruptStatus(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM4_RESULT_LOADED));
    DL_ADC12_enableInterrupt(ADC12_0_INST,(DL_ADC12_INTERRUPT_MEM4_RESULT_LOADED));
    NVIC_SetPriority(ADC12_0_INST_INT_IRQN, 0);
    DL_ADC12_enableConversions(ADC12_0_INST);
}

void ADC12_0_INST_IRQHandler(void)
{
    switch (DL_ADC12_getPendingInterrupt(ADC12_0_INST)) {
        case DL_ADC12_IIDX_MEM4_RESULT_LOADED:
            Panel_Voltage_Buffer += DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0);
            Battery_Voltage_Buffer += DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_1);
            Battery_Charging_Current_Buffer += DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_2);
            Load_Voltage_Buffer += DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_3);
            Load_Current_Buffer += DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_4);
            adcSampleCount++;
            if (adcSampleCount >= ADC_SAMPLE_COUNTER_BUFFER) {
                if((Present_State == MPPT_STATE) || (Present_State == START_MPPT_STATE)){
                    Average_MPPT_ADC_Values();
                }
            /* some functional code */
            DL_ADC12_startConversion(ADC12_0_INST);
            DL_ADC12_enableConversions(ADC12_0_INST);
            
            break;
        default:
            break;

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

    尊敬的  Yogesh:

    如何  在每次读取后将 DL_ADC12_getMemResult (ADC12_0_INST、DL_ADC12_MEM_IDX_0) 设置为零?

    结果将保持不变、直到下一次 ADC 转换完成。

    如何使用 PWM 触发 ADC? (我们希望以 PWM/2 获取 ADC 读数)

    使用事件触发 ADC、请参阅以下示例:

    https://dev.ti.com/tirex/explore/node?node=A__AL0ufy43KLtFvb8-zR95jw__MSPM0-SDK__a3PaaoK__LATEST&placeholder=true

    在 MS430 中、由 SW PMMCTL0 |=PMMSWBOR 进行欠压复位。 MSPM0 中的任何等效器件?

    类似的情况是、有不同的寄存器需要继续、而有不同的寄存器:

    __STATIC_INLINE void DL_SYSCTL_resetDevice(uint32_t resetType)
    {
        SYSCTL->SOCLOCK.RESETLEVEL = resetType;
        SYSCTL->SOCLOCK.RESETCMD =
            SYSCTL_RESETCMD_KEY_VALUE | SYSCTL_RESETCMD_GO_TRUE;
    }

    B.R.

    Sal

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

    尊敬的 Sal:

    感谢您的更新。 是否需要对 ADC 配置设置进行任何更改?

    我是否可以按如下方式使用 REST:

    SYSCTL->SOCLOCK.RESETLEVEL = 0x01; //SW 复位  
    SysCtl->SOCLOCK.RESETCMD = SYSCTL_RESETCMD_KEY_VALUE | SysCtl_RESETCMD_GO_TRUE;

    此致、

    Yogesh