/*! * @brief Initialize the ADCx for HW trigger. * * @param instance The ADC instance number */ static int32_t init_adc(uint32_t instance) { adc16_converter_config_t adcUserConfig; adc16_chn_config_t adcChnConfig; #if FSL_FEATURE_ADC16_HAS_CALIBRATION // Initialization ADC for calibration purposes adc16_calibration_param_t adcCalibrationParam; adc16_chn_config_t adcCalibrationChnConfig; const adc16_hw_average_config_t adcAverageConfig = { .hwAverageEnable = true, .hwAverageCountMode = kAdc16HwAverageCountOf32 }; ADC16_DRV_StructInitUserConfigDefault(&adcUserConfig); #if BOARD_ADC_USE_ALT_VREF adcUserConfig.refVoltSrc = kAdc16RefVoltSrcOfValt; #endif ADC16_DRV_Init(instance, &adcUserConfig); ADC16_DRV_ConfigHwAverage(instance, &adcAverageConfig); adcChnConfig.chnIdx = kAdc16Chn31; #if FSL_FEATURE_ADC16_HAS_DIFF_MODE adcCalibrationChnConfig.diffConvEnable = false; #endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */ adcCalibrationChnConfig.convCompletedIntEnable = false; // Configure channel0 ADC16_DRV_ConfigConvChn(instance, 0U, &adcCalibrationChnConfig); // Configure channel1, which is used in PDB trigger case ADC16_DRV_ConfigConvChn(instance, 1U, &adcCalibrationChnConfig); // Auto calibration. ADC16_DRV_GetAutoCalibrationParam(instance, &adcCalibrationParam); ADC16_DRV_SetCalibrationParam(instance, &adcCalibrationParam); #endif // Initialization ADC for // 12bit resolution, interrrupt mode, hw trigger enabled. // normal convert speed, VREFH/L as reference, // disable continuouse convert mode. ADC16_DRV_StructInitUserConfigDefault(&adcUserConfig); adcUserConfig.hwTriggerEnable = true; adcUserConfig.continuousConvEnable = false; #if BOARD_ADC_USE_ALT_VREF adcUserConfig.refVoltSrc = kAdc16RefVoltSrcOfValt; #endif ADC16_DRV_Init(instance, &adcUserConfig); // Install Callback function into ISR ADC_TEST_InstallCallback(instance, 0U, adc_chn0_isr_callback); ADC_TEST_InstallCallback(instance, 1U, adc_chn1_isr_callback); adcChnConfig.chnIdx = (adc16_chn_t)ADC_INPUT_CHAN; #if FSL_FEATURE_ADC16_HAS_DIFF_MODE adcChnConfig.diffConvEnable = false; #endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */ adcChnConfig.convCompletedIntEnable = true; // Configure channel0 ADC16_DRV_ConfigConvChn(instance, 0U, &adcChnConfig); // Configure channel1, which is used in PDB trigger case ADC16_DRV_ConfigConvChn(instance, 1U, &adcChnConfig); return 0; } /*! * @brief Reset the sparse matrix */ void sparse_reset(void) { memset(gChartHead, 0, sizeof(gChartHead)); memset(gChartNodes, 0, sizeof(gChartNodes)); gFreeNode = 0; }
/*! * @brief Initialize the ADCx for HW trigger. * * @param instance The ADC instance number */ int32_t init_adc(uint32_t instance) { #if FSL_FEATURE_ADC16_HAS_CALIBRATION adc16_calibration_param_t adcCalibraitionParam; #endif adc16_converter_config_t adcUserConfig; adc16_chn_config_t adcChnConfig; adc16_hw_average_config_t adchwaverageConfig; //ADC16_DRV_StructInitUserConfigDefault(&adcUserConfig); /* Special configuration for highest accuracy. */ adcUserConfig.lowPowerEnable = false; adcUserConfig.clkDividerMode = kAdc16ClkDividerOf1; adcUserConfig.longSampleTimeEnable = false; //yanglliang adcUserConfig.resolution = kAdc16ResolutionBitOfSingleEndAs16; //adcUserConfig.resolution = kAdc16ResolutionBitOfSingleEndAs12; adcUserConfig.clkSrc = kAdc16ClkSrcOfBusClk; //kAdc16ClkSrcOfAsynClk; adcUserConfig.asyncClkEnable = true; adcUserConfig.highSpeedEnable = true; adcUserConfig.longSampleCycleMode = kAdc16LongSampleCycleOf24; adcUserConfig.hwTriggerEnable = false; adcUserConfig.refVoltSrc = kAdc16RefVoltSrcOfVref; adcUserConfig.continuousConvEnable = false; #if ( defined(FRDM_KL43Z) /* CPU_MKL43Z256VLH4 */ \ || defined(TWR_KL43Z48M) /* CPU_MKL43Z256VLH4 */ \ || defined(FRDM_KL27Z) /* CPU_MKL27Z64VLH4 */ \ ) adcUserConfig.refVoltSrc = kAdc16RefVoltSrcOfValt; #endif ADC16_DRV_Init(instance, &adcUserConfig); #if FSL_FEATURE_ADC16_HAS_CALIBRATION // Auto calibraion. ADC16_DRV_GetAutoCalibrationParam(instance, &adcCalibraitionParam); ADC16_DRV_SetCalibrationParam(instance, &adcCalibraitionParam); #endif // Initialization ADC for // 12bit resolution, interrrupt mode, hw trigger enabled. // normal convert speed, VREFH/L as reference, // disable continuouse convert mode. //ADC16_DRV_StructInitUserConfigDefault(&adcUserConfig); adcUserConfig.hwTriggerEnable = true; adcUserConfig.continuousConvEnable = false; #if ( defined(FRDM_KL43Z) /* CPU_MKL43Z256VLH4 */ \ || defined(TWR_KL43Z48M) /* CPU_MKL43Z256VLH4 */ \ || defined(FRDM_KL27Z) /* CPU_MKL27Z64VLH4 */ \ ) adcUserConfig.refVoltSrc = kAdc16RefVoltSrcOfValt; #endif ADC16_DRV_Init(instance, &adcUserConfig); // Install Callback function into ISR ADC_TEST_InstallCallback(instance, 0U, adc_chn0_isr_callback); //ADC_TEST_InstallCallback(instance, 1U, adc_chn1_isr_callback); adcChnConfig.chnIdx = (adc16_chn_t)ADC_AI1; #if FSL_FEATURE_ADC16_HAS_DIFF_MODE adcChnConfig.diffConvEnable = false; #endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */ adcChnConfig.convCompletedIntEnable = true; ADC0_CFG2 |= ADC_CFG2_MUXSEL_MASK; // Configure channel0 ADC16_DRV_ConfigConvChn(instance, 0U, &adcChnConfig); adchwaverageConfig.hwAverageEnable=false; //yangliang for hardware average adchwaverageConfig.hwAverageCountMode=kAdc16HwAverageCountOf4; //adchwaverageConfig.hwAverageCountMode=kAdc16HwAverageCountOf16; ADC16_DRV_ConfigHwAverage(0, & adchwaverageConfig); //Set Hardware Average numbers // Configure channel1, which is used in PDB trigger case //ADC16_DRV_ConfigConvChn(instance, 1U, &adcChnConfig); return 0; }