Sha256: 22aa8adcfaab721d2231cec0fd218aa4de5e2bbccff9967a1c9400e762a8d861
Contents?: true
Size: 1.63 KB
Versions: 2
Compression:
Stored size: 1.63 KB
Contents
/* ========================================================================= Ceedling - Test-Centered Build System for C ThrowTheSwitch.org Copyright (c) 2010-25 Mike Karlesky, Mark VanderVoord, & Greg Williams SPDX-License-Identifier: MIT ========================================================================= */ #include "Types.h" #include "AdcTemperatureSensor.h" static inline uint32 ConvertAdcCountsToPicovolts(uint32 counts); static inline uint16 ConvertPicovoltsToMillivolts(uint32 picovolts); // // PUBLIC METHODS // void Adc_StartTemperatureSensorConversion(void) { AT91C_BASE_ADC->ADC_CR = AT91C_ADC_START; } bool Adc_TemperatureSensorSampleReady(void) { return ((AT91C_BASE_ADC->ADC_SR & AT91C_ADC_EOC4) == AT91C_ADC_EOC4); } uint16 Adc_ReadTemperatureSensor(void) { uint32 picovolts = ConvertAdcCountsToPicovolts(AT91C_BASE_ADC->ADC_CDR4); return ConvertPicovoltsToMillivolts(picovolts); } // // PRIVATE HELPERS // static inline uint32 ConvertAdcCountsToPicovolts(uint32 counts) { // ADC bit weight at 10-bit resolution with 3.0V reference = 2.9296875 mV/LSB uint32 picovoltsPerAdcCount = 2929688; // Shift decimal point by 6 places to preserve accuracy in fixed-point math return counts * picovoltsPerAdcCount; } static inline uint16 ConvertPicovoltsToMillivolts(uint32 picovolts) { const uint32 halfMillivoltInPicovolts = 500000; const uint32 picovoltsPerMillivolt = 1000000; // Add 0.5 mV to result so that truncation yields properly rounded result picovolts += halfMillivoltInPicovolts; // Divide appropriately to convert to millivolts return (uint16)(picovolts / picovoltsPerMillivolt); }
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
ceedling-1.0.1 | examples/temp_sensor/src/AdcTemperatureSensor.c |
ceedling-1.0.0 | examples/temp_sensor/src/AdcTemperatureSensor.c |