?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{FILE START}

library

?curdirlinks? - Rev 32

?prevdifflink? - Blame - ?getfile?


/*****************************************************************************
 * FileName:        mTouchCap_PIC18_CTMU_Physical.h
 * Dependencies:
 * Processor:       PIC18
 * Compiler:            C18
 * Linker:          MPLINK
 * Company:         Microchip Technology Incorporated
 *
 * Software License Agreement
 *
 * Copyright © 2009 Microchip Technology Inc.  
 * Microchip licenses this software to you solely for use with Microchip products, according to the terms of the  
 * accompanying click-wrap software license.  Microchip and its licensors retain all right, title and interest in 
 * and to the software.  All rights reserved. This software and any accompanying information is for suggestion only.  
 * It shall not be deemed to modify Microchip’s standard warranty for its products.  It is your responsibility to ensure 
 * that this software meets your requirements.

 * SOFTWARE IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, 
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT 
 * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT WILL MICROCHIP OR ITS LICENSORS BE LIABLE 
 * FOR ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED TO INCIDENTAL, 
 * SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, 
 * COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, OR ANY CLAIMS BY THIRD PARTIES 
 * (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.  
 * The aggregate and cumulative liability of Microchip and its licensors for damages related to the use of the software 
 * will in no event exceed $1000 or the amount you paid Microchip for the software, whichever is greater.

 * MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE OF THESE TERMS AND 
 * THE TERMS OF THE ACCOMPANYING CLICK-WRAP SOFTWARE LICENSE.
 * 
 *
 * Author                               Date                    Comment
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Naveen. M                                14 Apr 2009                 Version 0.1 Initial Draft
 * Nithin Kumar. M                          14 May 2009                 Version 0.2 Updates
 * Sasha. M     / Naveen. M             4 June 2009             Version 0.3 Updates
 * Sasha. M     / Naveen. M                     11 Nov 2009             Version 1.0 Release
 * Sasha. M     / Nithin.                       10 April 2010           Version 1.20 Release
 *****************************************************************************
 *
 *****************************************************************************/
#ifndef _MTOUCH_PIC18_CTMU_PHY_H
#define _MTOUCH_PIC18_CTMU_PHY_H

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~        Includes        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
#include                "Config.h"
#include                "HardwareProfile.h"              
#include                "mTouchCap_Timers.h"
#include                "mTouchCap_Adc.h"

#include        "GenericTypeDefs.h"
#ifdef __18CXX

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~        Constants       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */




/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~        Variables       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */



/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~        Variables       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */


/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~        Externs         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~     */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
extern WORD     curRawData              [MAX_ADC_CHANNELS];     //Storage for CTMU channel values
extern WORD     tripValue               [MAX_ADC_CHANNELS];     //Storage for the trip point for each channel   
extern WORD     hystValue               [MAX_ADC_CHANNELS];     //Storage for the hysterisis value for each channel
extern WORD     pressedCount    [MAX_ADC_CHANNELS];     //Storage for count of pressed value for each channel
extern WORD     unpressedCount  [MAX_ADC_CHANNELS];     //Storage for count of unpressed value for each channel
extern WORD     avg_delay               [MAX_ADC_CHANNELS];//Storage for count for average update for each channel      
extern WORD     averageData     [MAX_ADC_CHANNELS];     // running average of CTMU channels     
extern WORD     smallAvg                [MAX_ADC_CHANNELS];     // current button smallavg
extern WORD     actualValue             [MAX_ADC_CHANNELS];     // actual raw A/D counts for each channel
extern WORD     channel_TRIM_value      [MAX_ADC_CHANNELS];
extern WORD     channel_IRNG_value      [MAX_ADC_CHANNELS];
extern BYTE     chFilterType    [MAX_ADC_CHANNELS];     // Channel filter type
//extern BYTE   chDecodeMethod  [MAX_ADC_CHANNELS];     // decode method type
extern BYTE Press_State [MAX_ADC_CHANNELS];
extern SHORT startupCount;                              // variable to 'discard' first N samples
extern SHORT loopCount;
extern WORD     immediateValue;                 // current button value
extern WORD     scaledBigValue;                         // current button bigval

extern  WORD ScanChannels[MAX_ADC_CHANNELS];
extern BYTE     Channel_Pressed_Status[MAX_ADC_CHANNELS];
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~        Function Prototypes  ~~~~~~~~~~~~~~~~~~~~~~~~~~         */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
void mTouchCapPhy_Init(void);    
void mTouchCapPhy_InitCTMU(void);
void mTouchCapPhy_ChannelSetup(WORD ChannelNum);
void    mTouchCapApp_PortSetup(void);
WORD mTouchCapPhy_Read_ADC(void);
void mTouchCapPhy_ReadCTMU(WORD ChannelNumber);
void    mTouchCapPhy_CTMUSetup(void);
void    mTouchCapPhy_AdcSetup(void);
void mTouchCapPhy_ChargeTimeInit(void);
void mTouchCapPhy_SetupCurrentSourceRange(WORD CurrentSourceRange);
void    mTouchCapPhy_SetTrimValue( WORD TrimValue);
void mTouchCapPhy_Discharge_Current (void);
void mTouchCapPhy_Charge_Current (void);
WORD mTouchCapPhy_Read_ADC();
void mTouchCapPhy_StablizeChannelData(void);

void CTMU_Current_trim_config(int channel_no);
void DynamicTripValueCalculation(WORD Index);
void mTouchCapPhy_AverageData(WORD Index);
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~        Enums      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~          */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
 


