工具/软件:
你(们)好
目前、我正在使用 采用 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;