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:
Sat Jul 20 16:24:32 2013 +0000
Revision:
17:048474f28d28
Parent:
16:18170968fdc3
Child:
18:efa8d41b738f
removed int_en
; reworked falling/rising
; improved function names

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