15#include "adc_rp2350.h"
18using namespace _IO_BANK0_;
19using namespace _RESETS_;
22adc_rp2350::adc_rp2350() {
24 RESETS_CLR.RESET.ADC <<= 1;
25 while (!RESETS.RESET_DONE.ADC) ;
28 while (!_ADC_::ADC.CS.READY) ;
30 for (
int i=40; i < 48; ++i) {
32 _PADS_BANK0_::PADS_BANK0.GPIO[i].PUE = 0;
33 _PADS_BANK0_::PADS_BANK0.GPIO[i].PDE = 0;
34 _PADS_BANK0_::PADS_BANK0.GPIO[i].ISO = 0;
38void adc_rp2350::adcMode(uint8_t channel, uint16_t mode) {
40 assert(mode < ADC::ADC_14_BIT);
41 _modes[channel] = mode;
44adc_mode_t adc_rp2350::getMode(uint8_t channel) {
46 return _modes[channel];
49uint16_t adc_rp2350::adcReadRaw(uint8_t channel) {
52 _ADC_::ADC.CS.AINSEL = channel;
53 _ADC_::ADC.CS.START_ONCE = 1;
54 while(!_ADC_::ADC.CS.READY) ;
55 uint16_t result = _ADC_::ADC.RESULT;
58 switch(_modes[channel]) {
69float adc_rp2350::adcReadVoltage(uint8_t channel) {
70 return rawToVoltage(channel, adcReadRaw(channel));
73float adc_rp2350::rawToVoltage(uint8_t channel, uint16_t raw) {
74 float voltage = 3.3f * (float)raw;
75 switch(_modes[channel]) {