/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* ~~~~~~~~~~~~~~~~~~~~~        Constants / Macros ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~       */
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

#define PLL_ENABLED
#define PLL_EN_BIT     OSCTUNEbits.PLLEN


//================pLIB=================================

/***********************************************************************/
/********************ANALOG CHANNELS TRISBITS DEFINITION*****************************************/
/***********************************************************************/
#define DIGITAL                 1
#define ANALOG                  0


#define TRIS_CHANNEL_AN0                TRISAbits.TRISA0
#define TRIS_CHANNEL_AN1                TRISAbits.TRISA1
#define TRIS_CHANNEL_AN2                TRISAbits.TRISA2
#define TRIS_CHANNEL_AN3                TRISAbits.TRISA3
#define TRIS_CHANNEL_AN4                TRISAbits.TRISA5
#define TRIS_CHANNEL_AN5                TRISEbits.TRISE0
#define TRIS_CHANNEL_AN6                TRISEbits.TRISE1
#define TRIS_CHANNEL_AN7                TRISEbits.TRISE2
#define TRIS_CHANNEL_AN8                TRISBbits.TRISB2
#define TRIS_CHANNEL_AN9                TRISBbits.TRISB3
#define TRIS_CHANNEL_AN1O               TRISBbits.TRISB1
#define TRIS_CHANNEL_AN11               TRISCbits.TRISC2
#define TRIS_CHANNEL_AN12               TRISBbits.TRISB0

#define ADPCF_CHANNEL_AN0(Value)                ANCON0bits.PCFG0 = Value;
#define ADPCF_CHANNEL_AN1(Value)                ANCON0bits.PCFG1 = Value;
#define ADPCF_CHANNEL_AN2(Value)                ANCON0bits.PCFG2 = Value;
#define ADPCF_CHANNEL_AN3(Value)                ANCON0bits.PCFG3 = Value;
#define ADPCF_CHANNEL_AN4(Value)                ANCON0bits.PCFG4 = Value;
#define ADPCF_CHANNEL_AN5(Value)                ANCON0bits.PCFG5 = Value;
#define ADPCF_CHANNEL_AN6(Value)                ANCON0bits.PCFG6 = Value;
#define ADPCF_CHANNEL_AN7(Value)                ANCON0bits.PCFG7 = Value;
#define ADPCF_CHANNEL_AN8(Value)                ANCON1bits.PCFG8 = Value;
#define ADPCF_CHANNEL_AN9(Value)                ANCON1bits.PCFG9 = Value;
#define ADPCF_CHANNEL_AN10(Value)               ANCON1bits.PCFG10 = Value;
#define ADPCF_CHANNEL_AN11(Value)               ANCON1bits.PCFG11 = Value;
#define ADPCF_CHANNEL_AN12(Value)               ANCON1bits.PCFG12 = Value;

/***********************************************************************/
/********************A   D    C*****************************************/
/***********************************************************************/
/***********************************************************************/
#define         INIT_AD1PCFGL_VALUE             0x0000
#define         INIT_AD1CON1_VALUE              0x0000
#define         INIT_AD1CHS_VALUE               0x0000                          //select the analog channel 0

/***********************************************************************
Macro      : EnableIntADC1
Overview   : This macro enables the ADC interrupt.
Parameters : None
Remarks    : This macro sets ADC Interrupt Enable bit of Interrupt
             Enable Control Register.
************************************************************************/
#define EnableIntADC1                (PIE1bits.ADIE = 1)

/***********************************************************************
Macro      : DisableIntADC1
Overview   : This macro disables the ADC interrupt.
Parameters : None
Remarks    : This macro clears ADC Interrupt Enable bit of Interrupt
             Enable Control register.
************************************************************************/
#define DisableIntADC1                (PIE1bits.ADIE = 0)

/***********************************************************************
Macro      : SetPriorityIntADC1(priority)
Overview   : This macro sets priority for ADC interrupt.
Parameters : priority - This input parameter is the level of interrupt priority
Remarks    : This macro sets ADC Interrupt Priority bits of Interrupt
             Priority Control register.
************************************************************************/
#define SetPriorityIntADC1(priority)   //STD: set prio  (IPC3bits.AD1IP = priority)

/*******************************************************************
Macro       : ADC1_Clear_Intr_Status_Bit
Overview    : Macro to Clear ADC Interrupt Status bit
Parameters  : None
Remarks     : None
*******************************************************************/
#define ADC1_Clear_Intr_Status_Bit ( PIR1bits.ADIF = 0) //PIC18

/*******************************************************************
Macro       : ADC1_IF_Bit
Overview    : returns ADC1 Interrupt Flag
Parameters  : None
Remarks     : None
*******************************************************************/
#define ADC1_IF_Bit (PIR1bits.ADIF)


/************************************************************************
Macro       : BusySampADC1
Overview    : This function is identical to ConvertADC10
Parameters  : None
Remarks     : This macro clears the ADCON1<SAMP> bit and thus stops sampling
              and starts conversion.
**************************************************************************/
#define BusySampADC1              !(AD1CON1bits.SAMP)

/************************************************************************
Macro       : EnableADC1
Overview    : This function enables the ADC module
Parameters  : None
Remarks     : None.
**************************************************************************/
#define EnableADC1                (AD1CON1bits.ADON = 1)

/************************************************************************
Macro       : DisableADC1
Overview    : This function disables the ADC module
Parameters  : None
Remarks     : None.
**************************************************************************/
#define DisableADC1                (ADCON0bits.ADON = 0)

