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

