cmp.h 8.3 KB
Newer Older
李俭双's avatar
李俭双 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
#ifndef __CMP_H__
#define __CMP_H__
#include <stdint.h>

#include "common.h"
#include "sci_common.h"

/* Comparator 1 monitor flag bit (C1MON) */
#define _00_COMP1_FLAG_REFERENCE_0                    (0x00U) // IVCMP1 less than comparator 1 reference voltage or comparator 1 stopped 
#define _80_COMP1_FLAG_REFERENCE_1                    (0x80U) // IVCMP1 more than comparator 1 reference voltage 
/* Comparator 1 operation enable bit (C1ENB) */
#define _00_COMP1_OPERATION_DISABLED                  (0x00U) // comparator 1 operation disabled 
#define _10_COMP1_OPERATION_ENABLED                   (0x10U) // comparator 1 operation enabled 
/* Comparator 0 monitor flag bit (C0MON) */
#define _00_COMP0_FLAG_REFERENCE_0                    (0x00U) // IVCMP0 less than comparator 0 reference voltage or comparator 0 stopped 
#define _08_COMP0_FLAG_REFERENCE_1                    (0x08U) // IVCMP0 more than comparator 0 reference voltage 
/* Comparator 0 operation enable bit (C0ENB) */
#define _00_COMP0_OPERATION_DISABLED                  (0x00U) // comparator 0 operation disabled 
#define _01_COMP0_OPERATION_ENABLED                   (0x01U) // comparator 0 operation enabled 

/* Comparator 1 edge detectioin selection (C1EDG) */
#define _00_COMP1_ONE_EDGE_INTERRUPT                  (0x00U) // interrupt request by comparator 1 one-edge detection 
#define _80_COMP1_BOTH_EDGES_INTERRUPT                (0x80U) // interrupt request by comparator 1 both-edge detection 
/* Comparator 1 edges polarity selection (C1EPO) */
#define _00_COMP1_RISING_INTERRUPT                    (0x00U) // interrupt request at comparator 1 rising edge 
#define _40_COMP1_FALLING_INTERRUPT                   (0x40U) // interrupt request at comparator 1 falling edge 

#define _00_COMP0_OUTPUT_DISABLE                      (0x00U) // comparator 0 VCOUT0 pin output disabled 
#define _02_COMP0_OUTPUT_ENABLE                       (0x02U) // comparator 0 VCOUT0 pin output enabled 

#define _00_COMP1_OUTPUT_DISABLE                      (0x00U) // comparator 1 VCOUT1 pin output disabled
#define _20_COMP1_OUTPUT_ENABLE                       (0x20U) // comparator 1 VCOUT1 pin output enabled 

#define _00_COMP1_INTERRUPT_DISABLE                   (0x00U) //comparator 1 interrupt request disabled 
#define _10_COMP1_INTERRPUT_ENABLE                    (0x10U) // comparator 1 interrupt request enabled 
#define _00_COMP0_INTERRUPT_DISABLE                   (0x00U) // comparator 0 interrupt request disabled
#define _01_COMP0_INTERRPUT_ENABLE                    (0x01U) // comparator 0 interrupt request enabled 
/* Power supply of internal reference voltage (CVRVS0) */
#define _00_VDD_INTERNAL_REFERVOL                     (0x00U) // VDD is selected as power supply of internal reference voltage  
#define _01_AVREFP_INTERNAL_REFERVOL                  (0x01U) // AVREFP is selected as power supply of internal reference voltage 
/* Control bit for internal reference voltage 0 (CVRE0) */
#define _00_COMP0_REFVOLTAGE_DISABLE                  (0x00U) // internal reference voltage 0 operation stopped 
#define _02_COMP0_REFVOLTAGE_ENABLE                   (0x02U) // internal reference voltage 0 operation enabled 
/* Ground selection bit for internal reference voltage (CVRVS1) */
#define _00_VSS_INTERNAL_REFERVOL                     (0x00U) // VSS selected as ground for internal reference voltage
#define _10_AVREFM_INTERNAL_REFERVOL                  (0x10U) // AVREFM selected as ground for internal reference voltage 
/* Control bit for internal reference voltage 1 (CVRE1) */
#define _00_COMP1_REFVOLTAGE_DISABLE                  (0x00U) // internal reference voltage 1 operation stopped
#define _20_COMP1_REFVOLTAGE_ENABLE                   (0x20U) // internal reference voltage 1 operation enabled 


typedef enum
{
    CMP_Vref_VDD_VSS = 0U,        // VDD/VSS selected as power/ground for internal reference voltage
	CMP_Vref_AVREFP_AVREFM = 1U   // AVREFP/AVREFM selected as power/ground for internal reference voltage
}CMP_Vref_t;


typedef enum
{
	CMP_Channel_0  = 1,
	CMP_Channel_1  = 2,
	CMP_Channel_2  = 3,
}	CMP_Channel_t;