/************************************************************************
Macro       : Set_Adc_Enable_State
Overview    : This function enables or disable the ADC module depending upon the value.
Parameters  : None
Remarks     : None.
**************************************************************************/
#define Set_Adc_Enable_State(Value)          (ADCON0bits.ADON = Value) //PIC18


/************************************************************************
Macro       : Enable_ADC_Sampling
Overview    : This function starts the A/D conversion.
Parameters  : None
Remarks     : None.
**************************************************************************/
#define Enable_ADC_Sampling       (ADCON0bits.GO = 1)   //PIC18


/************************************************************************
Macro       : Disable_ADC_Sampling
Overview    : This function starts the A/D conversion.
Parameters  : None
Remarks     : None.
**************************************************************************/
#define Disable_ADC_Sampling       (ADCON0bits.GO = 0) //PIC18
 

/************************************************************************
Macro       : ADC_GO_Bit 
Overview    : This function declares the AD1CON1bits.DONE.
Parameters  : None
Remarks     : None.
**************************************************************************/
#define ADC_GO_Bit                               (ADCON0bits.GO)
 

/************************************************************************
Macro       : ADC_Done_Bit
Overview    : This function declares the AD1CON1bits.DONE.
Parameters  : None
Remarks     : None.
**************************************************************************/
#define ADC_Done_Bit                             (ADCON0bits.DONE)      //PIC18

/************************************************************************
Macro       : Adc_Port_Configuration1
Overview    : Configure ADC Port pin as Analog or Digital for register0
Parameters  : None
Remarks     : None.
**************************************************************************/
#define Adc_Port_Configuration1(Value)  (ANCON0 = Value)        //PIC18

/************************************************************************
Macro       : Adc_Port_Configuration1
Overview    : Configure ADC Port pin as Analog or Digital for register1
Parameters  : None
Remarks     : None.
**************************************************************************/
#define Adc_Port_Configuration2(Value)  (ANCON1 = Value)        //PIC18
/************************************************************************

                 Redefining ADC Register

**************************************************************************/
#define ADC_CHANNEL_SELECT              ADCON0bits.CHS  
#define ADCSSL                                          //AD1CSSL PIC18
#define AD_CON_REG1                                             ADCON1
#define AD_CON_REG0                                             ADCON0
#define ADCBUF                                              ADC1BUF0


/*Registers Defaults*/
#define ADCSSL_VAL                               0x00
#define ADCON1_VAL                               0x00
#define ADCON0_VAL                               0x00
#define ADC_PRIORITY                                    0x00
#define ADC_PORT_CONFIG_DEFAULT_VALUE   0x00            // Default Value of ADC Port Configuration Register.


/*AD1CON0 register definition*/
//************** Voltage Reference Configuration ****************************** 
#define ADC_REF_VDD_VREFMINUS           0b00000010      // ADC voltage source VREF+ = VDD and VREF- = ext.source at VREF-
#define ADC_REF_VREFPLUS_VREFMINUS  0b00000011  // ADC voltage source VREF+ = ext.source at VREF+ and VREF- = ext.source at VREF-
#define ADC_REF_VREFPLUS_VSS            0b00000001      // ADC voltage source VREF+ = ext.source at VREF+ and VREF- = VSS
#define ADC_REF_VDD_VSS                     0b00000000  // ADC voltage source VREF+ = VDD and VREF- = VSS


//**************** channel selection ******************************************
#define ADC_CH0          0b10000111                     //Select Channel 0
#define ADC_CH1          0b10001111                     //Select Channel 1
#define ADC_CH2          0b10010111                     //Select Channel 2
#define ADC_CH3          0b10011111                     //Select Channel 3
#define ADC_CH4          0b10100111                     //Select Channel 4
#define ADC_CH5          0b10101111                     //Select Channel 5
#define ADC_CH6          0b10110111                     //Select Channel 6
#define ADC_CH7          0b10111111                     //Select Channel 7
#define ADC_CH8          0b11000111                     //Select Channel 8
#define ADC_CH9          0b11001111                     //Select Channel 9
#define ADC_CH10         0b11010111                     //Select Channel 10
#define ADC_CH11         0b11011111                     //Select Channel 11
#define ADC_CH12         0b11100111                     //Select Channel 12


/*AD1CON1 control register definition*/
//*************** A/D Conversion Clock Select *****************************
#define ADC_FOSC_2       0b00000000                     //A/D conversion clock source is Fosc/2
#define ADC_FOSC_4       0b00000100                     //A/D conversion clock source is Fosc/4
#define ADC_FOSC_8       0b00000001                     //A/D conversion clock source is Fosc/8
#define ADC_FOSC_16      0b00000101                     //A/D conversion clock source is Fosc/16
#define ADC_FOSC_32      0b00000010                     //A/D conversion clock source is Fosc/32
#define ADC_FOSC_64      0b00000110                     //A/D conversion clock source is Fosc/64
#define ADC_FOSC_RC      0b00000111                     //A/D conversion clock source is Internal RC OSC


//************** A/D Acquisition Time Selection *******************************
#define ADC_0_TAD        0b00000000                             //A/D Acquisition Time is 0 TAD
#define ADC_2_TAD        0b00001000                             //A/D Acquisition Time is 2 TAD
#define ADC_4_TAD        0b00010000                             //A/D Acquisition Time is 4 TAD
#define ADC_6_TAD        0b00011000                             //A/D Acquisition Time is 6 TAD
#define ADC_8_TAD        0b00100000                             //A/D Acquisition Time is 8 TAD
#define ADC_12_TAD       0b00101000                             //A/D Acquisition Time is 12 TAD
#define ADC_16_TAD       0b00110000                             //A/D Acquisition Time is 16 TAD
#define ADC_20_TAD       0b00111000                             //A/D Acquisition Time is 20 TAD


