1 /*
2 * Copyright (c) 2006-2020, YICHIP Development Team
3 * @file yc_exit.c
4 * @brief source file for setting exit
5 *
6 * Change Logs:
7 * Date Author Version Notes
8 * 2021-12-24 yangzhengfeng V1.0.0 Modify the register module configuration
9 * 2021-01-03 wangjingfan V1.0.1 Compile error correction
10 * 2021-01-20 yangzhengfeng V1.0.2 Update library function
11 */
12
13 #include "yc_exti.h"
14
15 /**
16 * @brief Clear interrupt flag
17 * @param EXTI_Line:EXTI_Line_0...EXTI_Line_4
18 * @param EXTI_PinSource:EXTI_PinSource0...EXTI_PinSource15
19 * @retval none
20 */
EXTI_ClearITPendingBit(EXTI_LineTypeDef EXTI_Line,EXTI_PIN_TypeDef EXTI_PinSource)21 void EXTI_ClearITPendingBit(EXTI_LineTypeDef EXTI_Line, EXTI_PIN_TypeDef EXTI_PinSource)
22 {
23 _ASSERT(IS_EXTI_LINE(EXTI_Line));
24 _ASSERT(IS_EXTI_PIN_SOURCE(EXTI_PinSource));
25
26 MGPIO->IRQ_STATUS.reg[EXTI_Line] |= EXTI_PinSource;
27 }
28
29 /**
30 * @brief Deinitializes the EXTI registers to default reset values.
31 * @param none
32 * @retval none
33 */
EXTI_DeInit()34 void EXTI_DeInit()
35 {
36 uint32_t i;
37
38 for (i = 0; i < EXIT_Num; i++)
39 {
40 MGPIO->INTR.reg[i] = 0;
41 MGPIO->IRQ_LEVEL.reg[i] = 0;
42 MGPIO->IRQ_RISE.reg[i] = 0;
43 MGPIO->IRQ_FALL.reg[i] = 0;
44 }
45 }
46
47 /**
48 * @brief get interrupt status
49 * @param EXTI_Line:EXTI_Line_0...EXTI_Line_4
50 * @retval none
51 */
EXTI_GetITLineStatus(EXTI_LineTypeDef EXTI_Line)52 uint16_t EXTI_GetITLineStatus(EXTI_LineTypeDef EXTI_Line)
53 {
54 _ASSERT(IS_EXTI_LINE(EXTI_Line));
55
56 return MGPIO->INTR.reg[EXTI_Line];
57 }
58
59 /**
60 * @brief get interrupt pinsource status
61 * @param EXTI_Line:EXTI_Line_0...EXTI_Line_4
62 * @param EXTI_PinSource:EXTI_PinSource0...EXTI_PinSource15
63 * @retval none
64 */
EXTI_GetITEXTI_PinSourceStatus(EXTI_LineTypeDef EXTI_Line,EXTI_PIN_TypeDef EXTI_PinSource)65 uint16_t EXTI_GetITEXTI_PinSourceStatus(EXTI_LineTypeDef EXTI_Line, EXTI_PIN_TypeDef EXTI_PinSource)
66 {
67 _ASSERT(IS_EXTI_LINE(EXTI_Line));
68 _ASSERT(IS_EXTI_PIN_SOURCE(EXTI_PinSource));
69
70 if(MGPIO->INTR.reg[EXTI_Line] & EXTI_PinSource)
71 {
72 return ENABLE;
73 }
74 else
75 {
76 return DISABLE;
77 }
78
79 }
80
81 /**
82 * @brief EXTI LineConfig
83 * @param EXTI_Line:EXTI_Line_0...EXTI_Line_4
84 * @param EXTI_PinSource:EXTI_PinSource0...EXTI_PinSource15
85 * @param EXTI_Trigger:EXTI Trigger mode
86 * @retval none
87 */
EXTI_LineConfig(EXTI_LineTypeDef EXTI_Line,EXTI_PIN_TypeDef EXTI_PinSource,EXTI_TriggerTypeDef EXTI_Trigger)88 void EXTI_LineConfig(EXTI_LineTypeDef EXTI_Line, EXTI_PIN_TypeDef EXTI_PinSource, EXTI_TriggerTypeDef EXTI_Trigger)
89 {
90 _ASSERT(IS_EXTI_LINE(EXTI_Line));
91 _ASSERT(IS_EXTI_PIN_SOURCE(EXTI_PinSource));
92 _ASSERT(IS_TRIG_TYPEDEF(EXTI_Trigger));
93
94 uint16_t val_intr_lts,val_intr_rts,val_intr_fts,val_intr_en;
95 switch (EXTI_Trigger)
96 {
97 case EXTI_Trigger_Off:
98 val_intr_en = ~EXTI_PinSource;
99 val_intr_lts = ~EXTI_PinSource;
100 val_intr_rts = ~EXTI_PinSource;
101 val_intr_fts = ~EXTI_PinSource;
102 break;
103 case EXTI_Trigger_HighLev:
104 val_intr_en = EXTI_PinSource;
105 val_intr_lts = ~EXTI_PinSource;
106 val_intr_rts = ~EXTI_PinSource;
107 val_intr_fts = ~EXTI_PinSource;
108 break;
109 case EXTI_Trigger_LowLev:
110 val_intr_en = EXTI_PinSource;
111 val_intr_lts = EXTI_PinSource;
112 val_intr_rts = ~EXTI_PinSource;
113 val_intr_fts = ~EXTI_PinSource;
114 break;
115 case EXTI_Trigger_Rising:
116 val_intr_en = EXTI_PinSource;
117 val_intr_lts = ~EXTI_PinSource;
118 val_intr_rts = EXTI_PinSource;
119 val_intr_fts = ~EXTI_PinSource;
120 break;
121 case EXTI_Trigger_Falling:
122 val_intr_en = EXTI_PinSource;
123 val_intr_lts = ~EXTI_PinSource;
124 val_intr_rts = ~EXTI_PinSource;
125 val_intr_fts = EXTI_PinSource;
126 break;
127 case EXTI_Trigger_Rising_Falling:
128 val_intr_en = EXTI_PinSource;
129 val_intr_lts = ~EXTI_PinSource;
130 val_intr_rts = EXTI_PinSource;
131 val_intr_fts = EXTI_PinSource;
132 break;
133 default:
134 break;
135 }
136 if (EXTI_Trigger == EXTI_Trigger_Off)
137 {
138 MGPIO->INTR.reg[EXTI_Line] &= val_intr_en;
139 MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
140 MGPIO->IRQ_RISE.reg[EXTI_Line] &= val_intr_rts;
141 MGPIO->IRQ_FALL.reg[EXTI_Line] &= val_intr_fts;
142 }
143 else if (EXTI_Trigger == EXTI_Trigger_HighLev )
144 {
145 MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
146 MGPIO->IRQ_RISE.reg[EXTI_Line] &= val_intr_rts;
147 MGPIO->IRQ_FALL.reg[EXTI_Line] &= val_intr_fts;
148 MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
149 }
150 else if (EXTI_Trigger == EXTI_Trigger_LowLev )
151 {
152 MGPIO->IRQ_LEVEL.reg[EXTI_Line] |= val_intr_lts;
153 MGPIO->IRQ_RISE.reg[EXTI_Line] &= val_intr_rts;
154 MGPIO->IRQ_FALL.reg[EXTI_Line] &= val_intr_fts;
155 MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
156 }
157 else if (EXTI_Trigger == EXTI_Trigger_Rising )
158 {
159 MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
160 MGPIO->IRQ_RISE.reg[EXTI_Line] |= val_intr_rts;
161 MGPIO->IRQ_FALL.reg[EXTI_Line] &= val_intr_fts;
162 MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
163 }
164 else if (EXTI_Trigger == EXTI_Trigger_Falling )
165 {
166 MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
167 MGPIO->IRQ_RISE.reg[EXTI_Line] &= val_intr_rts;
168 MGPIO->IRQ_FALL.reg[EXTI_Line] |= val_intr_fts;
169 MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
170 }
171 else if (EXTI_Trigger == EXTI_Trigger_Rising_Falling )
172 {
173 MGPIO->IRQ_LEVEL.reg[EXTI_Line] &= val_intr_lts;
174 MGPIO->IRQ_RISE.reg[EXTI_Line] |= val_intr_rts;
175 MGPIO->IRQ_FALL.reg[EXTI_Line] |= val_intr_fts;
176 MGPIO->INTR.reg[EXTI_Line] |= val_intr_en;
177 }
178 }
179
180 //extern void VBAT_IRQHandler(void);
181 //extern void EXTI0_IRQHandler(void);
182 //extern void EXTI1_IRQHandler(void);
183 //extern void EXTI2_IRQHandler(void);
184 //extern void EXTI3_IRQHandler(void);
185 //extern void EXTI4_IRQHandler(void);
186
187 //void GPIO_IRQHandler()
188 //{
189 // uint8_t Exti_irq_index;
190
191 // NVIC_DisableIRQ(GPIO_IRQn);
192
193 // if (MSYSCTRL->CHGR_EVENT_IRQ.bit.VBAT_OV & MSYSCTRL->CHGR_EVENT_ICTRL.bit.VBAT_OV_IE)
194 // {
195 // //VBAT_IRQHandler();
196 // }
197
198 // Exti_irq_index = MGPIO->IRQ_NUM.reg;
199 // if(MGPIO->INTR.reg[Exti_irq_index/EXIT_Pin_Num] &(1 << (Exti_irq_index%EXIT_Pin_Num)))
200 // {
201 // switch (Exti_irq_index/EXIT_Pin_Num)
202 // {
203 // case EXTI_Line_0:
204 // EXTI0_IRQHandler();
205 // break;
206 // case EXTI_Line_1:
207 // EXTI1_IRQHandler();
208 // break;
209 // case EXTI_Line_2:
210 // EXTI2_IRQHandler();
211 // break;
212 // case EXTI_Line_3:
213 // EXTI3_IRQHandler();
214 // break;
215
216 // case EXTI_Line_4:
217 // EXTI4_IRQHandler();
218 // break;
219 // default:
220 // break;
221 // }
222 // EXTI_ClearITPendingBit((EXTI_LineTypeDef)(Exti_irq_index/EXIT_Pin_Num),(EXTI_PIN_TypeDef)(BIT(Exti_irq_index%EXIT_Pin_Num)));
223 // }
224 // NVIC_EnableIRQ(GPIO_IRQn);
225 //}
226
227 /************************ (C) COPYRIGHT Yichip Microelectronics *****END OF FILE****/
228