stm32f10x_exti.c
上传用户:yj_qqy
上传日期:2017-01-28
资源大小:2911k
文件大小:9k
源码类别:

uCOS

开发平台:

C/C++

  1. /******************** (C) COPYRIGHT 2008 STMicroelectronics ********************
  2. * File Name          : stm32f10x_exti.c
  3. * Author             : MCD Application Team
  4. * Version            : V2.0.2
  5. * Date               : 07/11/2008
  6. * Description        : This file provides all the EXTI firmware functions.
  7. ********************************************************************************
  8. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  9. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  10. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  11. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  12. * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  13. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  14. *******************************************************************************/
  15. /* Includes ------------------------------------------------------------------*/
  16. #include "stm32f10x_exti.h"
  17. /* Private typedef -----------------------------------------------------------*/
  18. /* Private define ------------------------------------------------------------*/
  19. #define EXTI_LineNone    ((u32)0x00000)  /* No interrupt selected */
  20. /* Private macro -------------------------------------------------------------*/
  21. /* Private variables ---------------------------------------------------------*/
  22. /* Private function prototypes -----------------------------------------------*/
  23. /* Private functions ---------------------------------------------------------*/
  24. /*******************************************************************************
  25. * Function Name  : EXTI_DeInit
  26. * Description    : Deinitializes the EXTI peripheral registers to their default 
  27. *                  reset values.
  28. * Input          : None
  29. * Output         : None
  30. * Return         : None
  31. *******************************************************************************/
  32. void EXTI_DeInit(void)
  33. {
  34.   EXTI->IMR = 0x00000000;
  35.   EXTI->EMR = 0x00000000;
  36.   EXTI->RTSR = 0x00000000; 
  37.   EXTI->FTSR = 0x00000000; 
  38.   EXTI->PR = 0x0007FFFF;
  39. }
  40. /*******************************************************************************
  41. * Function Name  : EXTI_Init
  42. * Description    : Initializes the EXTI peripheral according to the specified
  43. *                  parameters in the EXTI_InitStruct.
  44. * Input          : - EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure
  45. *                    that contains the configuration information for the EXTI
  46. *                    peripheral.
  47. * Output         : None
  48. * Return         : None
  49. *******************************************************************************/
  50. void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)
  51. {
  52.   /* Check the parameters */
  53.   assert_param(IS_EXTI_MODE(EXTI_InitStruct->EXTI_Mode));
  54.   assert_param(IS_EXTI_TRIGGER(EXTI_InitStruct->EXTI_Trigger));
  55.   assert_param(IS_EXTI_LINE(EXTI_InitStruct->EXTI_Line));  
  56.   assert_param(IS_FUNCTIONAL_STATE(EXTI_InitStruct->EXTI_LineCmd));
  57.      
  58.   if (EXTI_InitStruct->EXTI_LineCmd != DISABLE)
  59.   {
  60.     /* Clear EXTI line configuration */
  61.     EXTI->IMR &= ~EXTI_InitStruct->EXTI_Line;
  62.     EXTI->EMR &= ~EXTI_InitStruct->EXTI_Line;
  63.     
  64.     *(vu32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Mode)|= EXTI_InitStruct->EXTI_Line;
  65.     /* Clear Rising Falling edge configuration */
  66.     EXTI->RTSR &= ~EXTI_InitStruct->EXTI_Line;
  67.     EXTI->FTSR &= ~EXTI_InitStruct->EXTI_Line;
  68.     
  69.     /* Select the trigger for the selected external interrupts */
  70.     if (EXTI_InitStruct->EXTI_Trigger == EXTI_Trigger_Rising_Falling)
  71.     {
  72.       /* Rising Falling edge */
  73.       EXTI->RTSR |= EXTI_InitStruct->EXTI_Line;
  74.       EXTI->FTSR |= EXTI_InitStruct->EXTI_Line;
  75.     }
  76.     else
  77.     {
  78.       *(vu32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Trigger)|= EXTI_InitStruct->EXTI_Line;
  79.     }
  80.   }
  81.   else
  82.   {
  83.     /* Disable the selected external lines */
  84.     *(vu32 *)(EXTI_BASE + (u32)EXTI_InitStruct->EXTI_Mode)&= ~EXTI_InitStruct->EXTI_Line;
  85.   }
  86. }
  87. /*******************************************************************************
  88. * Function Name  : EXTI_StructInit
  89. * Description    : Fills each EXTI_InitStruct member with its reset value.
  90. * Input          : - EXTI_InitStruct: pointer to a EXTI_InitTypeDef structure
  91. *                    which will be initialized.
  92. * Output         : None
  93. * Return         : None
  94. *******************************************************************************/
  95. void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct)
  96. {
  97.   EXTI_InitStruct->EXTI_Line = EXTI_LineNone;
  98.   EXTI_InitStruct->EXTI_Mode = EXTI_Mode_Interrupt;
  99.   EXTI_InitStruct->EXTI_Trigger = EXTI_Trigger_Falling;
  100.   EXTI_InitStruct->EXTI_LineCmd = DISABLE;
  101. }
  102. /*******************************************************************************
  103. * Function Name  : EXTI_GenerateSWInterrupt
  104. * Description    : Generates a Software interrupt.
  105. * Input          : - EXTI_Line: specifies the EXTI lines to be enabled or
  106. *                    disabled.
  107. *                    This parameter can be any combination of EXTI_Linex where 
  108. *                    x can be (0..18).
  109. * Output         : None
  110. * Return         : None
  111. *******************************************************************************/
  112. void EXTI_GenerateSWInterrupt(u32 EXTI_Line)
  113. {
  114.   /* Check the parameters */
  115.   assert_param(IS_EXTI_LINE(EXTI_Line));
  116.   
  117.   EXTI->SWIER |= EXTI_Line;
  118. }
  119. /*******************************************************************************
  120. * Function Name  : EXTI_GetFlagStatus
  121. * Description    : Checks whether the specified EXTI line flag is set or not.
  122. * Input          : - EXTI_Line: specifies the EXTI line flag to check.
  123. *                    This parameter can be:
  124. *                       - EXTI_Linex: External interrupt line x where x(0..18)
  125. * Output         : None
  126. * Return         : The new state of EXTI_Line (SET or RESET).
  127. *******************************************************************************/
  128. FlagStatus EXTI_GetFlagStatus(u32 EXTI_Line)
  129. {
  130.   FlagStatus bitstatus = RESET;
  131.   /* Check the parameters */
  132.   assert_param(IS_GET_EXTI_LINE(EXTI_Line));
  133.   
  134.   if ((EXTI->PR & EXTI_Line) != (u32)RESET)
  135.   {
  136.     bitstatus = SET;
  137.   }
  138.   else
  139.   {
  140.     bitstatus = RESET;
  141.   }
  142.   return bitstatus;
  143. }
  144. /*******************************************************************************
  145. * Function Name  : EXTI_ClearFlag
  146. * Description    : Clears the EXTI抯 line pending flags.
  147. * Input          : - EXTI_Line: specifies the EXTI lines flags to clear.
  148. *                    This parameter can be any combination of EXTI_Linex where 
  149. *                    x can be (0..18).
  150. * Output         : None
  151. * Return         : None
  152. *******************************************************************************/
  153. void EXTI_ClearFlag(u32 EXTI_Line)
  154. {
  155.   /* Check the parameters */
  156.   assert_param(IS_EXTI_LINE(EXTI_Line));
  157.   
  158.   EXTI->PR = EXTI_Line;
  159. }
  160. /*******************************************************************************
  161. * Function Name  : EXTI_GetITStatus
  162. * Description    : Checks whether the specified EXTI line is asserted or not.
  163. * Input          : - EXTI_Line: specifies the EXTI line to check.
  164. *                    This parameter can be:
  165. *                       - EXTI_Linex: External interrupt line x where x(0..18)
  166. * Output         : None
  167. * Return         : The new state of EXTI_Line (SET or RESET).
  168. *******************************************************************************/
  169. ITStatus EXTI_GetITStatus(u32 EXTI_Line)
  170. {
  171.   ITStatus bitstatus = RESET;
  172.   u32 enablestatus = 0;
  173.   /* Check the parameters */
  174.   assert_param(IS_GET_EXTI_LINE(EXTI_Line));
  175.   
  176.   enablestatus =  EXTI->IMR & EXTI_Line;
  177.   if (((EXTI->PR & EXTI_Line) != (u32)RESET) && (enablestatus != (u32)RESET))
  178.   {
  179.     bitstatus = SET;
  180.   }
  181.   else
  182.   {
  183.     bitstatus = RESET;
  184.   }
  185.   return bitstatus;
  186. }
  187. /*******************************************************************************
  188. * Function Name  : EXTI_ClearITPendingBit
  189. * Description    : Clears the EXTI抯 line pending bits.
  190. * Input          : - EXTI_Line: specifies the EXTI lines to clear.
  191. *                    This parameter can be any combination of EXTI_Linex where 
  192. *                    x can be (0..18).
  193. * Output         : None
  194. * Return         : None
  195. *******************************************************************************/
  196. void EXTI_ClearITPendingBit(u32 EXTI_Line)
  197. {
  198.   /* Check the parameters */
  199.   assert_param(IS_EXTI_LINE(EXTI_Line));
  200.   
  201.   EXTI->PR = EXTI_Line;
  202. }
  203. /******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/