Hi,
I am stuck here. I have a FRDMK22F dev kit. I started by using the SDK example for PIT triggered ADC. I changed it to 16 bit differential and set the PIT rate as I desired. Works mint!
BUT... When I enable the compare function in the ADC, I get only one ADC conversion complete interrupt if the compare conditions are met on the very first sample, otherwise I never get an interrupt.
My intention is to wait until a sample is measured outside of a range, then switch the compare function off and continue sampling at a fixed interval. Any ideas on this, I am stuck and burning time away...
Relevant Code, the rest is as per the PIt hardware triggered ADC example:
static void adc_chn0_isr_callback(void)
{
gCurChan = 0;
gAdcDone = true;
}
#define ACCEL_ADC_CHANNEL (kAdc16Chn0d)
adc16_status_t res;
static int32_t init_adc(uint32_t instance)
{
adc16_converter_config_t adcUserConfig;
ADC16_DRV_StructInitUserConfigDefault(&adcUserConfig);
ADC16_DRV_Init(instance, &adcUserConfig);
adc16_hw_average_config_t adcAverageConfig =
{
.hwAverageEnable = true,
.hwAverageCountMode = kAdc16HwAverageCountOf32
};
ADC16_DRV_ConfigHwAverage(instance, &adcAverageConfig);
adc16_chn_config_t adcCalibrationChnConfig;
adcCalibrationChnConfig.diffConvEnable = true;
adcCalibrationChnConfig.convCompletedIntEnable = false;
ADC16_DRV_ConfigConvChn(instance, 0U, &adcCalibrationChnConfig);
adc16_calibration_param_t adcCalibrationParam;
ADC16_DRV_GetAutoCalibrationParam(instance, &adcCalibrationParam);
ADC16_DRV_SetCalibrationParam(instance, &adcCalibrationParam);
ADC16_DRV_StructInitUserConfigDefault(&adcUserConfig);
adcUserConfig.clkSrc = kAdc16ClkSrcOfBusClk;
adcUserConfig.clkDividerMode = kAdc16ClkDividerOf8;
adcUserConfig.lowPowerEnable = false;
adcUserConfig.resolution = kAdc16ResolutionBitOfDiffModeAs16;
adcUserConfig.refVoltSrc = kAdc16RefVoltSrcOfVref;
adcUserConfig.asyncClkEnable = false;
adcUserConfig.longSampleTimeEnable = true;
adcUserConfig.longSampleCycleMode = kAdc16LongSampleCycleOf16;
adcUserConfig.highSpeedEnable = false;
adcUserConfig.hwTriggerEnable = true;
adcUserConfig.continuousConvEnable = false;
adcUserConfig.dmaEnable = false;
ADC16_DRV_Init(instance, &adcUserConfig);
adcAverageConfig.hwAverageEnable = false;
ADC16_DRV_ConfigConvChn(instance, 0U, &adcCalibrationChnConfig);
ADC_TEST_InstallCallback(instance, 0U, adc_chn0_isr_callback);
adc16_hw_cmp_config_t compareVals =
{
.hwCmpEnable = true,
.hwCmpRangeEnable = false,
.hwCmpGreaterThanEnable = true,
.cmpValue1 = 10000
};
res = ADC16_DRV_ConfigHwCompare(instance, &compareVals);
adc16_chn_config_t adcChnConfig;
adcChnConfig.chnIdx = ACCEL_ADC_CHANNEL;
adcChnConfig.diffConvEnable = true;
adcChnConfig.convCompletedIntEnable = true;
ADC16_DRV_ConfigConvChn(instance, 0U, &adcChnConfig);
return 0;
}