//*************** A/D Result Format Select ***********************************
#define ADC_RIGHT_JUST   0b10000000                     // Right justify A/D result
#define ADC_LEFT_JUST    0b00000000                     // Left justify A/D result

/***********************************************************************************
Macro       : ADC_CALIB()
Overview : Macro performs the Calibration on next A/D conversion
Parameters   : None
Remarks     : None
***********************************************************************************/
#define ADC_CALIB()         (ADCON1bits.ADCAL=1)

/***********************************************************************************
Macro       : ADC_NO_CALIB()
Overview : Macro performs the Normal A/D converter operation with no Calibration
Parameters   : None
Remarks     : None
***********************************************************************************/
#define ADC_NO_CALIB()  (ADCON1bits.ADCAL=0)

/*ADCON0 and ADCON1 register Values*/

#define ADC_CONFIG_ADCON0  (ADCON0_VAL | ADC_REF_VDD_VSS) 
#define ADC_CONFIG_ADCON1  (ADCON1_VAL | ADC_RIGHT_JUST | ADC_FOSC_4 | ADC_2_TAD)


/***********************************************************************/
/********************C O M P A R A T O R********************************/
/***********************************************************************/
/***********************************************************************/
/*Comparator register definition*/
 #define CMP_CMCON                                               CM2CON
 #define CMP_CVRCON                                              CVRCON
      
/*CMCON control register bit definition*/
#define CMP_Enable_Disable_Bit                          CM2CONbits.CON
#define CMP_Output_Enable_Disable_Bit           CM2CONbits.COE
#define CMP_Output_Polarity_Bit                         CM2CONbits.CPOL
#define CMP_Event_Bit                                           CM2CONbits.CEVT
#define CMP_CMCON_Ouput_Bit                                     CM2CONbits.COUT
#define CMP_Trigger_Select_HighBit                      CM2CONbits.EVPOL1
#define CMP_Trigger_Select_LowBit                       CM2CONbits.EVPOL0
#define CMP_Reference_Select_Bit                        CM2CONbits.CREF
#define CMP_Channel_Select_HighBit                      CM2CONbits.CCH1
#define CMP_Channel_Select_LowBit                       CM2CONbits.CCH0
#define CMP_Trigger_Select_Bits                         CM2CONbits.EVPOL
#define CMP_Channel_Select_Bits                         CM2CONbits.CCH

/*CMSTAT register bit definition*/
#define CMP_Ouput_Bit                                           CMSTATbits.C2OUT

/*CMCON interrupt register bit definition*/

#define CMP_Interrupt_Flag_Bit                  IFS1bits.CMIF
#define CMP_Interrupt_Enable_Bit                IEC1bits.CMIE
#define CMP_Interrupt_Priority_Bits             IPC4bits.CMIP

/******************************************************************************
 Macro      : CMP_EnblDsbl(state)
 Overview   : Macro Enables/Disables the Comparator 
 Parameter  : state - *1 Comparator is enabled 
                      *0 Comparator is disabled
 Remarks    : None
 *****************************************************************************/
#define CMP_EnblDsbl(state)                     (CMP_Enable_Disable_Bit = state)

/******************************************************************************
 Macro       : CMP_Output_EnblDsbl(state) 
 Overview    : Macro Enables/Disables Comparator output on the output pad 
 Parameter   : state -  *1 Comparator output driven on the output pad 
                        *0 Comparator output is not driven on the output pad
 Remarks     : None
*****************************************************************************/
#define CMP_Output_EnblDsbl(state)    (CMP_Output_Enable_Disable_Bit = state)

/******************************************************************************
 Macro       : CMP_Output_Polarity(state) 
 Overview    : 
 Parameter   : state -  *1 
                        *0 
 Remarks     : None
*****************************************************************************/
#define CMP_Output_Polarity(state)    (CMP_Output_Polarity_Bit = state)


/******************************************************************************
 Macro       : CMP_Output_Polarity(state) 
 Overview    : 
 Parameter   : state -  *1 
                        *0 
 Remarks     : None
*****************************************************************************/
#define CMP_Event(state)    (CMP_Event_Bit = state)


/******************************************************************************
 Macro       : CMP_Trigger_Select(state) 
 Overview    : 
 Parameter   : state -  *1 
                        *0 
 Remarks     : None
*****************************************************************************/
#define CMP_Trigger_Select(state)    (CMP_Trigger_Select_Bits = state)


/******************************************************************************
 Macro       : CMP_Trigger_Select(state) 
 Overview    : 
 Parameter   : state -  *1 
                        *0 
 Remarks     : None
*****************************************************************************/
#define CMP_Reference_Select(state)    (CMP_Reference_Select_Bit = state)


/******************************************************************************
 Macro       : CMP_Channel_Select(state) //n1:
 Overview    : 
 Parameter   : state -  *1 
                        *0 
 Remarks     : None
*****************************************************************************/
#define CMP_Channel_Select(state)    (CMP_Channel_Select_Bits = state)

