KL25Z Comparator library

Dependents:   ComparatorIn_demo TEMT6200_demo 05_comparator_demo 05_comparator_demo ... more

KL25Z Comparator library

Comparator features

  • Operational over the entire supply range
  • Inputs may range from rail to rail
  • Programmable hysteresis control
  • Selectable interrupt on rising-edge, falling-edge, or both rising or falling edges of the comparator output
  • Selectable inversion on comparator output
  • Capability to produce a wide range of outputs such as:
    • Sampled
    • Windowed, which is ideal for certain PWM zero-crossing-detection applications
    • Digitally filtered:
      • Filter can be bypassed
      • Can be clocked via external SAMPLE signal or scaled bus clock
  • External hysteresis can be used at the same time that the output filter is used for internal functions
  • Two software selectable performance levels:
    • Shorter propagation delay at the expense of higher power
    • Low power, with longer propagation delay
  • DMA transfer support not yet implemented in this library
    • A comparison event can be selected to trigger a DMA transfer
  • Functional in all modes of operation
  • The window and filter functions are not available in the following modes:
    • Stop
    • VLPS
    • LLS
    • VLLSx

Block diagram

/media/uploads/frankvnk/kl25z_comparator_block_diagram.jpg

Introduction

This library allows us to create comparator objects between different inputs.
The comparator + and - inputs can be routed to one out of eight reference inputs (see table).
Input selection

Pin name#MUX inputCMP0Comment
PTC6000IN0CMP0_IN0
PTC7001IN1CMP0_IN1
PTC8010IN2CMP0_IN2
PTC9011IN3CMP0_IN3
PTE30100IN4CMP0_IN412-bit DAC0
PTE29101IN5CMP0_IN5
110IN61V internal Bandgap*
NC111IN7internal 6-bit DAC0
(table 1)

* Not yet implemented

Using the library

Selecting pins on initialisation
Upon initialisation, the comparator registers are set to following values:

    CMP0->CR0   = 0x00;  // Filter and digital hysteresis disabled
    CMP0->CR1   = 0x17;  // Continuous mode, high-speed compare, unfiltered output, output pin disabled
    CMP0->FPR   = 0x00;  // Filter disabled
    CMP0->SCR   = 0x06;  // Disable all interrupts and clear flags (flags are cleared by this write)
    CMP0->DACCR = 0xE0;  // DAC enabled, Vdd is 6bit reference, threshold set to 1/2 of full-scale (1.65V)

The library accepts two input parameters:
example:

ComparatorIn compi(PTC8, NC);
  • First parameter : + input pin.
  • Second parameter : - input pin.
    Every pin from the 'Pin name' column in (table 1) can be selected.

notes

  • IN6 (internal 1V bandgap reference) has no pin name and is not selectable on init.
    However, we can use the SwitchPlus and SwitchMin functions to change the corresponding input to IN6.
  • There are two special cases for the input parameters:
    • NC : Connect the internal 6-bit DAC0 to IN7.
    • PTE30 : configures PTE30 as 12-bit DAC0 output and connect to IN4.
      IMPORTANT: Make sure no external output is connected to PTE30 when you declare this pin, otherwise you WILL destroy the external device and/or the CPU.

Example
Following code demonstrates interrupt callback and polling mode.
Note: Polling the comparator this way won't always trigger the printf because of the wait() instructions (if we go above and below the threshold during the wait() time, then the polling cannot not see this change).

/***********************************************************
CODE EXAMPLE FOR AMBIENT LIGHT SENSOR ON KL25Z + Wi-Go BOARD
 ***********************************************************/
#include "ComparatorIn.h"
#include "mbed.h"

DigitalOut blinker(LED_BLUE);
DigitalOut cmpled(LED_GREEN);
DigitalOut cmp_en (PTD5);
AnalogIn cmp_lvl (PTB0);
ComparatorIn compi(PTC8, NC); // in+ = PTC8, in- = internal 6-bit DAC 

// Comparator callback functions
void cmp_rise_ISR(void)
{
    cmpled = 0;
}

