Workflow

  1. 1.
    Create an AC device instance struct, which will be associated with an Analog Comparator peripheral hardware instance.
    static struct ac_module ac_instance;
    
    Note: Device instance structures shall never go out of scope when in use.
  2. 2.
    Define a macro to select the comparator channel that will be sampled, for convenience.
    #define AC_COMPARATOR_CHANNEL   AC_CHAN_CHANNEL_0
    
  3. 3.
    Create a new function configure_ac(), which will be used to configure the overall Analog Comparator peripheral.
    void configure_ac(void)
    
  4. 4.
    Create an Analog Comparator peripheral configuration structure that will be filled out to set the module configuration.
    struct ac_config config_ac;
    
  5. 5.
    Fill the Analog Comparator peripheral configuration structure with the default module configuration values.
    ac_get_config_defaults(&config_ac);
    
  6. 6.
    Initialize the Analog Comparator peripheral and associate it with the software instance structure that was defined previously.
    ac_init(&ac_instance, AC, &config_ac);
    
  7. 7.
    Create a new function configure_ac_channel(), which will be used to configure the overall Analog Comparator peripheral.
    void configure_ac_channel(void)
    
  8. 8.
    Create an Analog Comparator channel configuration structure that will be filled out to set the channel configuration.
    struct ac_chan_config ac_chan_conf;
    
  9. 9.
    Fill the Analog Comparator channel configuration structure with the default channel configuration values.
    ac_chan_get_config_defaults(&ac_chan_conf);
    
  10. 10.
    Alter the channel configuration parameters to set the channel to one-shot mode, with the correct negative and positive MUX selections and the desired voltage scaler.
    ac_chan_conf.sample_mode      = AC_CHAN_MODE_SINGLE_SHOT;
    ac_chan_conf.positive_input   = AC_CHAN_POS_MUX_PIN0;
    ac_chan_conf.negative_input   = AC_CHAN_NEG_MUX_SCALED_VCC;
    ac_chan_conf.vcc_scale_factor = 32;
    
    Note: The voltage scalar formula is documented in description for ac_chan_config::vcc_scale_factor.
  11. 11.
    Configure the physical pin that will be routed to the AC module channel 0.
    struct system_pinmux_config ac0_pin_conf;
    system_pinmux_get_config_defaults(&ac0_pin_conf);
    ac0_pin_conf.direction    = SYSTEM_PINMUX_PIN_DIR_INPUT;
    ac0_pin_conf.mux_position = CONF_AC_MUX;
    system_pinmux_pin_set_config(CONF_AC_PIN, &ac0_pin_conf);
    
  12. 12.
    Initialize the Analog Comparator channel and configure it with the desired settings.
    ac_chan_set_config(&ac_instance, AC_COMPARATOR_CHANNEL, &ac_chan_conf);
    
  13. 13.
    Enable the now initialized Analog Comparator channel.
    ac_chan_enable(&ac_instance, AC_COMPARATOR_CHANNEL);
    
  14. 14.
    Enable the now initialized Analog Comparator peripheral.
    ac_enable(&ac_instance);