Same question, when I use the FTM0 to trigger the PDB,ADC interrupt can run in just once. However When I use the soft to trigger PDB , it works normally.
void Mx_ADC_Init(void)
{
module_clk_config_t adc_clk_config={
.gating = 1,
.source = SPLL_CLK,//FIRC_CLK
.mul = 0,
.div = 0
};
const adc_converter_config_t ADC_0_ConvConfig0 = {
.clockDivide = ADC_CLK_DIVIDE_1,
.sampleTime = 80U,
.resolution = ADC_RESOLUTION_12BIT,
.inputClock = ADC_CLK_ALT_1,
.trigger = ADC_TRIGGER_HARDWARE,
.pretriggerSel = ADC_PRETRIGGER_SEL_PDB,
.triggerSel = ADC_TRIGGER_SEL_PDB,
.dmaEnable = false,
.voltageRef = ADC_VOLTAGEREF_VREF,
.continuousConvEnable = false,
.supplyMonitoringEnable = false
};
adc_chan_config_t ADC_0_ChnConfig0 = {
.interruptEnable = false,
.channel = ADC_INPUTCHAN_EXT2
};
adc_chan_config_t ADC_1_ChnConfig0 = {
.interruptEnable = false,
.channel = ADC_INPUTCHAN_EXT2
};
pdb_adc_pretrigger_config_t pdb_1_adcTrigConfig0 = {
.adcPreTriggerIdx = 0U,
.preTriggerEnable = true,
.preTriggerOutputEnable = false,
.preTriggerBackToBackEnable = false
};
/*! @brief PDB timer configurations */
pdb_timer_config_t pdb_1_timerConfig0 = {
.loadValueMode = PDB_LOAD_VAL_IMMEDIATELY,
.seqErrIntEnable = false,
.clkPreDiv = PDB_CLK_PREDIV_BY_1,
.clkPreMultFactor = PDB_CLK_PREMULT_FACT_AS_1,
.triggerInput =PDB_TRIGGER_IN0,//PDB_SOFTWARE_TRIGGER
.continuousModeEnable = false,
.dmaEnable = false,
.intEnable = false,
.instanceBackToBackEnable = false,
};
trgmux_user_config_t trgmuxConfig;
trgmux_inout_mapping_config_t trgmuxInoutMappingConfig[] =
{
{TRGMUX_TRIG_SOURCE_FTM0_INIT_TRIG, TRGMUX_TARGET_MODULE_PDB0_TRG_IN, false},
{TRGMUX_TRIG_SOURCE_FTM0_INIT_TRIG, TRGMUX_TARGET_MODULE_PDB1_TRG_IN, false},
};
trgmuxConfig.numInOutMappingConfigs = 2;
trgmuxConfig.inOutMappingConfig = trgmuxInoutMappingConfig;
CLOCK_DRV_SetModuleClock(ADC0_CLK, &adc_clk_config);
CLOCK_DRV_SetModuleClock(ADC1_CLK, &adc_clk_config);
CLOCK_DRV_SetModuleClock(PDB0_CLK, NULL);
CLOCK_DRV_SetModuleClock(PDB1_CLK, NULL);
ADC_DRV_ConfigConverter(0, &ADC_0_ConvConfig0);
ADC_DRV_ConfigConverter(1, &ADC_0_ConvConfig0);
ADC_DRV_AutoCalibration(0);
ADC_DRV_AutoCalibration(1);
ADC_0_ChnConfig0.interruptEnable = true;
ADC_DRV_ConfigChan(0, 0UL, &ADC_0_ChnConfig0);//V current
ADC_0_ChnConfig0.channel = ADC_INPUTCHAN_EXT3;
ADC_0_ChnConfig0.interruptEnable = false;
ADC_DRV_ConfigChan(0, 1UL, &ADC_0_ChnConfig0);
ADC_0_ChnConfig0.channel = ADC_INPUTCHAN_EXT4;
ADC_DRV_ConfigChan(0, 2UL, &ADC_0_ChnConfig0);
ADC_0_ChnConfig0.channel = ADC_INPUTCHAN_EXT5;
ADC_DRV_ConfigChan(0, 3UL, &ADC_0_ChnConfig0);
ADC_0_ChnConfig0.channel = ADC_INPUTCHAN_EXT6;
ADC_DRV_ConfigChan(0, 4UL, &ADC_0_ChnConfig0);
ADC_0_ChnConfig0.channel = ADC_INPUTCHAN_EXT7;
ADC_0_ChnConfig0.interruptEnable = true;
ADC_DRV_ConfigChan(0, 5UL, &ADC_0_ChnConfig0);
ADC_DRV_ConfigChan(1, 0UL, &ADC_1_ChnConfig0);
ADC_1_ChnConfig0.channel = ADC_INPUTCHAN_EXT3;
ADC_DRV_ConfigChan(1, 1UL, &ADC_1_ChnConfig0);
ADC_1_ChnConfig0.channel = ADC_INPUTCHAN_EXT0;
ADC_DRV_ConfigChan(1, 2UL, &ADC_1_ChnConfig0);
ADC_1_ChnConfig0.channel = ADC_INPUTCHAN_EXT1;
ADC_DRV_ConfigChan(1, 3UL, &ADC_1_ChnConfig0);
ADC_1_ChnConfig0.channel = ADC_INPUTCHAN_EXT10;
ADC_DRV_ConfigChan(1, 4UL, &ADC_1_ChnConfig0);
ADC_1_ChnConfig0.channel = ADC_INPUTCHAN_EXT11;
ADC_DRV_ConfigChan(1, 5UL, &ADC_1_ChnConfig0);
PDB_DRV_Init(0, &pdb_1_timerConfig0);
PDB_DRV_Enable(0);
PDB_DRV_ConfigAdcPreTrigger(0, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 1;
pdb_1_adcTrigConfig0.preTriggerBackToBackEnable = true;
PDB_DRV_ConfigAdcPreTrigger(0, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 2;
PDB_DRV_ConfigAdcPreTrigger(0, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 3;
PDB_DRV_ConfigAdcPreTrigger(0, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 4;
PDB_DRV_ConfigAdcPreTrigger(0, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 5;
PDB_DRV_ConfigAdcPreTrigger(0, 0UL, &pdb_1_adcTrigConfig0);
PDB_DRV_SetTimerModulusValue(0, 80*50);
PDB_DRV_SetAdcPreTriggerDelayValue(0, 0UL, 0UL,
80*1);//1us
PDB_DRV_LoadValuesCmd(0);
PDB_DRV_Init(1, &pdb_1_timerConfig0);
PDB_DRV_Enable(1);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 0;
pdb_1_adcTrigConfig0.preTriggerBackToBackEnable = false;
PDB_DRV_ConfigAdcPreTrigger(1, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 1;
pdb_1_adcTrigConfig0.preTriggerBackToBackEnable = true;
PDB_DRV_ConfigAdcPreTrigger(1, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 2;
PDB_DRV_ConfigAdcPreTrigger(1, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 3;
PDB_DRV_ConfigAdcPreTrigger(1, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 4;
PDB_DRV_ConfigAdcPreTrigger(1, 0UL, &pdb_1_adcTrigConfig0);
pdb_1_adcTrigConfig0.adcPreTriggerIdx = 5;
PDB_DRV_ConfigAdcPreTrigger(1, 0UL, &pdb_1_adcTrigConfig0);
PDB_DRV_SetTimerModulusValue(1, 80*50);
PDB_DRV_SetAdcPreTriggerDelayValue(1, 0UL, 0UL,
80*1);
PDB_DRV_LoadValuesCmd(1);
TRGMUX_DRV_Init(0, &trgmuxConfig);
INT_SYS_InstallHandler(ADC0_IRQn, &ADC_IRQHandler, (isr_t*) 0);
INT_SYS_SetPriority(ADC0_IRQn,1);
INT_SYS_EnableIRQ(ADC0_IRQn);
}