void cmp_fall_ISR(void)
{
    cmpled = 1;
}

int main()
{
    cmp_en = 1;
    cmpled = 1;

    compi.rising(&cmp_rise_ISR);                // Set pointer to rising interrupt function
    compi.falling(&cmp_fall_ISR);               // Set pointer to falling interrupt function
    compi.treshold(0.5);                        // Set comparator threshold to 1.65V = 32 * 3.3V / 64

    while(1)
    {
        printf("Light sensor : %7.5f Volt\n",cmp_lvl*3.3);
        blinker = 1;
        wait(1);
        blinker = 0;
        wait(0.2);
        if (compi.status() == 0x01)
        {
            printf("*** Treshold reached : %7.5f\n",cmp_lvl*3.3);
        }
    }
}


Notes

  • When we enable the comparator interrupt, we need to declare user callback function(s) (rising and/or falling interrupt) AND initialise the function pointer(s).
    example:

compi.rising(&cmp_rise_ISR);
compi.falling(&cmp_fall_ISR);
  • Currently, following functions are not yet implemented:
    • On the fly MUX switching for + input (SwitchPlus function).
    • On the fly MUX switching for - input (SwitchMin function).
    • DMA transfer.
Committer:
frankvnk
Date:
Sun Jun 16 15:11:48 2013 +0000
Revision:
15:f340e0545b53
Parent:
14:875486333dc2
Child:
16:18170968fdc3
added 12-bit DAC selection

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 1:ccac56d8f1cb 1 /**************************************************************************************************
frankvnk 1:ccac56d8f1cb 2 ***** *****
frankvnk 1:ccac56d8f1cb 3 ***** Name: ComparatorIn.h *****
frankvnk 1:ccac56d8f1cb 4 ***** Date: 05/06/2013 *****
frankvnk 1:ccac56d8f1cb 5 ***** Auth: Frank Vannieuwkerke *****
frankvnk 1:ccac56d8f1cb 6 ***** Func: library for KL25Z Comparator *****
frankvnk 1:ccac56d8f1cb 7 ***** *****
frankvnk 1:ccac56d8f1cb 8 **************************************************************************************************/
frankvnk 1:ccac56d8f1cb 9
frankvnk 0:e742ad3d7dac 10 #ifndef COMPARATORIN_H
frankvnk 0:e742ad3d7dac 11 #define COMPARATORIN_H
frankvnk 0:e742ad3d7dac 12
frankvnk 0:e742ad3d7dac 13 /*
frankvnk 0:e742ad3d7dac 14 * Includes
frankvnk 0:e742ad3d7dac 15 */
frankvnk 0:e742ad3d7dac 16 #include "mbed.h"
frankvnk 0:e742ad3d7dac 17 #include "pinmap.h"
frankvnk 0:e742ad3d7dac 18
frankvnk 0:e742ad3d7dac 19 #ifndef TARGET_KL25Z
frankvnk 0:e742ad3d7dac 20 #error "Target not supported"
frankvnk 0:e742ad3d7dac 21 #endif
frankvnk 0:e742ad3d7dac 22
frankvnk 0:e742ad3d7dac 23 /** ComparatorIn library
frankvnk 0:e742ad3d7dac 24 *
frankvnk 0:e742ad3d7dac 25 * INP/INM connection selection :
frankvnk 0:e742ad3d7dac 26 * PTC6 (IN0) CMP0_IN0
frankvnk 0:e742ad3d7dac 27 * PTC7 (IN1) CMP0_IN1
frankvnk 0:e742ad3d7dac 28 * PTC8 (IN2) CMP0_IN2
frankvnk 0:e742ad3d7dac 29 * PTC9 (IN3) CMP0_IN3
frankvnk 0:e742ad3d7dac 30 * PTE30 (IN4) CMP0_IN4
frankvnk 0:e742ad3d7dac 31 * PTE29 (IN5) CMP0_IN5
frankvnk 0:e742ad3d7dac 32 * Internal 6-bit DAC reference voltage = VDD (3.3V)
frankvnk 0:e742ad3d7dac 33 * Hysteresis, filter count and sample period will be initialised to these values when calling ComparatorIn:
frankvnk 0:e742ad3d7dac 34 * CMP0->CR0 = 0x00; Filter and digital hysteresis disabled
frankvnk 0:e742ad3d7dac 35 * CMP0->CR1 = 0x17; // Continuous mode, high-speed compare, unfiltered output, output pin disabled
frankvnk 0:e742ad3d7dac 36 * CMP0->FPR = 0x00; // Filter disabled
frankvnk 13:2d499824ba05 37 * CMP0->SCR = 0x06; // Disable all interrupts and clear flags (flags are cleared by this write)
frankvnk 0:e742ad3d7dac 38 * CMP0->DACCR = 0xC4; // DAC enabled, Vdd is 6bit reference, threshold set to 1/16 of full-scale (0.2V)
frankvnk 0:e742ad3d7dac 39 */
frankvnk 0:e742ad3d7dac 40
frankvnk 13:2d499824ba05 41 #define DISABLE 0
frankvnk 13:2d499824ba05 42 #define RISING 1
frankvnk 13:2d499824ba05 43 #define FALLING 2
frankvnk 13:2d499824ba05 44 #define BOTH 3
frankvnk 13:2d499824ba05 45
frankvnk 0:e742ad3d7dac 46 typedef enum {
frankvnk 0:e742ad3d7dac 47 CMP0_IN0 = 0,
frankvnk 0:e742ad3d7dac 48 CMP0_IN1 = 1,
frankvnk 0:e742ad3d7dac 49 CMP0_IN2 = 2,
frankvnk 0:e742ad3d7dac 50 CMP0_IN3 = 3,
frankvnk 0:e742ad3d7dac 51 CMP0_IN4 = 4,
frankvnk 0:e742ad3d7dac 52 CMP0_IN5 = 5,
frankvnk 0:e742ad3d7dac 53 } CMPName;
frankvnk 0:e742ad3d7dac 54
frankvnk 2:43fd96e8687d 55 /** Class to use KL25Z Comparator
frankvnk 2:43fd96e8687d 56 */
frankvnk 0:e742ad3d7dac 57 class ComparatorIn {
frankvnk 0:e742ad3d7dac 58
frankvnk 0:e742ad3d7dac 59 public:
frankvnk 0:e742ad3d7dac 60
frankvnk 0:e742ad3d7dac 61 /** Create a ComparatorIn, connected to the specified pins
frankvnk 0:e742ad3d7dac 62 *
frankvnk 0:e742ad3d7dac 63 * @param pinP = positive ComparatorIn pin to connect to
frankvnk 0:e742ad3d7dac 64 * @param pinM = negative ComparatorIn pin to connect to
frankvnk 4:f66aa1098df9 65 * @param . Valid values for pinP/pinM : PTC6, PTC7, PTC8, PTC9, PTE30, PTE29, NC
frankvnk 4:f66aa1098df9 66 * @param . When NC is specified, the corresponding input is connected to DAC0
frankvnk 0:e742ad3d7dac 67 * @return none
frankvnk 0:e742ad3d7dac 68 */
frankvnk 0:e742ad3d7dac 69 ComparatorIn(PinName pinP,PinName pinM);
frankvnk 0:e742ad3d7dac 70
frankvnk 0:e742ad3d7dac 71 /** Set the number of consecutive threshold samples
frankvnk 5:787a9f72600f 72 * @param . Represents the number of consecutive samples that must agree
frankvnk 5:787a9f72600f 73 * @param . prior to the comparator ouput filter accepting a new output state.
frankvnk 0:e742ad3d7dac 74 * @param input Unsigned char - range : 1..7
frankvnk 0:e742ad3d7dac 75 * @return none
frankvnk 0:e742ad3d7dac 76 */
frankvnk 12:0a0648bddb98 77 void filter_count(unsigned char fico);
frankvnk 0:e742ad3d7dac 78
frankvnk 0:e742ad3d7dac 79 /** Set the hysteresis
frankvnk 0:e742ad3d7dac 80 *
frankvnk 0:e742ad3d7dac 81 * @param input Unsigned char
frankvnk 5:787a9f72600f 82 * @param . hysteresis
frankvnk 5:787a9f72600f 83 * @param . 00 5mV
frankvnk 5:787a9f72600f 84 * @param . 01 10mV
frankvnk 5:787a9f72600f 85 * @param . 10 20mV
frankvnk 5:787a9f72600f 86 * @param . 11 30mV
frankvnk 0:e742ad3d7dac 87 * @return none
frankvnk 0:e742ad3d7dac 88 */
frankvnk 12:0a0648bddb98 89 void hysteresis(unsigned char hyst);
frankvnk 0:e742ad3d7dac 90
frankvnk 0:e742ad3d7dac 91 /** Enable sampling mode
frankvnk 4:f66aa1098df9 92 * @param . Cannot be set when windowing mode is enabled
frankvnk 0:e742ad3d7dac 93 * @param input Unsigned char (0 or 1)
frankvnk 0:e742ad3d7dac 94 * @return none
frankvnk 0:e742ad3d7dac 95 */
frankvnk 12:0a0648bddb98 96 void sample_mode(unsigned char samp_en);
frankvnk 0:e742ad3d7dac 97
frankvnk 0:e742ad3d7dac 98 /** Enable windowing mode
frankvnk 4:f66aa1098df9 99 * @param . Cannot be set when sampling mode is enabled
frankvnk 0:e742ad3d7dac 100 * @param input Unsigned char (0 or 1)
frankvnk 0:e742ad3d7dac 101 * @return none
frankvnk 0:e742ad3d7dac 102 */
frankvnk 12:0a0648bddb98 103 void window_mode(unsigned char win_en);
frankvnk 0:e742ad3d7dac 104
frankvnk 0:e742ad3d7dac 105 /** Enable trigger mode
frankvnk 4:f66aa1098df9 106 * @param . CMP and DAC are configured to CMP Trigger mode when CMP_CR1[TRIGM] is set to 1.
frankvnk 4:f66aa1098df9 107 * @param . In addition, the CMP should be enabled. If the DAC is to be used as a reference
frankvnk 4:f66aa1098df9 108 * @param . to the CMP, it should also be enabled.
frankvnk 4:f66aa1098df9 109 * @param . CMP Trigger mode depends on an external timer resource to periodically enable the
frankvnk 4:f66aa1098df9 110 * @param . CMP and 6-bit DAC in order to generate a triggered compare. Upon setting TRIGM,
frankvnk 4:f66aa1098df9 111 * @param . the CMP and DAC are placed in a standby state until an external timer resource
frankvnk 4:f66aa1098df9 112 * @param . trigger is received.
frankvnk 0:e742ad3d7dac 113 * @param input Unsigned char (0 or 1)
frankvnk 0:e742ad3d7dac 114 * @return none
frankvnk 0:e742ad3d7dac 115 */
frankvnk 12:0a0648bddb98 116 void trig_mode(unsigned char trig_en);
frankvnk 0:e742ad3d7dac 117
frankvnk 0:e742ad3d7dac 118 /** Set the power mode
frankvnk 4:f66aa1098df9 119 * @param . 0 Low-Speed (LS) Comparison mode selected. In this mode, CMP has
frankvnk 4:f66aa1098df9 120 * @param . slower output propagation delay and lower current consumption.
frankvnk 4:f66aa1098df9 121 * @param . 1 High-Speed (HS) Comparison mode selected. In this mode, CMP has
frankvnk 4:f66aa1098df9 122 * @param . faster output propagation delay and higher current consumption.
frankvnk 0:e742ad3d7dac 123 * @param input Unsigned char - 0 or 1
frankvnk 0:e742ad3d7dac 124 * @return none
frankvnk 0:e742ad3d7dac 125 */
frankvnk 12:0a0648bddb98 126 void power_mode(unsigned char pmode);
frankvnk 0:e742ad3d7dac 127
frankvnk 0:e742ad3d7dac 128 /** Set invert mode
frankvnk 4:f66aa1098df9 129 * @param . Allows selection of the polarity of the analog comparator function.
frankvnk 4:f66aa1098df9 130 * @param . It is also driven to the COUT output, on both the device pin and as SCR[COUT], when OPE=0.
frankvnk 4:f66aa1098df9 131 * @param . 0 Does not invert the comparator output.
frankvnk 4:f66aa1098df9 132 * @param . 1 Inverts the comparator output.
frankvnk 0:e742ad3d7dac 133 * @param input Unsigned char - 0 or 1
frankvnk 0:e742ad3d7dac 134 * @return none
frankvnk 0:e742ad3d7dac 135 */
frankvnk 12:0a0648bddb98 136 void invert(unsigned char inv);
frankvnk 0:e742ad3d7dac 137
frankvnk 0:e742ad3d7dac 138 /** Comparator Output Select
frankvnk 4:f66aa1098df9 139 * @param . 0 Set the filtered comparator output (CMPO) to equal COUT.
frankvnk 4:f66aa1098df9 140 * @param . 1 Set the unfiltered comparator output (CMPO) to equal COUTA.
frankvnk 0:e742ad3d7dac 141 * @param input Unsigned char - 0 or 1
frankvnk 0:e742ad3d7dac 142 * @return none
frankvnk 0:e742ad3d7dac 143 */
frankvnk 12:0a0648bddb98 144 void output_select(unsigned char cos);
frankvnk 0:e742ad3d7dac 145
frankvnk 12:0a0648bddb98 146 /** Connect the comparator Output Pin to an external pin
frankvnk 12:0a0648bddb98 147 * @param input NC disconnect CMPO from the associated CMPO output pin.
frankvnk 12:0a0648bddb98 148 * @param input PTC0 connect CMPO to PTC0.
frankvnk 12:0a0648bddb98 149 * @param input PTC5 connect CMPO to PTC5.
frankvnk 12:0a0648bddb98 150 * @param input PTE0 connect CMPO to PTE0.
frankvnk 12:0a0648bddb98 151 * @param . Only one pin can be connected at any time.
frankvnk 12:0a0648bddb98 152 * @param . Each time this function is called, the last pin will be disabled before the new pin is enabled
frankvnk 0:e742ad3d7dac 153 */
frankvnk 12:0a0648bddb98 154 void output_pin_en(PinName ope);
frankvnk 0:e742ad3d7dac 155
frankvnk 0:e742ad3d7dac 156 /** Comparator Module Enable
frankvnk 4:f66aa1098df9 157 * @param . Enables the Analog Comparator module. When the module is not enabled,
frankvnk 4:f66aa1098df9 158 * @param . it remains in the off state, and consumes no power. When the user
frankvnk 4:f66aa1098df9 159 * @param . selects the same input from analog mux to the positive and negative
frankvnk 4:f66aa1098df9 160 * @param . port, the comparator is disabled automatically.
frankvnk 4:f66aa1098df9 161 * @param . 0 Analog Comparator is disabled.
frankvnk 4:f66aa1098df9 162 * @param . 1 Analog Comparator is enabled.
frankvnk 0:e742ad3d7dac 163 * @param input Unsigned char - 0 or 1
frankvnk 0:e742ad3d7dac 164 * @return none
frankvnk 0:e742ad3d7dac 165 */
frankvnk 12:0a0648bddb98 166 void enable(unsigned char en);
frankvnk 0:e742ad3d7dac 167
frankvnk 0:e742ad3d7dac 168 /** Set the filter sample period
frankvnk 4:f66aa1098df9 169 * @param . Specifies the sampling period, in bus clock cycles, of the comparator
frankvnk 4:f66aa1098df9 170 * @param . output filter, when CR1[SE]=0. Setting FILT_PER to 0x0 disables the filter.
frankvnk 0:e742ad3d7dac 171 * @param input Unsigned char - range : 0..255
frankvnk 0:e742ad3d7dac 172 * @return none
frankvnk 0:e742ad3d7dac 173 */
frankvnk 12:0a0648bddb98 174 void filter_period(unsigned char fipe);
frankvnk 0:e742ad3d7dac 175
frankvnk 0:e742ad3d7dac 176 /** DMA Enable Control
frankvnk 4:f66aa1098df9 177 * @param . Enables the DMA transfer triggered from the CMP module. When this field is set,
frankvnk 4:f66aa1098df9 178 * @param . a DMA request is asserted when CFR or CFF is set.
frankvnk 4:f66aa1098df9 179 * @param . 0 DMA is disabled.
frankvnk 4:f66aa1098df9 180 * @param . 1 DMA is enabled.
frankvnk 0:e742ad3d7dac 181 * @param input Unsigned char - 0 or 1
frankvnk 0:e742ad3d7dac 182 * @return none
frankvnk 0:e742ad3d7dac 183 */
frankvnk 12:0a0648bddb98 184 void dma_en(unsigned char dmaen);
frankvnk 0:e742ad3d7dac 185
frankvnk 0:e742ad3d7dac 186 /** Analog Comparator Output
frankvnk 0:e742ad3d7dac 187 * @param none
frankvnk 5:787a9f72600f 188 * @return . Returns the current value of the Analog Comparator output, when read.
frankvnk 5:787a9f72600f 189 * @return . The field is reset to 0 and will read as CR1[INV] when the Analog Comparator
frankvnk 5:787a9f72600f 190 * @return . module is disabled, that is, when CR1[EN] = 0. Writes to this field are ignored.
frankvnk 5:787a9f72600f 191 * @return comparator status (unsigned char)
frankvnk 0:e742ad3d7dac 192 */
frankvnk 0:e742ad3d7dac 193 unsigned char status(void);
frankvnk 0:e742ad3d7dac 194
frankvnk 0:e742ad3d7dac 195 /** DAC Enable
frankvnk 4:f66aa1098df9 196 * @param . Enables the DAC. When the DAC is disabled, it is powered down to conserve power.
frankvnk 4:f66aa1098df9 197 * @param . 0 DAC is disabled.
frankvnk 4:f66aa1098df9 198 * @param . 1 DAC is enabled.
frankvnk 0:e742ad3d7dac 199 * @param input Unsigned char - 0 or 1
frankvnk 0:e742ad3d7dac 200 * @return none
frankvnk 0:e742ad3d7dac 201 */
frankvnk 12:0a0648bddb98 202 void dac_en(unsigned char den);
frankvnk 0:e742ad3d7dac 203
frankvnk 0:e742ad3d7dac 204 /** Supply Voltage Reference Source Select
frankvnk 4:f66aa1098df9 205 * @param . 0 - V is selected as resistor ladder network supply reference Vin1 = VREFH
frankvnk 4:f66aa1098df9 206 * @param . 1 - V is selected as resistor ladder network supply reference Vin2 = VDD
frankvnk 4:f66aa1098df9 207 * @param . (Use this option for the best ADC operation)
frankvnk 0:e742ad3d7dac 208 * @param input Unsigned char - 0 or 1
frankvnk 0:e742ad3d7dac 209 * @return none
frankvnk 0:e742ad3d7dac 210 */
frankvnk 12:0a0648bddb98 211 void ref_source(unsigned char res);
frankvnk 0:e742ad3d7dac 212
frankvnk 15:f340e0545b53 213 /** Set the detection threshold level - DAC Output Voltage Select
frankvnk 13:2d499824ba05 214 * @param input float - range 0.0 .. 1.0
frankvnk 15:f340e0545b53 215 * Sets The 6-bit or 12-bit DAC output voltage, depending on which DAC is selected on init.
frankvnk 15:f340e0545b53 216 * 6-bit DACO range is from Vin/64 to Vin .
frankvnk 15:f340e0545b53 217 * 12-bit DACO range is from Vin/4096 to Vin .
frankvnk 0:e742ad3d7dac 218 * @return none
frankvnk 0:e742ad3d7dac 219 */
frankvnk 13:2d499824ba05 220 void treshold(float vo_pct);
frankvnk 0:e742ad3d7dac 221
frankvnk 0:e742ad3d7dac 222 /** Pass Through Mode Enable
frankvnk 4:f66aa1098df9 223 * @param . This bit is used to enable to MUX pass through mode. Pass through mode is always available
frankvnk 4:f66aa1098df9 224 * @param . but for some devices this feature must be always disabled due to the lack of package pins.
frankvnk 4:f66aa1098df9 225 * @param . 0 Pass Through Mode is disabled.
frankvnk 4:f66aa1098df9 226 * @param . 1 Pass Through Mode is enabled.
frankvnk 0:e742ad3d7dac 227 * @param input Unsigned char - 0 or 1
frankvnk 0:e742ad3d7dac 228 * @return none
frankvnk 0:e742ad3d7dac 229 */
frankvnk 12:0a0648bddb98 230 void pass_through(unsigned char ptm);
frankvnk 0:e742ad3d7dac 231
frankvnk 0:e742ad3d7dac 232 /** Plus Input Mux Control
frankvnk 4:f66aa1098df9 233 * @param . Determines which input is selected for the plus input of the comparator.
frankvnk 4:f66aa1098df9 234 * @param . For INx inputs, see CMP, DAC, and ANMUX block diagrams.
frankvnk 4:f66aa1098df9 235 * @param . NOTE: When an inappropriate operation selects the same input for both muxes, the comparator
frankvnk 4:f66aa1098df9 236 * @param . automatically shuts down to prevent itself from becoming a noise generator.
frankvnk 4:f66aa1098df9 237 * @param . 000 IN0 PTC6 CMP0_IN0
frankvnk 4:f66aa1098df9 238 * @param . 001 IN1 PTC7 CMP0_IN1
frankvnk 4:f66aa1098df9 239 * @param . 010 IN2 PTC8 CMP0_IN2
frankvnk 4:f66aa1098df9 240 * @param . 011 IN3 PTC9 CMP0_IN3
frankvnk 4:f66aa1098df9 241 * @param . 100 IN4 PTE30 CMP0_IN4
frankvnk 4:f66aa1098df9 242 * @param . 101 IN5 PTE29 CMP0_IN5
frankvnk 4:f66aa1098df9 243 * @param . 110 IN6 - Bandgap reference (1V)
frankvnk 4:f66aa1098df9 244 * @param . 111 IN7 - Internal 6-bit DAC0
frankvnk 0:e742ad3d7dac 245 *
frankvnk 4:f66aa1098df9 246 * @param . NOTE : When using the PMC bandgap 1V reference voltage as CMP input, ensure that
frankvnk 4:f66aa1098df9 247 * @param . you enable the bandgap buffer by setting the PMC_REGSC[BGBE] bit.
frankvnk 0:e742ad3d7dac 248 *
frankvnk 0:e742ad3d7dac 249 * @param input Unsigned char - range 0..7
frankvnk 0:e742ad3d7dac 250 * @return none
frankvnk 0:e742ad3d7dac 251 */
frankvnk 0:e742ad3d7dac 252 void switch_plus(unsigned char pinP);
frankvnk 0:e742ad3d7dac 253
frankvnk 0:e742ad3d7dac 254 /** Minus Input Mux Control
frankvnk 4:f66aa1098df9 255 * @param . Determines which input is selected for the plus input of the comparator.
frankvnk 4:f66aa1098df9 256 * @param . For INx inputs, see CMP, DAC, and ANMUX block diagrams.
frankvnk 4:f66aa1098df9 257 * @param . NOTE: When an inappropriate operation selects the same input for both muxes, the comparator
frankvnk 4:f66aa1098df9 258 * @param . automatically shuts down to prevent itself from becoming a noise generator.
frankvnk 4:f66aa1098df9 259 * @param . 000 IN0 PTC6 CMP0_IN0
frankvnk 4:f66aa1098df9 260 * @param . 001 IN1 PTC7 CMP0_IN1
frankvnk 4:f66aa1098df9 261 * @param . 010 IN2 PTC8 CMP0_IN2
frankvnk 4:f66aa1098df9 262 * @param . 011 IN3 PTC9 CMP0_IN3
frankvnk 4:f66aa1098df9 263 * @param . 100 IN4 PTE30 CMP0_IN4
frankvnk 4:f66aa1098df9 264 * @param . 101 IN5 PTE29 CMP0_IN5
frankvnk 4:f66aa1098df9 265 * @param . 110 IN6 - Bandgap reference (1V)
frankvnk 4:f66aa1098df9 266 * @param . 111 IN7 - Internal 6-bit DAC0
frankvnk 0:e742ad3d7dac 267 *
frankvnk 4:f66aa1098df9 268 * @param . NOTE : When using the PMC bandgap 1V reference voltage as CMP input, ensure that
frankvnk 4:f66aa1098df9 269 * @param . you enable the bandgap buffer by setting the PMC_REGSC[BGBE] bit.
frankvnk 0:e742ad3d7dac 270 *
frankvnk 0:e742ad3d7dac 271 * @param input Unsigned char - range 0..7
frankvnk 0:e742ad3d7dac 272 * @return none
frankvnk 0:e742ad3d7dac 273 */
frankvnk 0:e742ad3d7dac 274 void switch_min(unsigned char pinM);
frankvnk 0:e742ad3d7dac 275
frankvnk 14:875486333dc2 276 /** Comparator enable/disable Interrupt
frankvnk 14:875486333dc2 277 * @param 1 Enables the comparator ISR
frankvnk 14:875486333dc2 278 * @param 0 Disabled the comparator ISR.
frankvnk 14:875486333dc2 279 * @return none
frankvnk 14:875486333dc2 280 */
frankvnk 14:875486333dc2 281 void int_en(bool ien);
frankvnk 14:875486333dc2 282
frankvnk 0:e742ad3d7dac 283 /**
frankvnk 14:875486333dc2 284 * Comparator rising interrupt callback
frankvnk 0:e742ad3d7dac 285 *
frankvnk 0:e742ad3d7dac 286 * @param pointer to the user function to execute after IRQ assertion
frankvnk 14:875486333dc2 287 * @return none
frankvnk 0:e742ad3d7dac 288 */
frankvnk 14:875486333dc2 289 void rising(void(*fptr)(void));
frankvnk 14:875486333dc2 290
frankvnk 14:875486333dc2 291 /**
frankvnk 14:875486333dc2 292 * Comparator falling interrupt callback
frankvnk 14:875486333dc2 293 *
frankvnk 14:875486333dc2 294 * @param pointer to the user function to execute after IRQ assertion
frankvnk 14:875486333dc2 295 * @return none
frankvnk 14:875486333dc2 296 */
frankvnk 14:875486333dc2 297 void falling(void(*fptr)(void));
frankvnk 0:e742ad3d7dac 298
frankvnk 0:e742ad3d7dac 299 private:
frankvnk 0:e742ad3d7dac 300 static const PinMap PinMap_CMP[7];
frankvnk 0:e742ad3d7dac 301 static void _cmpISR(void);
frankvnk 0:e742ad3d7dac 302 void hscmp_clear(void);
frankvnk 12:0a0648bddb98 303 PinName op_status(void);
frankvnk 12:0a0648bddb98 304 void op_enable(PinName pen, PinName pstat);
frankvnk 12:0a0648bddb98 305 void op_disable(PinName pdi);
frankvnk 13:2d499824ba05 306 void dac6_write(unsigned int value);
frankvnk 0:e742ad3d7dac 307 char CMPnumberP, CMPnumberM;
frankvnk 0:e742ad3d7dac 308 };
frankvnk 0:e742ad3d7dac 309
frankvnk 0:e742ad3d7dac 310 #endif
frankvnk 0:e742ad3d7dac 311
frankvnk 0:e742ad3d7dac 312
frankvnk 0:e742ad3d7dac 313