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