3.3.1 SAFE_PLIB_ADC

Set of safe functions for setting up and controlling the ADC peripheral.

#define ADC_STATUS_NONE 0U
#define ADC_STATUS_RESRDY ADC_INTFLAG_RESRDY_Msk
#define ADC_STATUS_WINMON ADC_INTFLAG_WINMON_Msk
#define ADC_STATUS_MASK (ADC_STATUS_RESRDY | ADC_STATUS_OVERRUN | ADC_STATUS_WINMON)
#define ADC_STATUS_INVALID 0xFFFFFFFFU

#define ADC_TIMEOUT                                     (10000)
#define ADC_ERROR_CALLBACK_NOT_REGISTERED               (0x1U)
#define ADC_ERROR_INVALID_PARAMETER                     (0x2U)
#define ADC_ERROR_TIMEOUT                               (0x3U)

/* The following data type definitions are used by the functions in this
    interface and should be considered part it.
*/

typedef enum
{
    ADC_POSINPUT_AIN0 = ADC_INPUTCTRL_MUXPOS_AIN0,
    ADC_POSINPUT_AIN1 = ADC_INPUTCTRL_MUXPOS_AIN1,
    ADC_POSINPUT_AIN2 = ADC_INPUTCTRL_MUXPOS_AIN2,
    ADC_POSINPUT_AIN3 = ADC_INPUTCTRL_MUXPOS_AIN3,
    ADC_POSINPUT_AIN4 = ADC_INPUTCTRL_MUXPOS_AIN4,
    ADC_POSINPUT_AIN5 = ADC_INPUTCTRL_MUXPOS_AIN5,
    ADC_POSINPUT_AIN6 = ADC_INPUTCTRL_MUXPOS_AIN6,
    ADC_POSINPUT_AIN7 = ADC_INPUTCTRL_MUXPOS_AIN7,
    ADC_POSINPUT_AIN8 = ADC_INPUTCTRL_MUXPOS_AIN8,
    ADC_POSINPUT_AIN9 = ADC_INPUTCTRL_MUXPOS_AIN9,
    ADC_POSINPUT_AIN10 = ADC_INPUTCTRL_MUXPOS_AIN10,
    ADC_POSINPUT_AIN11 = ADC_INPUTCTRL_MUXPOS_AIN11,
    ADC_POSINPUT_BANDGAP = ADC_INPUTCTRL_MUXPOS_BANDGAP,
    ADC_POSINPUT_SCALEDCOREVCC = ADC_INPUTCTRL_MUXPOS_SCALEDCOREVCC,
    ADC_POSINPUT_SCALEDIOVCC = ADC_INPUTCTRL_MUXPOS_SCALEDIOVCC,
    ADC_POSINPUT_DAC = ADC_INPUTCTRL_MUXPOS_DAC,
}ADC_POSINPUT;

// *****************************************************************************

typedef enum
{
    ADC_NEGINPUT_AIN0 = ADC_INPUTCTRL_MUXNEG_AIN0,
    ADC_NEGINPUT_AIN1 = ADC_INPUTCTRL_MUXNEG_AIN1,
    ADC_NEGINPUT_AIN2 = ADC_INPUTCTRL_MUXNEG_AIN2,
    ADC_NEGINPUT_AIN3 = ADC_INPUTCTRL_MUXNEG_AIN3,
    ADC_NEGINPUT_AIN4 = ADC_INPUTCTRL_MUXNEG_AIN4,
    ADC_NEGINPUT_AIN5 = ADC_INPUTCTRL_MUXNEG_AIN5,
    ADC_NEGINPUT_GND = ADC_INPUTCTRL_MUXNEG_GND,
}ADC_NEGINPUT;

typedef uint32_t ADC_STATUS;
typedef enum
{
    ADC_WINMODE_DISABLED = ADC_CTRLC_WINMODE_DISABLE_Val,
    ADC_WINMODE_GREATER_THAN_WINLT = ADC_CTRLC_WINMODE_MODE1_Val,
    ADC_WINMODE_LESS_THAN_WINUT = ADC_CTRLC_WINMODE_MODE2_Val,
    ADC_WINMODE_BETWEEN_WINLT_AND_WINUT = ADC_CTRLC_WINMODE_MODE3_Val,
    ADC_WINMODE_OUTSIDE_WINLT_AND_WINUT = ADC_CTRLC_WINMODE_MODE4_Val
}ADC_WINMODE;

typedef void (*ADC_CALLBACK)(ADC_STATUS status, uintptr_t context);


typedef struct
{
    ADC_CALLBACK callback;

    uintptr_t context;

} ADC_CALLBACK_OBJ;