/******************************************************************************
 Macro       : CMP_Get_STATE() 
 Overview    : Macro Returns state of Comparator output
              When  C2INV = 0:
               1 = C2 VIN+ > C2 VIN-
               0 = C2 VIN+ < C2 VIN
              When   C2INV = 1:
               0 = C2 VIN+ > C2 VIN-
               1 = C2 VIN+ < C2 VIN- 
 Parameter   : None 
 Remarks     : State of Comparator depends on Inverse selection  bit in 
              control register
 *****************************************************************************/
#define CMP_Get_STATE()                         (CMP_Ouput_Bit)

/***********************************************************************
Macro      : EnableIntCMP
Overview   : This macro enables the comparator interrupt. 
Parameter  : None 
Remarks    : This macro sets comparator Interrupt Enable bit of Interrupt 
             Enable Control Register.
************************************************************************/ 
#define EnableIntCMP               (CMP_Interrupt_Enable_Bit = 1)

/***********************************************************************
Macro      : DisableIntCMP
Overview   : This macro disables the comparator interrupt.
Parameter  : None
Remarks    : This macro clears comparator Interrupt Enable bit of Interrupt 
             Enable Control register.
************************************************************************/ 
#define DisableIntCMP                (CMP_Interrupt_Enable_Bit = 0)

/***********************************************************************
Macro      : SetPriorityIntCMP (priority)
Overview   : This macro sets priority for comparator interrupt. 
Parameter  : priority - This input parameter is the level of interrupt priority 
Remarks    : This macro sets comparator Interrupt Priority bits of Interrupt 
             Priority Control register.
************************************************************************/  
#define SetPriorityIntCMP(priority)     (CMP_Interrupt_Priority_Bits = priority)

/*******************************************************************
Macro       : CMP_Clear_Intr_Status_Bit
Overview    : Macro to Clear Comparator Interrupt Status bit 
Parameter   : None 
Remarks     : None 
*******************************************************************/
#define CMP_Clear_Intr_Status_Bit     (CMP_Interrupt_Flag_Bit = 0)


/*CMxCON register definition*/
#define CMP_ENABLE                       0x8000 /* Comparator is enabled */
#define CMP_DISABLE                      0x0000 /* Comparator is disabled */
#define CMP_ENBL_DSBL_MASK               (~CMP_ENABLE)
#define CMP_OUTPUT_ENABLE                0x4000 /* Comparator output present on the CXOUT pin */
#define CMP_OUTPUT_DISABLE               0x0000 /* Comparator output is internal only */
#define CMP_OUTPUT_MASK                  (~CMP_OUTPUT_ENABLE)
#define CMP_OUTPUT_INVERT                0x2000 /* Comparator output inverted */
#define CMP_OUTPUT_NOT_INVERT            0x0000 /* Comparator output not inverted */
#define CMP_OUTPUT_INVERT_MASK           (~CMP_OUTPUT_INVERT)
#define CMP_CHANGE_STATE                 0x0200 /* Comparator output changed states */
#define CMP_NO_CHANGE                    0x0000 /* Comparator output did not change states */
#define CMP_STATE_MASK                   (~CMP_CHANGE_STATE )
#define CMP_INTERRUPT_ON_ANY_EDGE                0X00C0 /* Comparator interrupt generated on any edge of the selected comparator output*/
#define CMP_INTERRUPT_ON_FALLING_EDGE    0X0080 /* Comparator interrupt generated only on falling edge of the selected comparator output*/
#define CMP_INTERRUPT_ON_RISING_EDGE     0X0040 /* Comparator interrupt generated only on rising edge of the selected comparator output*/
#define CMP_INTERRUPT_DISABLED                   0X0000  /* Comparator interrupt generation is disabled */
#define CMP_INTERRUP_EDGE_MASK           (~CMP_INTERRUPT_ON_ANY_EDGE) 
#define CMP_POS_IP_CV_Ref                0x0010 /* Input is connected to internal CVref voltage */ 
#define CMP_POS_IP_CXINA                     0x0000 /* Input is connected to CXINA pin */
#define CMP_POS_IP_MASK                  (~CMP_POS_IP_CV_Ref)
#define CMP_NEG_IP_CXINB                                 0X0000 /* Input is connected to CXINB pin */
#define CMP_NEG_IP_CXINC                             0X0001 /* Input is connected to CXINC pin */
#define CMP_NEG_IP_CXIND                             0X0002 /* Input is connected to CXIND pin */

/*CVRCON register definition*/
#define CMP_VRef_Enable                  0x0080 /* CVREF circuit powered on */
#define CMP_VRef_Disable                 0x0000 /* CVREF circuit powered down */
#define CMP_VRef_MASK                   (~CMP_VRef_Enable)
#define CMP_VRef_OUTPUT_Enable           0x0040 /* CVREF voltage level is output on CVREF pin */
#define CMP_VRef_OUTPUT_Disable          0x0000 /* CVREF voltage level is disconnected from CVREF pin */
#define CMP_VRef_OUTPUT_MASK             (~CMP_VRef_OUTPUT_Enable)
#define CMP_VRef_SELECT_24_STEPS                 0x0020 /* 0 to 0.67 CVRSRC, with CVRSRC/24 step size */
#define CMP_VRef_SELECT_32_STEPS         0x0000 /* 0.25 CVRSRC to 0.75 CVRSRC, with CVRSRC/32 step size */
#define CMP_VRef_STEP_SELECT_MASK        (~CMP_VRef_SELECT_24_STEPS)
#define CMP_Vrsrc_Vref_Vref                      0x0010 /* Comparator reference source CVRSRC = VREF+ – VREF- */
#define CMP_Vrsrc_AVDD_AVSS                      0x0000 /* Comparator reference source CVRSRC = AVDD – AVSS */
#define CMP_Vrsrc_MASK                   (~CMP_Vrsrc_Vref_Vref)
#define CMP_CVrsrc                                       0x000F /* 0 CVRSRC with CVRSRC/24 step size, 0.25 CVRSRC with CVRSRC/32 step size */

