123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896 |
- #ifndef NRF_SAADC_H_
- #define NRF_SAADC_H_
- #include <nrfx.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- #define NRF_SAADC_CHANNEL_COUNT 8
- typedef enum
- {
- NRF_SAADC_RESOLUTION_8BIT = SAADC_RESOLUTION_VAL_8bit,
- NRF_SAADC_RESOLUTION_10BIT = SAADC_RESOLUTION_VAL_10bit,
- NRF_SAADC_RESOLUTION_12BIT = SAADC_RESOLUTION_VAL_12bit,
- NRF_SAADC_RESOLUTION_14BIT = SAADC_RESOLUTION_VAL_14bit
- } nrf_saadc_resolution_t;
- typedef enum
- {
- NRF_SAADC_INPUT_DISABLED = SAADC_CH_PSELP_PSELP_NC,
- NRF_SAADC_INPUT_AIN0 = SAADC_CH_PSELP_PSELP_AnalogInput0,
- NRF_SAADC_INPUT_AIN1 = SAADC_CH_PSELP_PSELP_AnalogInput1,
- NRF_SAADC_INPUT_AIN2 = SAADC_CH_PSELP_PSELP_AnalogInput2,
- NRF_SAADC_INPUT_AIN3 = SAADC_CH_PSELP_PSELP_AnalogInput3,
- NRF_SAADC_INPUT_AIN4 = SAADC_CH_PSELP_PSELP_AnalogInput4,
- NRF_SAADC_INPUT_AIN5 = SAADC_CH_PSELP_PSELP_AnalogInput5,
- NRF_SAADC_INPUT_AIN6 = SAADC_CH_PSELP_PSELP_AnalogInput6,
- NRF_SAADC_INPUT_AIN7 = SAADC_CH_PSELP_PSELP_AnalogInput7,
- NRF_SAADC_INPUT_VDD = SAADC_CH_PSELP_PSELP_VDD,
- #if defined(SAADC_CH_PSELP_PSELP_VDDHDIV5) || defined(__NRFX_DOXYGEN__)
- NRF_SAADC_INPUT_VDDHDIV5 = SAADC_CH_PSELP_PSELP_VDDHDIV5
- #endif
- } nrf_saadc_input_t;
- typedef enum
- {
- NRF_SAADC_OVERSAMPLE_DISABLED = SAADC_OVERSAMPLE_OVERSAMPLE_Bypass,
- NRF_SAADC_OVERSAMPLE_2X = SAADC_OVERSAMPLE_OVERSAMPLE_Over2x,
- NRF_SAADC_OVERSAMPLE_4X = SAADC_OVERSAMPLE_OVERSAMPLE_Over4x,
- NRF_SAADC_OVERSAMPLE_8X = SAADC_OVERSAMPLE_OVERSAMPLE_Over8x,
- NRF_SAADC_OVERSAMPLE_16X = SAADC_OVERSAMPLE_OVERSAMPLE_Over16x,
- NRF_SAADC_OVERSAMPLE_32X = SAADC_OVERSAMPLE_OVERSAMPLE_Over32x,
- NRF_SAADC_OVERSAMPLE_64X = SAADC_OVERSAMPLE_OVERSAMPLE_Over64x,
- NRF_SAADC_OVERSAMPLE_128X = SAADC_OVERSAMPLE_OVERSAMPLE_Over128x,
- NRF_SAADC_OVERSAMPLE_256X = SAADC_OVERSAMPLE_OVERSAMPLE_Over256x
- } nrf_saadc_oversample_t;
- typedef enum
- {
- NRF_SAADC_RESISTOR_DISABLED = SAADC_CH_CONFIG_RESP_Bypass,
- NRF_SAADC_RESISTOR_PULLDOWN = SAADC_CH_CONFIG_RESP_Pulldown,
- NRF_SAADC_RESISTOR_PULLUP = SAADC_CH_CONFIG_RESP_Pullup,
- NRF_SAADC_RESISTOR_VDD1_2 = SAADC_CH_CONFIG_RESP_VDD1_2
- } nrf_saadc_resistor_t;
- typedef enum
- {
- NRF_SAADC_GAIN1_6 = SAADC_CH_CONFIG_GAIN_Gain1_6,
- NRF_SAADC_GAIN1_5 = SAADC_CH_CONFIG_GAIN_Gain1_5,
- NRF_SAADC_GAIN1_4 = SAADC_CH_CONFIG_GAIN_Gain1_4,
- NRF_SAADC_GAIN1_3 = SAADC_CH_CONFIG_GAIN_Gain1_3,
- NRF_SAADC_GAIN1_2 = SAADC_CH_CONFIG_GAIN_Gain1_2,
- NRF_SAADC_GAIN1 = SAADC_CH_CONFIG_GAIN_Gain1,
- NRF_SAADC_GAIN2 = SAADC_CH_CONFIG_GAIN_Gain2,
- NRF_SAADC_GAIN4 = SAADC_CH_CONFIG_GAIN_Gain4,
- } nrf_saadc_gain_t;
- typedef enum
- {
- NRF_SAADC_REFERENCE_INTERNAL = SAADC_CH_CONFIG_REFSEL_Internal,
- NRF_SAADC_REFERENCE_VDD4 = SAADC_CH_CONFIG_REFSEL_VDD1_4
- } nrf_saadc_reference_t;
- typedef enum
- {
- NRF_SAADC_ACQTIME_3US = SAADC_CH_CONFIG_TACQ_3us,
- NRF_SAADC_ACQTIME_5US = SAADC_CH_CONFIG_TACQ_5us,
- NRF_SAADC_ACQTIME_10US = SAADC_CH_CONFIG_TACQ_10us,
- NRF_SAADC_ACQTIME_15US = SAADC_CH_CONFIG_TACQ_15us,
- NRF_SAADC_ACQTIME_20US = SAADC_CH_CONFIG_TACQ_20us,
- NRF_SAADC_ACQTIME_40US = SAADC_CH_CONFIG_TACQ_40us
- } nrf_saadc_acqtime_t;
- typedef enum
- {
- NRF_SAADC_MODE_SINGLE_ENDED = SAADC_CH_CONFIG_MODE_SE,
- NRF_SAADC_MODE_DIFFERENTIAL = SAADC_CH_CONFIG_MODE_Diff
- } nrf_saadc_mode_t;
- typedef enum
- {
- NRF_SAADC_BURST_DISABLED = SAADC_CH_CONFIG_BURST_Disabled,
- NRF_SAADC_BURST_ENABLED = SAADC_CH_CONFIG_BURST_Enabled
- } nrf_saadc_burst_t;
- typedef enum
- {
- NRF_SAADC_TASK_START = offsetof(NRF_SAADC_Type, TASKS_START),
- NRF_SAADC_TASK_SAMPLE = offsetof(NRF_SAADC_Type, TASKS_SAMPLE),
- NRF_SAADC_TASK_STOP = offsetof(NRF_SAADC_Type, TASKS_STOP),
- NRF_SAADC_TASK_CALIBRATEOFFSET = offsetof(NRF_SAADC_Type, TASKS_CALIBRATEOFFSET),
- } nrf_saadc_task_t;
- typedef enum
- {
- NRF_SAADC_EVENT_STARTED = offsetof(NRF_SAADC_Type, EVENTS_STARTED),
- NRF_SAADC_EVENT_END = offsetof(NRF_SAADC_Type, EVENTS_END),
- NRF_SAADC_EVENT_DONE = offsetof(NRF_SAADC_Type, EVENTS_DONE),
- NRF_SAADC_EVENT_RESULTDONE = offsetof(NRF_SAADC_Type, EVENTS_RESULTDONE),
- NRF_SAADC_EVENT_CALIBRATEDONE = offsetof(NRF_SAADC_Type, EVENTS_CALIBRATEDONE),
- NRF_SAADC_EVENT_STOPPED = offsetof(NRF_SAADC_Type, EVENTS_STOPPED),
- NRF_SAADC_EVENT_CH0_LIMITH = offsetof(NRF_SAADC_Type, EVENTS_CH[0].LIMITH),
- NRF_SAADC_EVENT_CH0_LIMITL = offsetof(NRF_SAADC_Type, EVENTS_CH[0].LIMITL),
- NRF_SAADC_EVENT_CH1_LIMITH = offsetof(NRF_SAADC_Type, EVENTS_CH[1].LIMITH),
- NRF_SAADC_EVENT_CH1_LIMITL = offsetof(NRF_SAADC_Type, EVENTS_CH[1].LIMITL),
- NRF_SAADC_EVENT_CH2_LIMITH = offsetof(NRF_SAADC_Type, EVENTS_CH[2].LIMITH),
- NRF_SAADC_EVENT_CH2_LIMITL = offsetof(NRF_SAADC_Type, EVENTS_CH[2].LIMITL),
- NRF_SAADC_EVENT_CH3_LIMITH = offsetof(NRF_SAADC_Type, EVENTS_CH[3].LIMITH),
- NRF_SAADC_EVENT_CH3_LIMITL = offsetof(NRF_SAADC_Type, EVENTS_CH[3].LIMITL),
- NRF_SAADC_EVENT_CH4_LIMITH = offsetof(NRF_SAADC_Type, EVENTS_CH[4].LIMITH),
- NRF_SAADC_EVENT_CH4_LIMITL = offsetof(NRF_SAADC_Type, EVENTS_CH[4].LIMITL),
- NRF_SAADC_EVENT_CH5_LIMITH = offsetof(NRF_SAADC_Type, EVENTS_CH[5].LIMITH),
- NRF_SAADC_EVENT_CH5_LIMITL = offsetof(NRF_SAADC_Type, EVENTS_CH[5].LIMITL),
- NRF_SAADC_EVENT_CH6_LIMITH = offsetof(NRF_SAADC_Type, EVENTS_CH[6].LIMITH),
- NRF_SAADC_EVENT_CH6_LIMITL = offsetof(NRF_SAADC_Type, EVENTS_CH[6].LIMITL),
- NRF_SAADC_EVENT_CH7_LIMITH = offsetof(NRF_SAADC_Type, EVENTS_CH[7].LIMITH),
- NRF_SAADC_EVENT_CH7_LIMITL = offsetof(NRF_SAADC_Type, EVENTS_CH[7].LIMITL)
- } nrf_saadc_event_t;
- typedef enum
- {
- NRF_SAADC_INT_STARTED = SAADC_INTENSET_STARTED_Msk,
- NRF_SAADC_INT_END = SAADC_INTENSET_END_Msk,
- NRF_SAADC_INT_DONE = SAADC_INTENSET_DONE_Msk,
- NRF_SAADC_INT_RESULTDONE = SAADC_INTENSET_RESULTDONE_Msk,
- NRF_SAADC_INT_CALIBRATEDONE = SAADC_INTENSET_CALIBRATEDONE_Msk,
- NRF_SAADC_INT_STOPPED = SAADC_INTENSET_STOPPED_Msk,
- NRF_SAADC_INT_CH0LIMITH = SAADC_INTENSET_CH0LIMITH_Msk,
- NRF_SAADC_INT_CH0LIMITL = SAADC_INTENSET_CH0LIMITL_Msk,
- NRF_SAADC_INT_CH1LIMITH = SAADC_INTENSET_CH1LIMITH_Msk,
- NRF_SAADC_INT_CH1LIMITL = SAADC_INTENSET_CH1LIMITL_Msk,
- NRF_SAADC_INT_CH2LIMITH = SAADC_INTENSET_CH2LIMITH_Msk,
- NRF_SAADC_INT_CH2LIMITL = SAADC_INTENSET_CH2LIMITL_Msk,
- NRF_SAADC_INT_CH3LIMITH = SAADC_INTENSET_CH3LIMITH_Msk,
- NRF_SAADC_INT_CH3LIMITL = SAADC_INTENSET_CH3LIMITL_Msk,
- NRF_SAADC_INT_CH4LIMITH = SAADC_INTENSET_CH4LIMITH_Msk,
- NRF_SAADC_INT_CH4LIMITL = SAADC_INTENSET_CH4LIMITL_Msk,
- NRF_SAADC_INT_CH5LIMITH = SAADC_INTENSET_CH5LIMITH_Msk,
- NRF_SAADC_INT_CH5LIMITL = SAADC_INTENSET_CH5LIMITL_Msk,
- NRF_SAADC_INT_CH6LIMITH = SAADC_INTENSET_CH6LIMITH_Msk,
- NRF_SAADC_INT_CH6LIMITL = SAADC_INTENSET_CH6LIMITL_Msk,
- NRF_SAADC_INT_CH7LIMITH = SAADC_INTENSET_CH7LIMITH_Msk,
- NRF_SAADC_INT_CH7LIMITL = SAADC_INTENSET_CH7LIMITL_Msk,
- NRF_SAADC_INT_ALL = 0x7FFFFFFFUL
- } nrf_saadc_int_mask_t;
- typedef enum
- {
- NRF_SAADC_LIMIT_LOW = 0,
- NRF_SAADC_LIMIT_HIGH = 1
- } nrf_saadc_limit_t;
- typedef int16_t nrf_saadc_value_t;
- typedef struct
- {
- nrf_saadc_resolution_t resolution;
- nrf_saadc_oversample_t oversample;
- nrf_saadc_value_t * buffer;
- uint32_t buffer_size;
- } nrf_saadc_config_t;
- typedef struct
- {
- nrf_saadc_resistor_t resistor_p;
- nrf_saadc_resistor_t resistor_n;
- nrf_saadc_gain_t gain;
- nrf_saadc_reference_t reference;
- nrf_saadc_acqtime_t acq_time;
- nrf_saadc_mode_t mode;
- nrf_saadc_burst_t burst;
- nrf_saadc_input_t pin_p;
- nrf_saadc_input_t pin_n;
- } nrf_saadc_channel_config_t;
- __STATIC_INLINE void nrf_saadc_task_trigger(nrf_saadc_task_t task);
- __STATIC_INLINE uint32_t nrf_saadc_task_address_get(nrf_saadc_task_t task);
- __STATIC_INLINE bool nrf_saadc_event_check(nrf_saadc_event_t event);
- __STATIC_INLINE void nrf_saadc_event_clear(nrf_saadc_event_t event);
- __STATIC_INLINE uint32_t nrf_saadc_event_address_get(nrf_saadc_event_t event);
- #if defined(DPPI_PRESENT) || defined(__NRFX_DOXYGEN__)
- __STATIC_INLINE void nrf_saadc_subscribe_set(nrf_saadc_task_t task,
- uint8_t channel);
- __STATIC_INLINE void nrf_saadc_subscribe_clear(nrf_saadc_task_t task);
- __STATIC_INLINE void nrf_saadc_publish_set(nrf_saadc_event_t event,
- uint8_t channel);
- __STATIC_INLINE void nrf_saadc_publish_clear(nrf_saadc_event_t event);
- #endif
- __STATIC_INLINE volatile uint32_t * nrf_saadc_event_limit_address_get(uint8_t channel,
- nrf_saadc_limit_t limit_type);
- __STATIC_INLINE nrf_saadc_event_t nrf_saadc_limit_event_get(uint8_t channel,
- nrf_saadc_limit_t limit_type);
- __STATIC_INLINE void nrf_saadc_channel_input_set(uint8_t channel,
- nrf_saadc_input_t pselp,
- nrf_saadc_input_t pseln);
- __STATIC_INLINE void nrf_saadc_channel_pos_input_set(uint8_t channel,
- nrf_saadc_input_t pselp);
- __STATIC_INLINE void nrf_saadc_channel_limits_set(uint8_t channel, int16_t low, int16_t high);
- __STATIC_INLINE void nrf_saadc_int_set(uint32_t mask);
- __STATIC_INLINE void nrf_saadc_int_enable(uint32_t saadc_int_mask);
- __STATIC_INLINE bool nrf_saadc_int_enable_check(uint32_t saadc_int_mask);
- __STATIC_INLINE void nrf_saadc_int_disable(uint32_t saadc_int_mask);
- __STATIC_INLINE uint32_t nrf_saadc_limit_int_get(uint8_t channel, nrf_saadc_limit_t limit_type);
- __STATIC_INLINE bool nrf_saadc_busy_check(void);
- __STATIC_INLINE void nrf_saadc_enable(void);
- __STATIC_INLINE void nrf_saadc_disable(void);
- __STATIC_INLINE bool nrf_saadc_enable_check(void);
- __STATIC_INLINE void nrf_saadc_buffer_init(nrf_saadc_value_t * p_buffer,
- uint32_t size);
- __STATIC_INLINE void nrf_saadc_buffer_pointer_set(nrf_saadc_value_t * p_buffer);
- __STATIC_INLINE nrf_saadc_value_t * nrf_saadc_buffer_pointer_get(void);
- __STATIC_INLINE uint16_t nrf_saadc_amount_get(void);
- __STATIC_INLINE void nrf_saadc_resolution_set(nrf_saadc_resolution_t resolution);
- __STATIC_INLINE nrf_saadc_resolution_t nrf_saadc_resolution_get(void);
- __STATIC_INLINE void nrf_saadc_oversample_set(nrf_saadc_oversample_t oversample);
- __STATIC_INLINE nrf_saadc_oversample_t nrf_saadc_oversample_get(void);
- __STATIC_INLINE uint32_t nrf_saadc_oversample_sample_count_get(nrf_saadc_oversample_t oversample);
- __STATIC_INLINE void nrf_saadc_continuous_mode_enable(uint16_t cc);
- __STATIC_INLINE bool nrf_saadc_continuous_mode_enable_check(void);
- __STATIC_INLINE void nrf_saadc_continuous_mode_disable(void);
- __STATIC_INLINE void nrf_saadc_channel_init(uint8_t channel,
- nrf_saadc_channel_config_t const * const config);
- __STATIC_INLINE void nrf_saadc_burst_set(uint8_t channel,
- nrf_saadc_burst_t burst);
- __STATIC_INLINE nrf_saadc_value_t nrf_saadc_value_min_get(nrf_saadc_resolution_t resolution);
- __STATIC_INLINE nrf_saadc_value_t nrf_saadc_value_max_get(nrf_saadc_resolution_t resolution);
- #ifndef SUPPRESS_INLINE_IMPLEMENTATION
- __STATIC_INLINE void nrf_saadc_task_trigger(nrf_saadc_task_t task)
- {
- *((volatile uint32_t *)((uint8_t *)NRF_SAADC + (uint32_t)task)) = 0x1UL;
- }
- __STATIC_INLINE uint32_t nrf_saadc_task_address_get(nrf_saadc_task_t task)
- {
- return (uint32_t)((uint8_t *)NRF_SAADC + (uint32_t)task);
- }
- __STATIC_INLINE bool nrf_saadc_event_check(nrf_saadc_event_t event)
- {
- return (bool)*(volatile uint32_t *)((uint8_t *)NRF_SAADC + (uint32_t)event);
- }
- __STATIC_INLINE void nrf_saadc_event_clear(nrf_saadc_event_t event)
- {
- *((volatile uint32_t *)((uint8_t *)NRF_SAADC + (uint32_t)event)) = 0x0UL;
- #if __CORTEX_M == 0x04
- volatile uint32_t dummy = *((volatile uint32_t *)((uint8_t *)NRF_SAADC + (uint32_t)event));
- (void)dummy;
- #endif
- }
- __STATIC_INLINE uint32_t nrf_saadc_event_address_get(nrf_saadc_event_t event)
- {
- return (uint32_t )((uint8_t *)NRF_SAADC + (uint32_t)event);
- }
- #if defined(DPPI_PRESENT)
- __STATIC_INLINE void nrf_saadc_subscribe_set(nrf_saadc_task_t task,
- uint8_t channel)
- {
- *((volatile uint32_t *) ((uint8_t *) NRF_SAADC + (uint32_t) task + 0x80uL)) =
- ((uint32_t)channel | SAADC_SUBSCRIBE_START_EN_Msk);
- }
- __STATIC_INLINE void nrf_saadc_subscribe_clear(nrf_saadc_task_t task)
- {
- *((volatile uint32_t *) ((uint8_t *) NRF_SAADC + (uint32_t) task + 0x80uL)) = 0;
- }
- __STATIC_INLINE void nrf_saadc_publish_set(nrf_saadc_event_t event,
- uint8_t channel)
- {
- *((volatile uint32_t *) ((uint8_t *) NRF_SAADC + (uint32_t) event + 0x80uL)) =
- ((uint32_t)channel | SAADC_PUBLISH_STARTED_EN_Msk);
- }
- __STATIC_INLINE void nrf_saadc_publish_clear(nrf_saadc_event_t event)
- {
- *((volatile uint32_t *) ((uint8_t *) NRF_SAADC + (uint32_t) event + 0x80uL)) = 0;
- }
- #endif
- __STATIC_INLINE volatile uint32_t * nrf_saadc_event_limit_address_get(uint8_t channel,
- nrf_saadc_limit_t limit_type)
- {
- NRFX_ASSERT(channel < NRF_SAADC_CHANNEL_COUNT);
- if (limit_type == NRF_SAADC_LIMIT_HIGH)
- {
- return &NRF_SAADC->EVENTS_CH[channel].LIMITH;
- }
- else
- {
- return &NRF_SAADC->EVENTS_CH[channel].LIMITL;
- }
- }
- __STATIC_INLINE nrf_saadc_event_t nrf_saadc_limit_event_get(uint8_t channel,
- nrf_saadc_limit_t limit_type)
- {
- if (limit_type == NRF_SAADC_LIMIT_HIGH)
- {
- return (nrf_saadc_event_t)( (uint32_t) NRF_SAADC_EVENT_CH0_LIMITH +
- (uint32_t) (NRF_SAADC_EVENT_CH1_LIMITH - NRF_SAADC_EVENT_CH0_LIMITH)
- * (uint32_t) channel );
- }
- else
- {
- return (nrf_saadc_event_t)( (uint32_t) NRF_SAADC_EVENT_CH0_LIMITL +
- (uint32_t) (NRF_SAADC_EVENT_CH1_LIMITL - NRF_SAADC_EVENT_CH0_LIMITL)
- * (uint32_t) channel );
- }
- }
- __STATIC_INLINE void nrf_saadc_channel_input_set(uint8_t channel,
- nrf_saadc_input_t pselp,
- nrf_saadc_input_t pseln)
- {
- NRF_SAADC->CH[channel].PSELN = pseln;
- NRF_SAADC->CH[channel].PSELP = pselp;
- }
- __STATIC_INLINE void nrf_saadc_channel_pos_input_set(uint8_t channel,
- nrf_saadc_input_t pselp)
- {
- NRF_SAADC->CH[channel].PSELP = pselp;
- }
- __STATIC_INLINE void nrf_saadc_channel_limits_set(uint8_t channel, int16_t low, int16_t high)
- {
- NRF_SAADC->CH[channel].LIMIT = (
- (((uint32_t) low << SAADC_CH_LIMIT_LOW_Pos) & SAADC_CH_LIMIT_LOW_Msk)
- | (((uint32_t) high << SAADC_CH_LIMIT_HIGH_Pos) & SAADC_CH_LIMIT_HIGH_Msk));
- }
- __STATIC_INLINE void nrf_saadc_int_set(uint32_t mask)
- {
- NRF_SAADC->INTEN = mask;
- }
- __STATIC_INLINE void nrf_saadc_int_enable(uint32_t saadc_int_mask)
- {
- NRF_SAADC->INTENSET = saadc_int_mask;
- }
- __STATIC_INLINE bool nrf_saadc_int_enable_check(uint32_t saadc_int_mask)
- {
- return (bool)(NRF_SAADC->INTENSET & saadc_int_mask);
- }
- __STATIC_INLINE void nrf_saadc_int_disable(uint32_t saadc_int_mask)
- {
- NRF_SAADC->INTENCLR = saadc_int_mask;
- }
- __STATIC_INLINE uint32_t nrf_saadc_limit_int_get(uint8_t channel, nrf_saadc_limit_t limit_type)
- {
- NRFX_ASSERT(channel < NRF_SAADC_CHANNEL_COUNT);
- uint32_t mask = (limit_type == NRF_SAADC_LIMIT_LOW) ?
- NRF_SAADC_INT_CH0LIMITL : NRF_SAADC_INT_CH0LIMITH;
- return mask << (channel * 2);
- }
- __STATIC_INLINE bool nrf_saadc_busy_check(void)
- {
-
-
- return NRF_SAADC->STATUS;
- }
- __STATIC_INLINE void nrf_saadc_enable(void)
- {
- NRF_SAADC->ENABLE = (SAADC_ENABLE_ENABLE_Enabled << SAADC_ENABLE_ENABLE_Pos);
- }
- __STATIC_INLINE void nrf_saadc_disable(void)
- {
- NRF_SAADC->ENABLE = (SAADC_ENABLE_ENABLE_Disabled << SAADC_ENABLE_ENABLE_Pos);
- }
- __STATIC_INLINE bool nrf_saadc_enable_check(void)
- {
-
- return NRF_SAADC->ENABLE;
- }
- __STATIC_INLINE void nrf_saadc_buffer_init(nrf_saadc_value_t * p_buffer,
- uint32_t size)
- {
- NRF_SAADC->RESULT.PTR = (uint32_t)p_buffer;
- NRF_SAADC->RESULT.MAXCNT = size;
- }
- __STATIC_INLINE void nrf_saadc_buffer_pointer_set(nrf_saadc_value_t * p_buffer)
- {
- NRF_SAADC->RESULT.PTR = (uint32_t)p_buffer;
- }
- __STATIC_INLINE nrf_saadc_value_t * nrf_saadc_buffer_pointer_get(void)
- {
- return (nrf_saadc_value_t *)NRF_SAADC->RESULT.PTR;
- }
- __STATIC_INLINE uint16_t nrf_saadc_amount_get(void)
- {
- return NRF_SAADC->RESULT.AMOUNT;
- }
- __STATIC_INLINE void nrf_saadc_resolution_set(nrf_saadc_resolution_t resolution)
- {
- NRF_SAADC->RESOLUTION = resolution;
- }
- __STATIC_INLINE nrf_saadc_resolution_t nrf_saadc_resolution_get(void)
- {
- return (nrf_saadc_resolution_t)NRF_SAADC->RESOLUTION;
- }
- __STATIC_INLINE uint32_t nrf_saadc_oversample_sample_count_get(nrf_saadc_oversample_t oversample)
- {
- return (1 << (uint32_t)oversample);
- }
- __STATIC_INLINE void nrf_saadc_oversample_set(nrf_saadc_oversample_t oversample)
- {
- NRF_SAADC->OVERSAMPLE = oversample;
- }
- __STATIC_INLINE nrf_saadc_oversample_t nrf_saadc_oversample_get(void)
- {
- return (nrf_saadc_oversample_t)NRF_SAADC->OVERSAMPLE;
- }
- __STATIC_INLINE void nrf_saadc_continuous_mode_enable(uint16_t cc)
- {
- NRFX_ASSERT((cc >= 80) && (cc <= 2047));
- NRF_SAADC->SAMPLERATE = (SAADC_SAMPLERATE_MODE_Timers << SAADC_SAMPLERATE_MODE_Pos)
- | ((uint32_t)cc << SAADC_SAMPLERATE_CC_Pos);
- }
- __STATIC_INLINE bool nrf_saadc_continuous_mode_enable_check(void)
- {
- return (bool)((NRF_SAADC->SAMPLERATE & SAADC_SAMPLERATE_MODE_Msk)
- == (SAADC_SAMPLERATE_MODE_Timers << SAADC_SAMPLERATE_MODE_Pos));
- }
- __STATIC_INLINE void nrf_saadc_continuous_mode_disable(void)
- {
- NRF_SAADC->SAMPLERATE = SAADC_SAMPLERATE_MODE_Task << SAADC_SAMPLERATE_MODE_Pos;
- }
- __STATIC_INLINE void nrf_saadc_channel_init(uint8_t channel,
- nrf_saadc_channel_config_t const * const config)
- {
- NRF_SAADC->CH[channel].CONFIG =
- ((config->resistor_p << SAADC_CH_CONFIG_RESP_Pos) & SAADC_CH_CONFIG_RESP_Msk)
- | ((config->resistor_n << SAADC_CH_CONFIG_RESN_Pos) & SAADC_CH_CONFIG_RESN_Msk)
- | ((config->gain << SAADC_CH_CONFIG_GAIN_Pos) & SAADC_CH_CONFIG_GAIN_Msk)
- | ((config->reference << SAADC_CH_CONFIG_REFSEL_Pos) & SAADC_CH_CONFIG_REFSEL_Msk)
- | ((config->acq_time << SAADC_CH_CONFIG_TACQ_Pos) & SAADC_CH_CONFIG_TACQ_Msk)
- | ((config->mode << SAADC_CH_CONFIG_MODE_Pos) & SAADC_CH_CONFIG_MODE_Msk)
- | ((config->burst << SAADC_CH_CONFIG_BURST_Pos) & SAADC_CH_CONFIG_BURST_Msk);
- nrf_saadc_channel_input_set(channel, config->pin_p, config->pin_n);
- }
- __STATIC_INLINE void nrf_saadc_burst_set(uint8_t channel,
- nrf_saadc_burst_t burst)
- {
- NRF_SAADC->CH[channel].CONFIG =
- (NRF_SAADC->CH[channel].CONFIG & ~SAADC_CH_CONFIG_BURST_Msk) |
- (burst << SAADC_CH_CONFIG_BURST_Pos);
- }
- __STATIC_INLINE nrf_saadc_value_t nrf_saadc_value_min_get(nrf_saadc_resolution_t resolution)
- {
- uint8_t res_bits = 0;
- switch (resolution)
- {
- case NRF_SAADC_RESOLUTION_8BIT:
- res_bits = 8;
- break;
- case NRF_SAADC_RESOLUTION_10BIT:
- res_bits = 10;
- break;
- case NRF_SAADC_RESOLUTION_12BIT:
- res_bits = 12;
- break;
- case NRF_SAADC_RESOLUTION_14BIT:
- res_bits = 14;
- break;
- default:
- NRFX_ASSERT(false);
- }
- return (nrf_saadc_value_t)(-(1 << res_bits));
- }
- __STATIC_INLINE nrf_saadc_value_t nrf_saadc_value_max_get(nrf_saadc_resolution_t resolution)
- {
- uint8_t res_bits = 0;
- switch (resolution)
- {
- case NRF_SAADC_RESOLUTION_8BIT:
- res_bits = 8;
- break;
- case NRF_SAADC_RESOLUTION_10BIT:
- res_bits = 10;
- break;
- case NRF_SAADC_RESOLUTION_12BIT:
- res_bits = 12;
- break;
- case NRF_SAADC_RESOLUTION_14BIT:
- res_bits = 14;
- break;
- default:
- NRFX_ASSERT(false);
- }
- return (nrf_saadc_value_t)((1 << res_bits) - 1);
- }
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif
|