typedef enum
{
    CMP0_PositiveSide_VCIN0 = 0,   // external VCIN0 PIN
    CMP0_PositiveSide_PGAO  = 1,   // PGA0OUT signal
    
	CMP0_NegativeSide_IVREF     = 0,	//bulit-in reference voltage,it can choose 256 steps
	CMP0_NegativeSide_BGR       = 1,   // internal voltage reference 1.45v
	CMP0_NegativeSide_VREF     = 2,   //external voltage reference 

	CMP1_PositiveSide_VCIN10   = 0,  // external VCIN10 PIN
	CMP1_PositiveSide_VCIN11   = 1,  // external VCIN11 PIN
	CMP1_PositiveSide_VCIN12   = 2,  // external VCIN12 PIN
	CMP1_PositiveSide_VCIN13   = 3,  // external VCIN13 PIN

	CMP1_NegativeSide_IVREF     = 0,	  //internal voltage reference 1.45v,it can choose 256 steps	
	CMP1_NegativeSide_BGR      = 1,   // cmp1 negative can choose internal voltage reference 1.45v
	CMP1_NegativeSide_VCIN10  = 2,    //cmp1 negative can choose external VCIN10 PIN
	CMP1_NegativeSide_VCIN11  = 3,    //cmp1 negative can choose external VCIN11 PIN
	CMP1_NegativeSide_VCIN12  = 4,    //cmp1 negative can choose external VCIN12 PIN
	CMP1_NegativeSide_VCIN13  = 5,	  //cmp1 negative can choose external VCIN13 PIN
}CMP_Side_t;

typedef enum
{
	 CMP_HyMode_None    = 0,  // None Hy
	 CMP_HyMode_Postive = 1, //positive hy
	 CMP_HyMode_Negative =2, //negative hy
	 CMP_HyMode_Both    = 3, //both side hy	 
}CMP_HyMode_t;

typedef enum
{
	 CMP_HyVal_None   = 0,  // None Hy
	 CMP_HyVal_20mv   = 1, //Comparator Hy 20mV
	 CMP_HyVal_40mv   = 2, //Comparator Hy 40mV
	 CMP_HyVal_60mv   = 3, //Comparator Hy 60mV
}CMP_HyVal_t;

typedef enum
{
	 CMP_IntReq_Rising   = 0,  // Interrupt request at comparator rising edge
	 CMP_IntReq_Falling  = 1, //Interrupt request at comparator falling edge
	 CMP_IntReq_Both     = 2, //Interrupt request at comparator both edge
}CMP_IntReq_t;
typedef enum
{
	 CMP_Int_Disable = 0, // Interrupt disable
	 CMP_Int_Enable  = 1, //Interrupt enable
}CMP_Int_t;
typedef enum
{
	 CMP_Filter_None   = 0, // None Filter
	 CMP_Filter_Fclk  = 1,  // Comparator filter enabled, sampling at fCLK
	 CMP_Filter_Fclk8 = 2,  // Comparator filter enabled, sampling at fCLK/8 
	 CMP_Filter_Fclk32= 3,  // Comparator filter enabled, sampling at fCLK/32
}CMP_Filter_t;

typedef enum
{
	 CMP_Out_Disable = 0, // Disable cmp result to outport
	 CMP_Out_Enable  = 1, //Enable cmp result to outport
}CMP_Out_t;
typedef enum
{
	 CMP_Out_Noraml   = 0, 
	 CMP_Out_Reverse  = 1, 
}CMP_Polarity_t;
typedef struct
{
	CMP_Channel_t CMP_Channel;	/*!< Specifies the channel of comparator.*/
										   	
	CMP_Side_t CMP_PositiveSide;/*!< Specifies the input signal of positive side of comparator 
								 This parameter can be a value of @ref CMP_Side_t */
	CMP_Side_t CMP_NegativeSide;/*!< Specifies the input signal of negative side of comparator 
								 This parameter can be a value of @ref CMP_Side_t */
	CMP_Vref_t CMP_NegVref;  /*!< Specifies the comparator use vdd or avrefp when negative side is CMP0_NegativeSide_IVREF
								 This parameter can be a value of @ref CMP_Vref_t */
	uint8_t CMP_NegVrefVol;  /*!< Specifies the negative side voltage */
	
	CMP_HyMode_t CMP_HyMode; /*!< Specifies the comparator hy mode
								 This parameter can be a value of @ref CMP_HyMode_t */
								 	
	CMP_HyVal_t CMP_HyVal; /*!< Specifies the comparator hy voltage
								 This parameter can be a value of @ref CMP_HyVal_t */	
								 	
	CMP_Filter_t CMP_Filter; /*!< Specifies the comparator hy voltage
							  This parameter can be a value of @ref CMP_HyVal_t */	 
							  	
	CMP_IntReq_t CMP_IntReq;/*!< Specifies generate comparator interrupt request condition 
							   This parameter can be a value of @ref CMP_IntReq_t */
							   	
	CMP_Int_t CMP_Int;/*!< Specifies generate comparator interrupt diasble or enbale
								This parameter can be a value of @ref CMP_Int_t */
	CMP_Out_t CMP_Out2port; /*!< Specifies the comparator result whether output to port or not
								 This parameter can be a value of @ref CMP_Out_t */
	CMP_Polarity_t CMP_Polarity; /*!< Specifies the comparator result whether output to port or not
								 This parameter can be a value of @ref CMP_Out_t */									 
}CMP_InitTypeDef;

void CMP_Init(CMP_InitTypeDef* CMP_InitStruct);
void CMP_Start(CMP_Channel_t ch);
void CMP_Stop(CMP_Channel_t ch);
void CMP_VREF_Set_Value(CMP_Channel_t ch, uint8_t regvalue);
void CMP_Filter_Setting(CMP_Channel_t ch, CMP_Filter_t fck, CMP_IntReq_t edge);

#endif