/*Registers Defaults*/
#define CMP_CMCON_VAL                                    0x0000
#define CVREF_VAL                                        0x0000


#define CMP_CONFIG_CMCON                        (CMP_CMCON_VAL | CMP_ENABLE | CMP_OUTPUT_DISABLE | CMP_OUTPUT_NOT_INVERT  \
                                                                         | CMP_NO_CHANGE | CMP_INTERRUPT_DISABLED | CMP_POS_IP_CV_Ref | CMP_NEG_IP_CXINB)

#define CMP_CONFIG_CVRCON                       (CVREF_VAL | CMP_VRef_Enable | CMP_VRef_OUTPUT_Enable | CMP_VRef_SELECT_32_STEPS \
                                                                         | CMP_Vrsrc_AVDD_AVSS | CMP_CVrsrc)    



/***********************************************************************/
/********************C T M U********************************************/
/***********************************************************************/
/************************************************************************/
 /*CTMUCON Control Register*/
 #define CTMU_ENABLE                               0x8000 /*CTMU is Enabled*/
 #define CTMU_DISABLE                              0x0000 /*CTMU is Disabled*/
 #define CTMU_ENBL_DISBL_MASK          (~CTMU_ENABLE)
 
 #define CTMU_IDLE_STOP                0x2000 /*CTMU discontinue module operation in Idle mode*/
 #define CTMU_IDLE_CONTINUE            0x0000 /*CTMU Operate in Idle mode*/
 #define CTMU_IDLE_MASK                (~CTMU_IDLE_STOP)
 
 #define CTMU_TIME_GEN_ENABLE          0x1000 /*CTMU enables edge delay generation*/
 #define CTMU_TIME_GEN_DISABLE         0x0000 /*CTMU disables edge delay generation*/
 #define CTMU_TIME_GEN_MASK            (~CTMU_TIME_GEN_ENABLE)
 
 #define CTMU_EDGE_ENABLE              0x0800 /*CTMU edges are not blocked*/
 #define CTMU_EDGE_DISABLE             0x0000 /*CTMU edges are blocked*/
 #define CTMU_EDGE_MASK                (~CTMU_EDGE_ENABLE)
 
 #define CTMU_EDGE_SEQUENCE_ON         0x0400 /*Edge1 event must occur before edge2 event can occur*/
 #define CTMU_EDGE_SEQUENCE_OFF        0x0000 /*No edge sequence os needed*/
 #define CTMU_EDGE_SEQUENCE_MASK       (~CTMU_EDGE_SEQUENCE)
 
 #define CTMU_ANA_CURR_SOURCE_GND      0x0200 /*CTMU Analog current source output is grounded*/
 #define CTMU_ANA_CURR_SOURCE_NOT_GND  0x0000 /*CTMU Analog current source output is not grounded*/
 #define CTMU_ANA_CURR_SOURCE_MASK     (~CTMU_ANA_CURR_SOURCE_GND)
 
 #define CTMU_TRIG_OUTPUT_ENABLE       0x0100 /*Trigger output is enabled*/
 #define CTMU_TRIG_OUTPUT_DISABLE      0x0000 /*Trigger output is disabled*/
 #define CTMU_TRIG_OUTPUT_MASK         (~CTMU_TRIG_OUTPUT)

 #define CTMU_EDGE1_POLARITY_POS       0x0010 /*Edge 1 programmed for a positive edge response*/
 #define CTMU_EDGE1_POLARITY_NEG       0x0000 /*Edge 1 programmed for a negative edge response*/
 #define CTMU_EDGE1_POLARITY_MASK      (~CTMU_EDGE2_POS_POLARITY)
 
 #define CTMU_EDGE1_SOURCE_CTED1       0x000C /*CTED1 is a source select for Edge1*/
 #define CTMU_EDGE1_SOURCE_CTED2       0x0008 /*CTED2 is a source select for Edge1*/
 #define CTMU_EDGE1_SOURCE_OC1         0x0004 /*OC1 is a source select for Edge1*/
 #define CTMU_EDGE1_SOURCE_TIMER1      0x0000 /*TIMER1 is a source select for Edge1*/
 #define CTMU_EDGE1_SOURCE_MASK        (~CTMU_EDGE2_SOURCE_CTED1)
 
 #define CTMU_EDGE2_POLARITY_POS       0x0080 /*Edge 2 programmed for a positive edge response*/
 #define CTMU_EDGE2_POLARITY_NEG       0x0000 /*Edge 2 programmed for a negative edge response*/
 #define CTMU_EDGE2_POLARITY_MASK      (~CTMU_EDGE2_POS_POLARITY)
 
 #define CTMU_EDGE2_SOURCE_CTED1       0x0060 /*CTED1 is a source select for Edge2*/
 #define CTMU_EDGE2_SOURCE_CTED2       0x0040 /*CTED2 is a source select for Edge2*/
 #define CTMU_EDGE2_SOURCE_OC1         0x0020 /*OC1 is a source select for Edge2*/
 #define CTMU_EDGE2_SOURCE_TIMER1      0x0000 /*TIMER1 is a source select for Edge2*/
 #define CTMU_EDGE2_SOURCE_MASK        (~CTMU_EDGE2_SOURCE_CTED1) 
 
 /*CTMU1CON Current Control register*/ 
 #define CTMU_POS_CURR_TRIM                    0x0400 /*2% of Positive change from nominal current*/
 #define CTMU_NEG_CURR_TRIM          0xFC00 /*2% of Negative change from nominal current*/
 #define CTMU_NOMINAL_CURRENT          0x0000 /*Nominal Current output specified by IRNG1:IRNG0*/
 #define CTMU_CURR_RANGE_100_BASE_CURR 0x0300 /*Current source Range is 100*Base current (55uA) */
 #define CTMU_CURR_RANGE_10_BASE_CURR  0x0200 /*Current source Range is 10*Base current (5.5uA)*/
 #define CTMU_CURR_RANGE_BASE_CURR     0x0100 /*Current source Range is Base current (0.55uA)*/
 #define CTUM_CURR_SOURCE_DISABLE      0x0000 /*Current source disabled*/

 
 #define CTMU_INT_PRI                   0x0000 /*CTMU interrupt priority is 0*/
 
 #define CTMU_INT_ENABLE               0x0008 /* Enable CTMU interrupts */
 #define CTMU_INT_DISABLE              0x0000 /* Disable CTMU interrupts */


