summaryrefslogtreecommitdiffstats
path: root/uc_str912/prj_blinky_simple_startup/str91x_lib/src/91x_tim.c
diff options
context:
space:
mode:
Diffstat (limited to 'uc_str912/prj_blinky_simple_startup/str91x_lib/src/91x_tim.c')
-rw-r--r--uc_str912/prj_blinky_simple_startup/str91x_lib/src/91x_tim.c694
1 files changed, 694 insertions, 0 deletions
diff --git a/uc_str912/prj_blinky_simple_startup/str91x_lib/src/91x_tim.c b/uc_str912/prj_blinky_simple_startup/str91x_lib/src/91x_tim.c
new file mode 100644
index 0000000..7957168
--- /dev/null
+++ b/uc_str912/prj_blinky_simple_startup/str91x_lib/src/91x_tim.c
@@ -0,0 +1,694 @@
+/******************** (C) COPYRIGHT 2006 STMicroelectronics ********************
+* File Name : 91x_tim.c
+* Author : MCD Application Team
+* Date First Issued : 05/18/2006 : Version 1.0
+* Description : This file provides all the TIM software functions.
+********************************************************************************
+* History:
+* 05/24/2006 : Version 1.1
+* 05/18/2006 : Version 1.0
+********************************************************************************
+* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH
+* CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS
+* A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT
+* OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
+* OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
+* CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+*******************************************************************************/
+
+/* Includes ------------------------------------------------------------------*/
+#include "91x_tim.h"
+
+/* Include of other module interface headers ---------------------------------*/
+/* Local includes ------------------------------------------------------------*/
+/* Private typedef -----------------------------------------------------------*/
+/* Private define ------------------------------------------------------------*/
+
+/* TIM Bits Masks */
+
+#define TIM_PWM_MASK 0x0010
+#define TIM_OPM_MASK 0x0020
+#define TIM_OC1_ENABLE_MASK 0x0040
+#define TIM_OC1_DISABLE_MASK 0xFFBF
+#define TIM_OC2_ENABLE_MASK 0x0080
+#define TIM_OC2_DISABLE_MASK 0xFF7F
+
+#define TIM_OLVL1_SET_MASK 0x0100
+#define TIM_OLVL1_RESET_MASK 0xFEFF
+
+#define TIM_OLVL2_SET_MASK 0x0200
+#define TIM_OLVL2_RESET_MASK 0xFDFF
+
+#define TIM_ENABLE_MASK 0x8000
+#define TIM_DISABLE_MASK 0x7FFF
+
+#define TIM_DMA_CLEAR_MASK 0xCFFF
+
+/* Private macro -------------------------------------------------------------*/
+/* Private variables ---------------------------------------------------------*/
+/* Private function prototypes -----------------------------------------------*/
+/* Interface functions -------------------------------------------------------*/
+/* Private functions ---------------------------------------------------------*/
+/*******************************************************************************
+* Function Name : TIM_DeInit
+* Description : Initializes TIM peripheral control and registers to their
+* : default reset values.
+* Input : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Output : None
+* Return : None
+*******************************************************************************/
+void TIM_DeInit(TIM_TypeDef *TIMx)
+{
+ if((TIMx == TIM0)||(TIMx == TIM1))
+ {
+ SCU_APBPeriphReset(__TIM01, DISABLE); /* TIM0 & TIM1 Reset's off */
+ }
+ else
+ {
+ SCU_APBPeriphReset(__TIM23, DISABLE); /* TIM2 & TIM3 Reset's off */
+ }
+
+ /* Set all the TIMx registers to thier default values */
+ TIMx->OC1R = 0x8000;
+ TIMx->OC2R = 0x8000;
+ TIMx->CR1 = 0x0;
+ TIMx->CR2 = 0x1;
+ TIMx->CNTR = 0x1234;
+ TIMx->SR = 0x0;
+}
+
+/*******************************************************************************
+* Function Name : TIM_StructInit
+* Description : Fills in a TIM_InitTypeDef structure with the reset value of
+* each parameter.
+* Input : TIM_InitStruct : pointer to a TIM_InitTypeDef structure
+ which will be initialized.
+* Output : None
+* Return : None.
+*******************************************************************************/
+void TIM_StructInit(TIM_InitTypeDef *TIM_InitStruct)
+{
+ TIM_InitStruct->TIM_Mode = 0x0000;
+ TIM_InitStruct->TIM_OC1_Modes = 0x0000;
+ TIM_InitStruct->TIM_OC2_Modes = 0x0000;
+ TIM_InitStruct->TIM_Clock_Source = 0x0000;
+ TIM_InitStruct->TIM_Clock_Edge = 0x0000;
+ TIM_InitStruct->TIM_OPM_INPUT_Edge = 0x0000;
+ TIM_InitStruct->TIM_ICAP1_Edge = 0x0000;
+ TIM_InitStruct->TIM_ICAP2_Edge = 0x0000;
+ TIM_InitStruct->TIM_Prescaler = 0x0000;
+ TIM_InitStruct->TIM_Pulse_Level_1 = 0x0000;
+ TIM_InitStruct->TIM_Pulse_Level_2 = 0x0000;
+ TIM_InitStruct->TIM_Period_Level = 0x0000;
+ TIM_InitStruct->TIM_Pulse_Length_1 = 0x0000;
+ TIM_InitStruct->TIM_Pulse_Length_2 = 0x0000;
+ TIM_InitStruct->TIM_Full_Period = 0x0000;
+}
+
+/*******************************************************************************
+* Function Name : TIM_Init
+* Description : Initializes TIM peripheral according to the specified
+* parameters in the TIM_InitTypeDef structure.
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_InitStruct: pointer to a TIM_InitTypeDef structure that
+* contains the configuration information for the specified
+* TIM peripheral.
+* Output : None
+* Return : None
+*******************************************************************************/
+
+void TIM_Init(TIM_TypeDef *TIMx, TIM_InitTypeDef *TIM_InitStruct)
+{
+/***************************** Clock configuration ****************************/
+
+ if (TIM_InitStruct->TIM_Clock_Source == TIM_CLK_APB)
+ {
+ /* APB clock */
+ TIMx->CR1 &= TIM_CLK_APB;
+ }
+ else
+ {
+ /* External/SCU clock */
+ TIMx->CR1 |= TIM_CLK_EXTERNAL;
+ if (TIM_InitStruct->TIM_Clock_Edge == TIM_CLK_EDGE_RISING)
+ {
+ /* Clock rising edge */
+ TIMx->CR1 |= TIM_CLK_EDGE_RISING;
+ }
+ else
+ {
+ /* Clock falling edge */
+ TIMx->CR1 &= TIM_CLK_EDGE_FALLING;
+ }
+ }
+
+/************************** Prescaler configuration ***************************/
+
+ TIMx->CR2 =( TIMx->CR2 & 0xFF00 )|TIM_InitStruct->TIM_Prescaler ;
+
+/********************************** TIM Modes *********************************/
+
+ switch ( TIM_InitStruct->TIM_Mode)
+ {
+/******************************* PWM Input mode *******************************/
+
+ case TIM_PWMI:
+
+ /* Set the PWMI Bit */
+ TIMx->CR1 |= TIM_PWMI;
+
+ /* Set the first edge Level */
+ if ( TIM_InitStruct->TIM_ICAP1_Edge == TIM_ICAP1_EDGE_RISING)
+ {
+ TIMx->CR1 |= TIM_ICAP1_EDGE_RISING;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_ICAP1_EDGE_FALLING;
+ }
+
+ /* Set the Second edge Level ( Opposite of the first level ) */
+ if ( TIM_InitStruct->TIM_ICAP1_Edge == TIM_ICAP1_EDGE_RISING)
+ {
+ TIMx->CR1 &= TIM_ICAP2_EDGE_FALLING;
+ }
+ else
+ {
+ TIMx->CR1 |= TIM_ICAP2_EDGE_RISING;
+ }
+
+ break;
+
+/************************** Output compare channel 1 **************************/
+
+ case TIM_OCM_CHANNEL_1:
+
+ if (TIM_InitStruct->TIM_Pulse_Level_1 == TIM_HIGH)
+ {
+ TIMx->CR1 |= TIM_OLVL1_SET_MASK;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_OLVL1_RESET_MASK;
+ }
+
+ TIMx->OC1R = TIM_InitStruct->TIM_Pulse_Length_1;
+
+ if (TIM_InitStruct->TIM_OC1_Modes == TIM_TIMING)
+ {
+ TIMx->CR1 &= TIM_OC1_DISABLE_MASK;
+ }
+ else
+ {
+ TIMx->CR1 |= TIM_OC1_ENABLE_MASK;
+ }
+
+ break;
+
+/************************** Output compare channel 2 **************************/
+
+ case TIM_OCM_CHANNEL_2:
+
+ if (TIM_InitStruct->TIM_Pulse_Level_2 == TIM_HIGH)
+ {
+ TIMx->CR1 |= TIM_OLVL2_SET_MASK;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_OLVL2_RESET_MASK;
+ }
+
+ TIMx->OC2R = TIM_InitStruct->TIM_Pulse_Length_2;
+
+ if (TIM_InitStruct->TIM_OC2_Modes == TIM_TIMING)
+ {
+ TIMx->CR1 &= TIM_OC2_DISABLE_MASK;
+ }
+ else
+ {
+ TIMx->CR1 |= TIM_OC2_ENABLE_MASK;
+ }
+
+ break;
+
+/************************ Output compare channel 1 & 2 ************************/
+
+ case TIM_OCM_CHANNEL_12:
+
+ TIMx->OC2R = TIM_InitStruct->TIM_Pulse_Length_2;
+ TIMx->OC1R = TIM_InitStruct->TIM_Pulse_Length_1;
+
+ if (TIM_InitStruct->TIM_OC2_Modes == TIM_TIMING)
+ {
+ TIMx->CR1 &= TIM_OC2_DISABLE_MASK;
+ }
+ else
+ {
+ TIMx->CR1 |= TIM_OC2_ENABLE_MASK;
+ }
+
+ if (TIM_InitStruct->TIM_OC1_Modes == TIM_TIMING)
+ {
+ TIMx->CR1 &= TIM_OC1_DISABLE_MASK;
+ }
+ else
+ {
+ TIMx->CR1 |= TIM_OC1_ENABLE_MASK;
+ }
+
+ if (TIM_InitStruct->TIM_Pulse_Level_1 == TIM_HIGH)
+ {
+ TIMx->CR1 |= TIM_OLVL1_SET_MASK;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_OLVL1_RESET_MASK;
+ }
+
+ if (TIM_InitStruct->TIM_Pulse_Level_2 == TIM_HIGH)
+ {
+ TIMx->CR1 |= TIM_OLVL2_SET_MASK;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_OLVL2_RESET_MASK;
+ }
+
+ break;
+
+/********************************** PWM mode **********************************/
+
+ case TIM_PWM:
+
+ /* Set the Level During the pulse */
+ if ( TIM_InitStruct->TIM_Pulse_Level_1 == TIM_HIGH)
+ {
+ TIMx->CR1 |= TIM_OLVL2_SET_MASK;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_OLVL2_RESET_MASK;
+ }
+
+ /* Set the Level after the pulse */
+ if (TIM_InitStruct->TIM_Period_Level == TIM_HIGH)
+ {
+ TIMx->CR1 |= TIM_OLVL1_SET_MASK;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_OLVL1_RESET_MASK;
+ }
+
+ /* Set the OCAE */
+ TIMx->CR1 |= TIM_OC1_ENABLE_MASK;
+
+ /* Set the PWM Bit */
+ TIMx->CR1 |= TIM_PWM_MASK;
+
+ /* Set the Duty Cycle value */
+ if ( TIM_InitStruct->TIM_Pulse_Length_1 < 5 )
+ {
+ TIM_InitStruct->TIM_Pulse_Length_1 = 4;
+ }
+
+ TIMx->OC1R = TIM_InitStruct->TIM_Pulse_Length_1 - 4;
+
+ /* Set the Full Period */
+ TIMx->OC2R = TIM_InitStruct->TIM_Full_Period - 4;
+
+ break;
+
+/******************************* One pulse mode *******************************/
+
+ case TIM_OPM:
+
+ /* Set the Level During the pulse */
+ if (TIM_InitStruct->TIM_Pulse_Level_1 == TIM_HIGH)
+ {
+ TIMx->CR1 |= TIM_OLVL2_SET_MASK;
+ }
+
+ /* Set the Level after the pulse */
+ if (TIM_InitStruct->TIM_Period_Level == TIM_HIGH)
+ {
+ TIMx->CR1 |= TIM_OLVL1_SET_MASK;
+ }
+
+ /* Set the Activation Edge on the ICAP 1 */
+ if (TIM_InitStruct->TIM_OPM_INPUT_Edge == TIM_OPM_EDGE_RISING)
+ {
+ TIMx->CR1 |= TIM_OPM_EDGE_RISING;
+ }
+
+ /* Set the Output Compare Function */
+ TIMx->CR1 |= TIM_OC1_ENABLE_MASK;
+
+ /* Set the One pulse mode */
+ TIMx->CR1 |= TIM_OPM_MASK;
+
+ /* Set the Pulse length */
+ TIMx->OC1R = TIM_InitStruct->TIM_Pulse_Length_1;
+
+ break;
+
+/*************************** Input capture channel 1 **************************/
+
+ case TIM_ICAP_CHANNEL_1:
+
+ if (TIM_InitStruct->TIM_ICAP1_Edge == TIM_ICAP1_EDGE_RISING)
+ {
+ TIMx->CR1 |= TIM_ICAP1_EDGE_RISING;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_ICAP1_EDGE_FALLING;
+ }
+
+ break;
+
+/*************************** Input capture channel 2 **************************/
+
+ case TIM_ICAP_CHANNEL_2:
+
+ if (TIM_InitStruct->TIM_ICAP2_Edge == TIM_ICAP2_EDGE_RISING)
+ {
+ TIMx->CR1 |= TIM_ICAP2_EDGE_RISING;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_ICAP2_EDGE_FALLING;
+ }
+
+ break;
+
+/************************* Input capture channel 1 & 2 ************************/
+
+ case TIM_ICAP_CHANNEL_12:
+ if (TIM_InitStruct->TIM_ICAP2_Edge == TIM_ICAP2_EDGE_RISING)
+ {
+ TIMx->CR1 |= TIM_ICAP2_EDGE_RISING;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_ICAP2_EDGE_FALLING;
+ }
+
+ if (TIM_InitStruct->TIM_ICAP1_Edge == TIM_ICAP1_EDGE_RISING)
+ {
+ TIMx->CR1 |= TIM_ICAP1_EDGE_RISING;
+ }
+ else
+ {
+ TIMx->CR1 &= TIM_ICAP1_EDGE_FALLING;
+ }
+
+ break;
+
+ default:
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name : TIM_CounterCmd
+* Description : Enables or disables TIMx Counter peripheral.
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_operation: specifies the new state of the TIMx Counter.
+* This parameter can be one of the following values:
+* - TIM_START: Start the timer counter.
+* - TIM_STOP : Stop the timer counter.
+* - TIM_CLEAR: Clear the timer counter.
+* Output : None
+* Return : None
+*******************************************************************************/
+void TIM_CounterCmd(TIM_TypeDef *TIMx, TIM_CounterOperations TIM_operation)
+{
+ switch (TIM_operation)
+ {
+ case TIM_START:
+ TIMx->CR1 |= TIM_ENABLE_MASK;
+ break;
+
+ case TIM_STOP:
+ TIMx->CR1 &= TIM_DISABLE_MASK;
+ break;
+
+ case TIM_CLEAR:
+ TIMx->CNTR = 0x1234;
+ break;
+
+ default:
+ break;
+ }
+}
+
+/*******************************************************************************
+* Function Name : TIM_PrescalerConfig
+* Description : This routine is used to configure the TIMx prescaler value
+* (when using the APB clock).
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_Prescaler: specifies the prescaler value. This parameter
+* can be a value from 0x0 to 0xFF.
+* Output : None
+* Return : None
+*******************************************************************************/
+void TIM_PrescalerConfig(TIM_TypeDef *TIMx, u8 TIM_Prescaler)
+{
+ TIMx->CR2 &= 0xFF00;
+ TIMx->CR2 |= TIM_Prescaler;
+
+}
+/*******************************************************************************
+* Function Name : TIM_GetPrescalerValue
+* Description : This routine is used to get the TIMx prescaler value
+* (when using the APB clock).
+* Input : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Output : None
+* Return : The prescaler value.
+*******************************************************************************/
+u8 TIM_GetPrescalerValue(TIM_TypeDef *TIMx)
+{
+ return TIMx->CR2 & 0x00FF;
+}
+
+/*******************************************************************************
+* Function Name : TIM_GetCounterValue
+* Description : This routine is used to get the TIMx counter value.
+* Input : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Output : None
+* Return : The counter value.
+*******************************************************************************/
+u16 TIM_GetCounterValue(TIM_TypeDef *TIMx)
+{
+ return TIMx->CNTR;
+}
+
+/*******************************************************************************
+* Function Name : TIM_GetICAP1Value
+* Description : This routine is used to get the Input Capture 1 value.
+* Input : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Output : None
+* Return : The Input Capture 1 value.
+*******************************************************************************/
+u16 TIM_GetICAP1Value(TIM_TypeDef *TIMx)
+{
+ return TIMx->IC1R;
+}
+
+/*******************************************************************************
+* Function Name : TIM_GetICAP2Value
+* Description : This routine is used to get the Input Capture 2 value.
+* Input : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Output : None
+* Return : The Input Capture 2 value.
+*******************************************************************************/
+u16 TIM_GetICAP2Value(TIM_TypeDef *TIMx)
+{
+ return TIMx->IC2R;
+}
+
+/*******************************************************************************
+* Function Name : TIM_SetPulse
+* Description : This routine is used to set the pulse value.
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_Channel: specifies the needed channel.
+* This parameter can be one of the following values:
+* - TIM_PWM_OC1_Channel: PWM/Output Compare 1 Channel
+* - TIM_OC2_Channel : Output Compare 2 Channel
+* Input3 : TIM_Pulse: specifies the new pulse value.
+* Output : None
+* Return : None
+*******************************************************************************/
+void TIM_SetPulse(TIM_TypeDef *TIMx,u16 TIM_Channel ,u16 TIM_Pulse)
+{
+ if (TIM_Channel == TIM_PWM_OC1_Channel)
+ {
+ TIMx->OC1R = TIM_Pulse;
+ }
+ else
+ {
+ TIMx->OC2R = TIM_Pulse;
+ }
+}
+/*******************************************************************************
+* Function Name : TIM_GetFlagStatus
+* Description : Checks whether the specified TIMx flag is set or not.
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_Flag: specifies the flag to check.
+* This parameter can be one of the following values:
+* - TIM_FLAG_IC1: Input Capture Channel 1 Flag
+* - TIM_FLAG_IC2: Input Capture Channel 2 Flag
+* - TIM_FLAG_TO : Timer Overflow Flag
+* - TIM_FLAG_OC1: Output Compare Channel 1 Flag
+* - TIM_FLAG_OC2: Output Compare Channel 2 Flag
+* Output : None
+* Return : The NewState of the TIM_Flag (SET or RESET).
+*******************************************************************************/
+FlagStatus TIM_GetFlagStatus(TIM_TypeDef *TIMx, u16 TIM_Flag)
+{
+ if((TIMx->SR & TIM_Flag) == RESET)
+ {
+ return RESET;
+ }
+ else
+ {
+ return SET;
+ }
+}
+
+/*******************************************************************************
+* Function Name : TIM_ClearFlag
+* Description : Clears the TIM Flag passed as a parameter.
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_Flag: specifies the flag to clear.
+* This parameter can be one of the following values:
+* - TIM_FLAG_IC1: Input Capture Channel 1 Flag
+* - TIM_FLAG_IC2: Input Capture Channel 2 Flag
+* - TIM_FLAG_TO : Timer Overflow Flag
+* - TIM_FLAG_OC1: Output Compare Channel 1 Flag
+* - TIM_FLAG_OC2: Output Compare Channel 2 Flag
+* Output : None
+* Return : None
+*******************************************************************************/
+void TIM_ClearFlag(TIM_TypeDef *TIMx, u16 TIM_Flag)
+{
+ /* Clear TIM_Flag */
+ TIMx->SR &= ~TIM_Flag;
+}
+
+/*******************************************************************************
+* Function Name : TIM_GetPWMIPulse
+* Description : This routine is used to get the Pulse value in PWMI Mode.
+* Input : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Output : None
+* Return : The pulse value.
+*******************************************************************************/
+u16 TIM_GetPWMIPulse(TIM_TypeDef *TIMx)
+{
+ return TIMx->IC2R;
+}
+
+/*******************************************************************************
+* Function Name : TIM_GetPWMIPeriod
+* Description : This routine is used to get the Period value in PWMI Mode.
+* Input : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Output : None
+* Return : The period value.
+*******************************************************************************/
+u16 TIM_GetPWMIPeriod(TIM_TypeDef *TIMx)
+{
+ return TIMx->IC1R;
+}
+
+/*******************************************************************************
+* Function Name : TIM_ITConfig
+* Description : Configures the Timer interrupt source.
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_IT: specifies the TIM interrupt source to be enabled.
+* This parameter can be one of the following values:
+* - TIM_IT_IC1: Input Capture 1 Interrupt source.
+* - TIM_IT_OC1: Output Compare 1 Interrupt source.
+* - TIM_IT_TO : Timer Overflow Interrupt source.
+* - TIM_IT_IC2: Input Capture 2 Interrupt source.
+* - TIM_IT_OC2: Output Compare 2 Interrupt source.
+* Input3 : TIM_Newstate: specifies the new state of the TIMx IT.
+* This parameter can be one of the following values:
+* - ENABLE : Enable the needed interrupt.
+* - DISABLE: Disable the needed interrupt.
+* Output : None
+* Return : None
+*******************************************************************************/
+void TIM_ITConfig(TIM_TypeDef *TIMx, u16 TIM_IT, FunctionalState TIM_Newstate)
+{
+ if(TIM_Newstate == ENABLE)
+ {
+ TIMx->CR2 = (TIMx->CR2 & 0x00FF) | TIM_IT;
+ }
+ else
+ {
+ TIMx->CR2 &= ~TIM_IT;
+ }
+}
+
+/*******************************************************************************
+* Function Name : TIM_DMAConfig
+* Description : Configures the Timer DMA source.
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_DMA_Souces: specifies the TIM DMA source to be selected.
+* This parameter can be one of the following values:
+* - TIM_DMA_IC1: Input Capture 1 DMA source.
+* - TIM_DMA_OCA1 Output Compare 1 DMA source.
+* - TIM_DMA_TO: Timer Overflow DMA source.
+* - TIM_DMA_IC2: Input Capture 2 DMA source.
+* - TIM_DMA_OC2: Output Compare 2 DMA source.
+* Output : None
+* Return : None
+*******************************************************************************/
+void TIM_DMAConfig(TIM_TypeDef *TIMx, u16 TIM_DMA_Sources)
+{
+ /* Reset the DMAS[1:0] bits */
+ TIMx->CR1 &= TIM_DMA_CLEAR_MASK;
+ /* Set the DMAS[1:0] bits according to TIM_DMA_Sources parameter */
+ TIMx->CR1 |= TIM_DMA_Sources;
+}
+
+/*******************************************************************************
+* Function Name : TIM_DMACmd
+* Description : Enables or disables TIMx DMA peripheral.
+* Input1 : TIMx: where x can be from 0 to 3 to select the TIM
+* peripheral.
+* Input2 : TIM_Newstate: new state of the TIMx DMA peripheral
+* This parameter can be one of the following values:
+* - ENABLE : Enable the TIMx DMA.
+* - DISABLE: Disable the TIMx DMA.
+* Output : None
+* Return : None
+*******************************************************************************/
+void TIM_DMACmd(TIM_TypeDef *TIMx, FunctionalState TIM_Newstate)
+{
+ if (TIM_Newstate == ENABLE)
+ {
+ TIMx->CR2 |= TIM_DMA_ENABLE;
+ }
+ else
+ {
+ TIMx->CR2 &= TIM_DMA_DISABLE;
+ }
+}
+/******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/
OpenPOWER on IntegriCloud