1 /*********************************************************************************************************//**
2  * @file    ht32f5xxxx_exti.c
3  * @version $Rev:: 6745         $
4  * @date    $Date:: 2023-02-23 #$
5  * @brief   This file provides all the EXTI firmware functions.
6  *************************************************************************************************************
7  * @attention
8  *
9  * Firmware Disclaimer Information
10  *
11  * 1. The customer hereby acknowledges and agrees that the program technical documentation, including the
12  *    code, which is supplied by Holtek Semiconductor Inc., (hereinafter referred to as "HOLTEK") is the
13  *    proprietary and confidential intellectual property of HOLTEK, and is protected by copyright law and
14  *    other intellectual property laws.
15  *
16  * 2. The customer hereby acknowledges and agrees that the program technical documentation, including the
17  *    code, is confidential information belonging to HOLTEK, and must not be disclosed to any third parties
18  *    other than HOLTEK and the customer.
19  *
20  * 3. The program technical documentation, including the code, is provided "as is" and for customer reference
21  *    only. After delivery by HOLTEK, the customer shall use the program technical documentation, including
22  *    the code, at their own risk. HOLTEK disclaims any expressed, implied or statutory warranties, including
23  *    the warranties of merchantability, satisfactory quality and fitness for a particular purpose.
24  *
25  * <h2><center>Copyright (C) Holtek Semiconductor Inc. All rights reserved</center></h2>
26  ************************************************************************************************************/
27 
28 /* Includes ------------------------------------------------------------------------------------------------*/
29 #include "ht32f5xxxx_exti.h"
30 
31 /** @addtogroup HT32F5xxxx_Peripheral_Driver HT32F5xxxx Peripheral Driver
32   * @{
33   */
34 
35 /** @defgroup EXTI EXTI
36   * @brief EXTI driver modules
37   * @{
38   */
39 
40 
41 /* Private constants ---------------------------------------------------------------------------------------*/
42 /** @defgroup EXTI_Private_Define EXTI private definitions
43   * @{
44   */
45 /* EXTI EVWUPIEN mask                                                                                       */
46 #define WAKUPCR_EVWUPIEN_SET      ((u32)0x80000000)
47 #define WAKUPCR_EVWUPIEN_RESET    ((u32)0x7FFFFFFF)
48 
49 #if (LIBCFG_EXTI_8CH)
50   const IRQn_Type gEXTIn_IRQn[16] = {
51     EXTI0_IRQn, EXTI1_IRQn, EXTI2_IRQn, EXTI3_IRQn,
52     EXTI4_IRQn, EXTI5_IRQn, EXTI6_IRQn, EXTI7_IRQn,
53     EXTI0_IRQn, EXTI1_IRQn, EXTI2_IRQn, EXTI3_IRQn,
54     EXTI4_IRQn, EXTI5_IRQn, EXTI6_IRQn, EXTI7_IRQn,
55   };
56 #else
57   const IRQn_Type gEXTIn_IRQn[16] = {
58     EXTI0_IRQn, EXTI1_IRQn, EXTI2_IRQn, EXTI3_IRQn,
59     EXTI4_IRQn, EXTI5_IRQn, EXTI6_IRQn, EXTI7_IRQn,
60     EXTI8_IRQn, EXTI9_IRQn, EXTI10_IRQn, EXTI11_IRQn,
61     EXTI12_IRQn, EXTI13_IRQn, EXTI14_IRQn, EXTI15_IRQn,
62   };
63 #endif
64 /**
65   * @}
66   */
67 
68 /* Global functions ----------------------------------------------------------------------------------------*/
69 /** @defgroup EXTI_Exported_Functions EXTI exported functions
70   * @{
71   */
72 /*********************************************************************************************************//**
73  * @brief Deinitialize the EXTI peripheral registers.
74  * @param EXTI_Channel: can be 0, 1 to 15 to select the EXTI Channel.
75  *   This parameter can be one of the following values:
76  *     @arg EXTI_CHANNEL_0
77  *     @arg EXTI_CHANNEL_1
78  *     @arg EXTI_CHANNEL_2
79  *     @arg EXTI_CHANNEL_3
80  *     @arg EXTI_CHANNEL_4
81  *     @arg EXTI_CHANNEL_5
82  *     @arg EXTI_CHANNEL_6
83  *     @arg EXTI_CHANNEL_7
84  *     @arg EXTI_CHANNEL_8
85  *     @arg EXTI_CHANNEL_9
86  *     @arg EXTI_CHANNEL_10
87  *     @arg EXTI_CHANNEL_11
88  *     @arg EXTI_CHANNEL_12
89  *     @arg EXTI_CHANNEL_13
90  *     @arg EXTI_CHANNEL_14
91  *     @arg EXTI_CHANNEL_15
92  * @retval None
93  ************************************************************************************************************/
EXTI_DeInit(u32 EXTI_Channel)94 void EXTI_DeInit(u32 EXTI_Channel)
95 {
96   u32 tmp;
97 
98   /* Check the parameters                                                                                   */
99   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
100 
101   tmp = 1 << EXTI_Channel;
102 
103   *((u32 *) HT_EXTI + EXTI_Channel) = 0x0;
104   HT_EXTI->CR &= (~tmp);
105   HT_EXTI->EDGEFLGR = tmp;
106   HT_EXTI->EDGESR = tmp;
107   HT_EXTI->SSCR &= (~tmp);
108   HT_EXTI->WAKUPCR &= (~tmp);
109   HT_EXTI->WAKUPPOLR &= (~tmp);
110   HT_EXTI->WAKUPFLG = tmp;
111 }
112 
113 /*********************************************************************************************************//**
114  * @brief Initialize the EXTI peripheral.
115  * @param EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure.
116  * @retval None
117  ************************************************************************************************************/
EXTI_Init(EXTI_InitTypeDef * EXTI_InitStruct)118 void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
119 {
120   u32 regval;
121 
122   /* Check the parameters                                                                                   */
123   Assert_Param(IS_EXTI_CHANNEL(EXTI_InitStruct->EXTI_Channel));
124   Assert_Param(IS_EXTI_DEBOUNCE_TYPE(EXTI_InitStruct->EXTI_Debounce));
125   Assert_Param(IS_EXTI_DEBOUNCE_SIZE(EXTI_InitStruct->EXTI_DebounceCnt));
126   Assert_Param(IS_EXTI_INT_TYPE(EXTI_InitStruct->EXTI_IntType));
127 
128   /* Set EXTI interrupt configuration                                                                       */
129   regval = (EXTI_InitStruct->EXTI_Debounce << 31) | (EXTI_InitStruct->EXTI_IntType << 28) | (EXTI_InitStruct->EXTI_DebounceCnt);
130   *((u32 *) HT_EXTI + EXTI_InitStruct->EXTI_Channel) = regval;
131 }
132 
133 /*********************************************************************************************************//**
134  * @brief Enable or Disable the specified EXTI channelx interrupts.
135  * @param EXTI_Channel: specify the EXTI channel.
136  *   This parameter can be one of the following values:
137  *     @arg EXTI_CHANNEL_0
138  *     @arg EXTI_CHANNEL_1
139  *     @arg EXTI_CHANNEL_2
140  *     @arg EXTI_CHANNEL_3
141  *     @arg EXTI_CHANNEL_4
142  *     @arg EXTI_CHANNEL_5
143  *     @arg EXTI_CHANNEL_6
144  *     @arg EXTI_CHANNEL_7
145  *     @arg EXTI_CHANNEL_8
146  *     @arg EXTI_CHANNEL_9
147  *     @arg EXTI_CHANNEL_10
148  *     @arg EXTI_CHANNEL_11
149  *     @arg EXTI_CHANNEL_12
150  *     @arg EXTI_CHANNEL_13
151  *     @arg EXTI_CHANNEL_14
152  *     @arg EXTI_CHANNEL_15
153  * @param NewState: This parameter can be ENABLE or DISABLE.
154  * @retval None
155  ************************************************************************************************************/
EXTI_IntConfig(u32 EXTI_Channel,ControlStatus NewState)156 void EXTI_IntConfig(u32 EXTI_Channel, ControlStatus NewState)
157 {
158   /* Check the parameters                                                                                   */
159   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
160   Assert_Param(IS_CONTROL_STATUS(NewState));
161 
162   /* Configure EXTI interrupt                                                                               */
163   if (NewState == ENABLE)
164   {
165     HT_EXTI->CR |= (1 << EXTI_Channel);
166   }
167   else
168   {
169     HT_EXTI->CR &= ~(1 << EXTI_Channel);
170   }
171 }
172 
173 #if (LIBCFG_EXTI_DEBCNTPRE)
174 /*********************************************************************************************************//**
175  * @brief Configure the Debounce Counter prescaler.
176  * @param EXTI_DebCntPre_DIVn: specify the prescaler value.
177  *   This parameter can be one of the following values:
178  *     @arg EXTI_DBCNTPRE_DIV1    : CK_DBCNT = EXTI_PCLK / 1
179  *     @arg EXTI_DBCNTPRE_DIV2    : CK_DBCNT = EXTI_PCLK / 2
180  *     @arg EXTI_DBCNTPRE_DIV4    : CK_DBCNT = EXTI_PCLK / 4
181  *     @arg EXTI_DBCNTPRE_DIV8    : CK_DBCNT = EXTI_PCLK / 8
182  *     @arg EXTI_DBCNTPRE_DIV16   : CK_DBCNT = EXTI_PCLK / 16
183  *     @arg EXTI_DBCNTPRE_DIV32   : CK_DBCNT = EXTI_PCLK / 32
184  *     @arg EXTI_DBCNTPRE_DIV64   : CK_DBCNT = EXTI_PCLK / 64
185  *     @arg EXTI_DBCNTPRE_DIV128  : CK_DBCNT = EXTI_PCLK / 128
186  * @retval None
187  ************************************************************************************************************/
EXTI_SetDebounceCounterPrescaler(EXTI_DebCntPre_TypeDef EXTI_DBCNTPRE_DIVn)188 void EXTI_SetDebounceCounterPrescaler(EXTI_DebCntPre_TypeDef EXTI_DBCNTPRE_DIVn)
189 {
190   /* Check the parameters */
191   Assert_Param(IS_EXTI_DEBOUNCE_COUNTER_PRESCALER(EXTI_DBCNTPRE_DIVn));
192 
193   HT_EXTI->CFGR0 = ((HT_EXTI->CFGR0 & 0xF8FFFFFF) | (EXTI_DBCNTPRE_DIVn << 24));
194 }
195 #endif
196 
197 /*********************************************************************************************************//**
198  * @brief Configure the EXTI channelx event wakeup function.
199  * @param EXTI_Channel: specify the EXTI channel.
200  *   This parameter can be one of the following values:
201  *     @arg EXTI_CHANNEL_0
202  *     @arg EXTI_CHANNEL_1
203  *     @arg EXTI_CHANNEL_2
204  *     @arg EXTI_CHANNEL_3
205  *     @arg EXTI_CHANNEL_4
206  *     @arg EXTI_CHANNEL_5
207  *     @arg EXTI_CHANNEL_6
208  *     @arg EXTI_CHANNEL_7
209  *     @arg EXTI_CHANNEL_8
210  *     @arg EXTI_CHANNEL_9
211  *     @arg EXTI_CHANNEL_10
212  *     @arg EXTI_CHANNEL_11
213  *     @arg EXTI_CHANNEL_12
214  *     @arg EXTI_CHANNEL_13
215  *     @arg EXTI_CHANNEL_14
216  *     @arg EXTI_CHANNEL_15
217  * @param EXTI_WakeUpType: determines the type of signal to trigger EXTI interrupt.
218  *   This parameter can be one of the following values:
219  *     @arg EXTI_WAKEUP_HIGH_LEVEL
220  *     @arg EXTI_WAKEUP_LOW_LEVEL
221  * @param NewState: This parameter can be ENABLE or DISABLE.
222  * @retval None
223  ************************************************************************************************************/
EXTI_WakeupEventConfig(u32 EXTI_Channel,u8 EXTI_WakeUpType,ControlStatus NewState)224 void EXTI_WakeupEventConfig(u32 EXTI_Channel, u8 EXTI_WakeUpType, ControlStatus NewState)
225 {
226   /* Check the parameters                                                                                   */
227   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
228   Assert_Param(IS_EXTI_WAKEUP_TYPE(EXTI_WakeUpType));
229   Assert_Param(IS_CONTROL_STATUS(NewState));
230 
231   if (NewState == ENABLE)
232   {
233     if (EXTI_WakeUpType == EXTI_WAKEUP_HIGH_LEVEL)
234     {
235       HT_EXTI->WAKUPPOLR &= ~(1 << EXTI_Channel);
236     }
237     else
238     {
239       HT_EXTI->WAKUPPOLR |= (1 << EXTI_Channel);
240     }
241 
242     HT_EXTI->WAKUPCR |=  (1 << EXTI_Channel);
243   }
244   else
245   {
246     HT_EXTI->WAKUPCR &= ~(1 << EXTI_Channel);
247   }
248 }
249 
250 /*********************************************************************************************************//**
251  * @brief Enable or Disable the EXTI channelx event wakeup interrupt.
252  * @param NewState: This parameter can be ENABLE or DISABLE.
253  * @retval None
254  ************************************************************************************************************/
EXTI_WakeupEventIntConfig(ControlStatus NewState)255 void EXTI_WakeupEventIntConfig(ControlStatus NewState)
256 {
257   if (NewState == ENABLE)
258   {
259     /* Set EVWUPIEN bit                                                                                     */
260     HT_EXTI->WAKUPCR |= WAKUPCR_EVWUPIEN_SET;
261   }
262   else
263   {
264     /* Clear EVWUPIEN bit                                                                                   */
265     HT_EXTI->WAKUPCR &= WAKUPCR_EVWUPIEN_RESET;
266   }
267 }
268 
269 /*********************************************************************************************************//**
270  * @brief Clear the specified EXTI channelx edge flag.
271  * @param EXTI_Channel: specify the EXTI channel.
272  *   This parameter can be one of the following values:
273  *     @arg EXTI_CHANNEL_0
274  *     @arg EXTI_CHANNEL_1
275  *     @arg EXTI_CHANNEL_2
276  *     @arg EXTI_CHANNEL_3
277  *     @arg EXTI_CHANNEL_4
278  *     @arg EXTI_CHANNEL_5
279  *     @arg EXTI_CHANNEL_6
280  *     @arg EXTI_CHANNEL_7
281  *     @arg EXTI_CHANNEL_8
282  *     @arg EXTI_CHANNEL_9
283  *     @arg EXTI_CHANNEL_10
284  *     @arg EXTI_CHANNEL_11
285  *     @arg EXTI_CHANNEL_12
286  *     @arg EXTI_CHANNEL_13
287  *     @arg EXTI_CHANNEL_14
288  *     @arg EXTI_CHANNEL_15
289  * @retval None
290  ************************************************************************************************************/
EXTI_ClearEdgeFlag(u32 EXTI_Channel)291 void EXTI_ClearEdgeFlag(u32 EXTI_Channel)
292 {
293   u32 tmp;
294 
295   /* Check the parameters                                                                                   */
296   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
297 
298   tmp = 1 << EXTI_Channel;
299 
300   /* Write 1 to clear both edge detection flag                                                              */
301   HT_EXTI->EDGEFLGR = tmp;
302   /* Write 1 to clear positive edge detection flag                                                          */
303   HT_EXTI->EDGESR = tmp;
304 }
305 
306 /*********************************************************************************************************//**
307  * @brief Clear the specified EXTI channelx wakeup flag.
308  * @param EXTI_Channel: specify the EXTI channel.
309  *   This parameter can be one of the following values:
310  *     @arg EXTI_CHANNEL_0
311  *     @arg EXTI_CHANNEL_1
312  *     @arg EXTI_CHANNEL_2
313  *     @arg EXTI_CHANNEL_3
314  *     @arg EXTI_CHANNEL_4
315  *     @arg EXTI_CHANNEL_5
316  *     @arg EXTI_CHANNEL_6
317  *     @arg EXTI_CHANNEL_7
318  *     @arg EXTI_CHANNEL_8
319  *     @arg EXTI_CHANNEL_9
320  *     @arg EXTI_CHANNEL_10
321  *     @arg EXTI_CHANNEL_11
322  *     @arg EXTI_CHANNEL_12
323  *     @arg EXTI_CHANNEL_13
324  *     @arg EXTI_CHANNEL_14
325  *     @arg EXTI_CHANNEL_15
326  * @retval None
327  ************************************************************************************************************/
EXTI_ClearWakeupFlag(u32 EXTI_Channel)328 void EXTI_ClearWakeupFlag(u32 EXTI_Channel)
329 {
330   /* Check the parameters                                                                                   */
331   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
332 
333   /* Write 1 to clear wake up flag                                                                          */
334   HT_EXTI->WAKUPFLG = 1 << EXTI_Channel;
335 
336   /*--------------------------------------------------------------------------------------------------------*/
337   /* DSB instruction is added in this function to ensure the write operation which is for clearing interrupt*/
338   /* flag is actually completed before exiting ISR. It prevents the NVIC from detecting the interrupt again */
339   /* since the write register operation may be pended in the internal write buffer of Cortex-Mx when program*/
340   /* has exited interrupt routine. This DSB instruction may be masked if this function is called in the     */
341   /* beginning of ISR and there are still some instructions before exiting ISR.                             */
342   /*--------------------------------------------------------------------------------------------------------*/
343   __DSB();
344 }
345 
346 /*********************************************************************************************************//**
347  * @brief Get the specified EXTI channelx edge flag.
348  * @param EXTI_Channel: specify the EXTI channel.
349  *   This parameter can be one of the following values:
350  *     @arg EXTI_CHANNEL_0
351  *     @arg EXTI_CHANNEL_1
352  *     @arg EXTI_CHANNEL_2
353  *     @arg EXTI_CHANNEL_3
354  *     @arg EXTI_CHANNEL_4
355  *     @arg EXTI_CHANNEL_5
356  *     @arg EXTI_CHANNEL_6
357  *     @arg EXTI_CHANNEL_7
358  *     @arg EXTI_CHANNEL_8
359  *     @arg EXTI_CHANNEL_9
360  *     @arg EXTI_CHANNEL_10
361  *     @arg EXTI_CHANNEL_11
362  *     @arg EXTI_CHANNEL_12
363  *     @arg EXTI_CHANNEL_13
364  *     @arg EXTI_CHANNEL_14
365  *     @arg EXTI_CHANNEL_15
366  * @retval SET or RESET
367  ************************************************************************************************************/
EXTI_GetEdgeFlag(u32 EXTI_Channel)368 FlagStatus EXTI_GetEdgeFlag(u32 EXTI_Channel)
369 {
370   /* Check the parameters                                                                                   */
371   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
372 
373   return ((HT_EXTI->EDGEFLGR & (1UL << EXTI_Channel)) ? SET : RESET);
374 }
375 
376 /*********************************************************************************************************//**
377  * @brief Get the specified EXTI channelx edge status.
378  * @param EXTI_Channel: specify the EXTI channel.
379  *   This parameter can be one of the following values:
380  *     @arg EXTI_CHANNEL_0
381  *     @arg EXTI_CHANNEL_1
382  *     @arg EXTI_CHANNEL_2
383  *     @arg EXTI_CHANNEL_3
384  *     @arg EXTI_CHANNEL_4
385  *     @arg EXTI_CHANNEL_5
386  *     @arg EXTI_CHANNEL_6
387  *     @arg EXTI_CHANNEL_7
388  *     @arg EXTI_CHANNEL_8
389  *     @arg EXTI_CHANNEL_9
390  *     @arg EXTI_CHANNEL_10
391  *     @arg EXTI_CHANNEL_11
392  *     @arg EXTI_CHANNEL_12
393  *     @arg EXTI_CHANNEL_13
394  *     @arg EXTI_CHANNEL_14
395  *     @arg EXTI_CHANNEL_15
396  * @param EXTI_Edge: can be status of edge that user want to monitor.
397  *   This parameter can be one of the following values:
398  *     @arg EXTI_EDGE_POSITIVE
399  *     @arg EXTI_EDGE_NEGATIVE
400  * @retval SET or RESET
401  ************************************************************************************************************/
EXTI_GetEdgeStatus(u32 EXTI_Channel,u32 EXTI_Edge)402 FlagStatus EXTI_GetEdgeStatus(u32 EXTI_Channel, u32 EXTI_Edge)
403 {
404   /* Check the parameters                                                                                   */
405   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
406   Assert_Param(IS_EXTI_EDGE(EXTI_Edge));
407 
408   if (HT_EXTI->EDGEFLGR & (1UL << EXTI_Channel))
409   {
410     if (GetBit_BB((u32)&HT_EXTI->EDGESR, EXTI_Channel) ^ EXTI_Edge)
411     {
412       return SET;
413     }
414     else
415     {
416       return RESET;
417     }
418   }
419   else
420   {
421     return RESET;
422   }
423 }
424 
425 /*********************************************************************************************************//**
426  * @brief Get the specified EXTI channelx wakeup flag.
427  * @param EXTI_Channel: specify the EXTI channel.
428  *   This parameter can be one of the following values:
429  *     @arg EXTI_CHANNEL_0
430  *     @arg EXTI_CHANNEL_1
431  *     @arg EXTI_CHANNEL_2
432  *     @arg EXTI_CHANNEL_3
433  *     @arg EXTI_CHANNEL_4
434  *     @arg EXTI_CHANNEL_5
435  *     @arg EXTI_CHANNEL_6
436  *     @arg EXTI_CHANNEL_7
437  *     @arg EXTI_CHANNEL_8
438  *     @arg EXTI_CHANNEL_9
439  *     @arg EXTI_CHANNEL_10
440  *     @arg EXTI_CHANNEL_11
441  *     @arg EXTI_CHANNEL_12
442  *     @arg EXTI_CHANNEL_13
443  *     @arg EXTI_CHANNEL_14
444  *     @arg EXTI_CHANNEL_15
445  * @retval SET or RESET
446  ************************************************************************************************************/
EXTI_GetWakeupFlagStatus(u32 EXTI_Channel)447 FlagStatus EXTI_GetWakeupFlagStatus(u32 EXTI_Channel)
448 {
449   /* Check the parameters                                                                                   */
450   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
451 
452   if (HT_EXTI->WAKUPFLG & (1 << EXTI_Channel))
453   {
454     return SET;
455   }
456   else
457   {
458     return RESET;
459   }
460 }
461 
462 /*********************************************************************************************************//**
463  * @brief Activate or Deactivate an EXTI channelx interrupt by software.
464  * @param EXTI_Channel: specify the EXTI channel.
465  *   This parameter can be one of the following values:
466  *     @arg EXTI_CHANNEL_0
467  *     @arg EXTI_CHANNEL_1
468  *     @arg EXTI_CHANNEL_2
469  *     @arg EXTI_CHANNEL_3
470  *     @arg EXTI_CHANNEL_4
471  *     @arg EXTI_CHANNEL_5
472  *     @arg EXTI_CHANNEL_6
473  *     @arg EXTI_CHANNEL_7
474  *     @arg EXTI_CHANNEL_8
475  *     @arg EXTI_CHANNEL_9
476  *     @arg EXTI_CHANNEL_10
477  *     @arg EXTI_CHANNEL_11
478  *     @arg EXTI_CHANNEL_12
479  *     @arg EXTI_CHANNEL_13
480  *     @arg EXTI_CHANNEL_14
481  *     @arg EXTI_CHANNEL_15
482  * @param NewState: This parameter can be ENABLE or DISABLE.
483  * @retval None
484  ************************************************************************************************************/
EXTI_SWIntCmd(u32 EXTI_Channel,ControlStatus NewState)485 void EXTI_SWIntCmd(u32 EXTI_Channel, ControlStatus NewState)
486 {
487   /* Check the parameters                                                                                   */
488   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
489   Assert_Param(IS_CONTROL_STATUS(NewState));
490 
491   if (NewState == ENABLE)
492   {
493     HT_EXTI->SSCR = 1 << EXTI_Channel;
494   }
495   else
496   {
497     HT_EXTI->SSCR &= ~(1 << EXTI_Channel);
498   }
499 }
500 
501 /*********************************************************************************************************//**
502  * @brief Get the specified EXTI channelx software command register bit.
503  * @param EXTI_Channel: specify the EXTI channel.
504  *   This parameter can be one of the following values:
505  *     @arg EXTI_CHANNEL_0
506  *     @arg EXTI_CHANNEL_1
507  *     @arg EXTI_CHANNEL_2
508  *     @arg EXTI_CHANNEL_3
509  *     @arg EXTI_CHANNEL_4
510  *     @arg EXTI_CHANNEL_5
511  *     @arg EXTI_CHANNEL_6
512  *     @arg EXTI_CHANNEL_7
513  *     @arg EXTI_CHANNEL_8
514  *     @arg EXTI_CHANNEL_9
515  *     @arg EXTI_CHANNEL_10
516  *     @arg EXTI_CHANNEL_11
517  *     @arg EXTI_CHANNEL_12
518  *     @arg EXTI_CHANNEL_13
519  *     @arg EXTI_CHANNEL_14
520  *     @arg EXTI_CHANNEL_15
521  * @retval SET or RESET
522  ************************************************************************************************************/
EXTI_GetSWCmdStatus(u32 EXTI_Channel)523 FlagStatus EXTI_GetSWCmdStatus(u32 EXTI_Channel)
524 {
525   /* Check the parameters                                                                                   */
526   Assert_Param(IS_EXTI_CHANNEL(EXTI_Channel));
527 
528   if (HT_EXTI->SSCR & (1 << EXTI_Channel))
529   {
530     return SET;
531   }
532   else
533   {
534     return RESET;
535   }
536 }
537 /**
538   * @}
539   */
540 
541 
542 /**
543   * @}
544   */
545 
546 /**
547   * @}
548   */
549