/************************************************************************
Macro       : Set_CTMU_ENABLE_Status 
Overview    : setting or clearing CTMU Enable Module Bit 
Parameters  : ENABLE '1' or DISABLE '0'
Remarks     : None.
**************************************************************************/ 
#define Set_CTMU_ENABLE_Status(State)                           (CTMUCONHbits.CTMUEN = State)

/************************************************************************
Macro       : Idle_Mode_CTMU_Operation 
Overview    : CTMU Operation in Idle 
Parameters  : ENABLE '1' or DISABLE '0' 
Remarks     : None.
**************************************************************************/ 
#define Idle_Mode_CTMU_Operation(State)                         (CTMUCONHbits.CTMUSIDL = State)

/************************************************************************
Macro       : Set_CTMU_Time_Generation 
Overview    : setting or clearing CTMU TIME Generation Bit 
Parameters  : ENABLE '1' or DISABLE '0' 
Remarks     : None.
**************************************************************************/ 
#define Set_CTMU_Time_Generation(State)                         (CTMUCONHbits.TGEN = State)


/************************************************************************
Macro       : Enable_Disable_CTMU_Time_Generation 
Overview    : setting or clearing CTMU TIME Generation Bit 
Parameters  : ENABLE '1' or DISABLE '0' 
Remarks     : None.
**************************************************************************/ 
#define Block_CTMU_Edge(State)                          (CTMUCONHbits.EDGEN = 0)

/************************************************************************
Macro       : Enable_Disable_CTMU_Time_Generation 
Overview    : setting or clearing CTMU TIME Generation Bit 
Parameters  : ENABLE '1' or DISABLE '0' 
Remarks     : None.
**************************************************************************/ 
#define Unblock_CTMU_Edge(State)                        (CTMUCONHbits.EDGEN = 1)


/************************************************************************
Macro       : Set_CTMU_Edge_Sequence 
Overview    : setting or clearing CTMU Edge Sequence Bit 
Parameters  : ENABLE '1' or DISABLE '0' 
Remarks     : None.
**************************************************************************/ 
#define Set_Edge_Sequence(State)                        (CTMUCONHbits.EDGSEQEN = State)


/************************************************************************
Macro       : Enable_CTMU_CurrentDischarge 
Overview    : setting the CTMU Current Discharge  Bit 
Parameters  : None
Remarks     : None.
**************************************************************************/ 
#define Enable_CTMU_CurrentDischarge                    (CTMUCONHbits.IDISSEN = 1)

/************************************************************************
Macro       : Disable_CTMU_CurrentDischarge 
Overview    : Clearing the CTMU Current Discharge  Bit 
Parameters  : None
Remarks     : None.
**************************************************************************/ 
 
#define Disable_CTMU_CurrentDischarge                           (CTMUCONHbits.IDISSEN = 0)


/************************************************************************
Macro       : Set_CTMU_Trigger_Control 
Overview    : setting or clearing CTMU Trigger Control Bit 
Parameters  : ENABLE '1' or DISABLE '0' 
Remarks     : None.
**************************************************************************/ 
#define Set_CTMU_Trigger_Control(State)                         (CTMUCONHbits.CTTRIG = State)



/************************************************************************
Macro       : Enable_CTMU_Positive_Edge2_Polarity
Overview    : By setting Edge 2 Polarity Select bit 
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Enable_CTMU_Positive_Edge2_Polarity                             (CTMUCONLbits.EDG2POL = 1)


/************************************************************************
Macro       : Enable_CTMU_Negative_Edge2_Polarity
Overview    : By setting Edge 2 Polarity Select bit 
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Enable_CTMU_Negative_Edge2_Polarity                             (CTMUCONLbits.EDG2POL = 0)


/************************************************************************
Macro       : Enable_CTMU_Positive_Edge1_Polarity
Overview    : By setting Edge 1 Polarity Select bit 
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Enable_CTMU_Positive_Edge1_Polarity                             (CTMUCONLbits.EDG1POL = 1)


/************************************************************************
Macro       : Enable_CTMU_Negative_Edge1_Polarity
Overview    : By setting Edge 1 Polarity Select bit 
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Enable_CTMU_Negative_Edge1_Polarity                             (CTMUCONLbits.EDG1POL = 0)


/************************************************************************
Macro       : CTMU_Edge1_Source_Select 
Overview    : Edge 1 Source Select bits 
Parameters  :  State
Remarks     : None.
**************************************************************************/ 
//PIC18
#define CTMU_Edge1_Source_Select(State)         (CTMUCONLbits.EDG1SEL0 = (State&0x01) && (CTMUCONLbits.EDG1SEL1 = (State&0x02)>>1))


