diff --git a/include/fw_adc.h b/include/fw_adc.h index 5a5b14b..752dca4 100644 --- a/include/fw_adc.h +++ b/include/fw_adc.h @@ -92,6 +92,14 @@ */ #define ADC_SetSampleTime(__CLKS_1TO32__) (ADCTIM = ADCTIM & ~(0x1F << 0) | ((__CLKS_1TO32__) << 0)) +/** + * Start ADC conversion, and return 8-bit result +*/ +uint8_t ADC_Convert(void); +/** + * Start ADC conversion, and return 16-bit high precision result +*/ +uint16_t ADC_ConvertHP(void); #endif diff --git a/src/fw_adc.c b/src/fw_adc.c new file mode 100644 index 0000000..3344793 --- /dev/null +++ b/src/fw_adc.c @@ -0,0 +1,38 @@ +// Copyright 2021 IOsetting +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "fw_adc.h" + + +uint8_t ADC_Convert(void) +{ + ADC_Start(); + NOP(); + NOP(); + while (!ADC_SamplingFinished()); + ADC_ClearInterrupt(); + return ADC_RES; +} + +uint16_t ADC_ConvertHP(void) +{ + int16_t res; + ADC_Start(); + NOP(); + NOP(); + while (!ADC_SamplingFinished()); + ADC_ClearInterrupt(); + res = ADC_RES; + return (res << 8) + ADC_RESL; +} \ No newline at end of file