Tool/software:
Hi
Currently I am using PMP7647_RevC design solution using MSP430 microcontroller. I am planning to migrate to MSPM0G1507.
I need some help regarding the issues faced.
ADC related:
We are not using DMA. Using ADC interrupt to read all ADC values. Wanted to check with you on ADC related settings.
How to make DL_ADC12_getMemResult(ADC12_0_INST, DL_ADC12_MEM_IDX_0) to zero after every read ?
How Trigger ADC using PWM ? (We want to take ADC reading at PWM/2)
In MS430, Brownout reset by SW PMMCTL0 |=PMMSWBOR. Any equivalent in MSPM0 ?
Regards,
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;