/************************************************************************
Macro       : CTMU_Edge2_Source_Select 
Overview    : Edge 2 Source Select bits 
Parameters  :  
Remarks     : None.
**************************************************************************/ 
//PIC18
#define CTMU_Edge2_Source_Select(State)         (CTMUCONLbits.EDG2SEL0 = (State&0x01) && (CTMUCONLbits.EDG2SEL1 = (State&0x02)>>1))


/************************************************************************
Macro       : Enable_CTMUEdge1
Overview    : By setting edge1 status bit current source enables  
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Enable_CTMUEdge1                                (CTMUCONLbits.EDG1STAT = 1)


/************************************************************************
Macro       : Enable_CTMUEdge2
Overview    : By setting edge2 status bit current source enables  
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Enable_CTMUEdge2                                (CTMUCONLbits.EDG2STAT = 1)


/************************************************************************
Macro        :Disbl_CTMUEdge1
Overview    : By clearing edge1 status bit disable the current source
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Disbl_CTMUEdge1                                 (CTMUCONLbits.EDG1STAT = 0)


/************************************************************************
Macro       :Disbl_CTMUEdge2
Overview    : By clearing edge2 status bit disable the current source 
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Disbl_CTMUEdge2                         (CTMUCONLbits.EDG2STAT = 0)


/************************************************************************
Macro       : Disbl_Currentsource
Overview    : By clearing EDGSTAT bit disable the source.
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Disbl_CurrentSource             ( CTMUCONLbits.EDG1STAT = 0 , CTMUCONLbits.EDG2STAT = 0 )


/************************************************************************
Macro       : Enabl_Currentsource
Overview    : By setting EDGSTAT bit disable the source.
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define Enable_CurrentSource            (CTMUCONLbits.EDG1STAT = 1 , CTMUCONLbits.EDG2STAT = 1 )


/************************************************************************
Macro       : CTMUEdge1_Status
Overview    : Returns the status of CTMU edge1  
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define CTMUEdge1_Status                CTMUCONLbits.EDG1STAT

/************************************************************************
Macro       : CTMUEdge2_Status
Overview    : Returns the status of CTMU edge2 
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define CTMUEdge2_Status                        CTMUCONLbits.EDG2STAT


/************************************************************************
Macro       : CTMU_Trim_Value 
Overview    : Sets the Trim Value for CTMU
Parameters  : None 
Remarks     : None.
**************************************************************************/ 
#define CTMU_Trim_Value(Value)                  CTMUICONbits.ITRIM = (Value)



/************************************************************************
Macro          : CTMU_Select_Current_Source
Overview     : Sets the current source range Value for CTMU
Parameters  :                           CURRENT_RANGE_100XBASE_CURRENT //urrent source Range is 100*Base current (55uA) 
 *                                               CURRENT_RANGE_10XBASE_CURRENT  //Current source Range is 10*Base current (5.5uA)
 *                                               CURRENT_RANGE_BASE_CURRENT     //Current source Range is Base current (0.55uA)
 *                                               CURRENT_SRC_DISABLED      //Current source disabled
 * 
Remarks      : None.
**************************************************************************/ 
#define CTMU_Select_Current_Source(Value)                       CTMUICONbits.IRNG = (Value)


/************************************************************************
Macro          : CTMU_Get_Current_Source
Overview     : Gets the Current Source range value
Parameters  : None 
Remarks      : None.
**************************************************************************/ 
#define CTMU_Get_Current_Source                 CTMUICONbits.IRNG


/***********************************************************************
Macro      : EnableIntCTMU 
Overview   : This macro enables the CTMU interrupt. 
Parameters : None 
Remarks    : This macro sets CTMU Interrupt Enable bit of Interrupt 
                  Enable Control Register.
************************************************************************/ 
#define EnableIntCTMU                (IEC4bits.CTMUIE = 1)

/***********************************************************************
Macro      : DisableIntCTMU 
Overview   : This macro disables the CTMU interrupt.
Parameters : None
Remarks    : This macro clears CTMU Interrupt Enable bit of Interrupt 
             Enable Control register.
************************************************************************/ 
#define DisableIntCTMU               (IEC4bits.CTMUIE = 0)

/***********************************************************************
Macro      : SetPriorityIntCTMU(priority) 
Overview   : This macro sets priority for CTMU interrupt. 
Parameters : priority - This input parameter is the level of interrupt priority 
Remarks    : This macro sets CTMU Interrupt Priority bits of Interrupt 
             Priority Control register.
************************************************************************/  
#define SetPriorityIntCTMU(priority)    (IPC19bits.CTMUIP = priority)

/*******************************************************************
Macro       : CTMU_Clear_Intr_Status_Bit 
Overview    : Macro to Clear CTMU Interrupt Status bit 
Parameters  : None 
Remarks     : None 
*******************************************************************/
#define CTMU_Clear_Intr_Status_Bit    (IFS4bits.CTMUIF = 0) 



#endif //#ifdef __18CXX


#endif  // _MTOUCH_PIC18_CTMU_PHY_H




{FILE END}
{FOOTER START}

Powered by WebSVN v2.8.3