SAADC library and drivers for nrf52832.
Dependents: acd52832_SAADC_Differential_input_EPD acd52832_Car_battery_ch acd52832_Car_battery_ch_2
acd_nrf52_saadc.cpp
00001 /* 00002 * Made by Jurica Resetar and Karlo Milicevic @ aconno, 2017 00003 * jurica_resetar@yahoo.com 00004 * aconno.de 00005 * All rights reserved 00006 * 00007 */ 00008 00009 #include "acd_nrf52_saadc.h" 00010 00011 uint8_t NRF52_SAADC::channelCounter = 0; 00012 int16_t NRF52_SAADC::data[sizeof(int16_t)*NUM_OF_CHANNELS] = {0}; 00013 00014 NRF52_SAADC::NRF52_SAADC(uint8_t analogIn): channel(channelCounter){ 00015 if(!channelCounter){ 00016 // Do this for the first object only 00017 NRF_SAADC->ENABLE = 1; 00018 NRF_SAADC->RESULT.PTR =(uint32_t)data; // Pass pointer to results buffer 00019 NRF_SAADC->RESOLUTION = 3; 00020 calibrate(); 00021 } 00022 if(channelCounter < 8){ 00023 NRF_SAADC->CH[channel].PSELP = analogIn + 1; 00024 NRF_SAADC->CH[channel].CONFIG = 0x00021000; // reset 00025 channelCounter++; 00026 NRF_SAADC->RESULT.MAXCNT = channelCounter; 00027 } 00028 } 00029 00030 NRF52_SAADC::NRF52_SAADC(uint8_t pPin, uint8_t nPin): channel(channelCounter){ 00031 if(!channelCounter){ 00032 // Do this for the first object only 00033 NRF_SAADC->ENABLE = 1; 00034 NRF_SAADC->RESULT.PTR =(uint32_t)data; // Pass pointer to results buffer 00035 NRF_SAADC->RESOLUTION = 3; 00036 calibrate(); 00037 } 00038 if(channelCounter < 8){ 00039 NRF_SAADC->CH[channel].PSELP = pPin + 1; 00040 NRF_SAADC->CH[channel].PSELN = nPin + 1; 00041 NRF_SAADC->CH[channel].CONFIG = 0x00121200; // differential input, Gain 1 00042 channelCounter++; 00043 NRF_SAADC->RESULT.MAXCNT = channelCounter; 00044 } 00045 } 00046 00047 NRF52_SAADC::~NRF52_SAADC(){ 00048 NRF_SAADC->ENABLE = 0; 00049 } 00050 00051 int16_t NRF52_SAADC::read(){ 00052 updateData(); 00053 return data[channel]; 00054 } 00055 00056 void NRF52_SAADC::updateData(){ 00057 NRF_SAADC->TASKS_START = 1; 00058 while(!NRF_SAADC->EVENTS_STARTED); 00059 NRF_SAADC->TASKS_SAMPLE = 1; 00060 for(uint8_t i = 0; i < channelCounter; ++i){ 00061 while(!NRF_SAADC->EVENTS_RESULTDONE); 00062 while(!NRF_SAADC->EVENTS_DONE); 00063 while(!NRF_SAADC->EVENTS_END); 00064 while(NRF_SAADC->STATUS == 1); // while conversion is is progress 00065 } 00066 NRF_SAADC->TASKS_STOP = 1; 00067 while(!NRF_SAADC->EVENTS_STOPPED); 00068 } 00069 00070 void NRF52_SAADC::calibrate(){ 00071 NRF_SAADC->TASKS_CALIBRATEOFFSET = 1; 00072 while(!NRF_SAADC->EVENTS_CALIBRATEDONE); 00073 }
Generated on Wed Jul 13 2022 05:17:02 by 1.7.2