• Main Page
  • Related Pages
  • Data Structures
  • Files
  • File List
  • Globals

buzzer_spe.c

Go to the documentation of this file.
00001 /****************** COPYRIGHT (C) 2007-2010 RAISONANCE S.A.S. *****************/
00015 /******************************************************************************/
00016 
00017 /* Includes ------------------------------------------------------------------*/
00018 #include "circle.h"
00019 
00021 
00022 /* Private typedef -----------------------------------------------------------*/
00023 
00024 /* Private define ------------------------------------------------------------*/
00025 
00026 /* Private macro -------------------------------------------------------------*/
00027 /* Private variables ---------------------------------------------------------*/
00028 static TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
00029 static TIM_OCInitTypeDef         TIM_OCInitStructure;
00030 u16                              CCR_Val              = 0x2EE0;
00031 
00032 /* Private function prototypes -----------------------------------------------*/
00033 
00034 /* Private functions ---------------------------------------------------------*/
00035 
00036 /* External variables --------------------------------------------------------*/
00037 extern enum BUZZER_mode Buzzer_Mode;
00038 extern RCC_ClocksTypeDef RCC_ClockFreq;
00039 
00040 /***********************************************************************************
00041 *
00042 *                                BUZZER_SetFrequency
00043 *
00044 ************************************************************************************/
00052 /********************************************************************************/
00053 void BUZZER_SetFrequency( u16 freq )
00054 {
00055 
00056 #if !AUDIO_AVAIL
00057     /* Calculate the frequency (depend on the PCLK1 clock value) */
00058     CCR_Val = ( RCC_ClockFreq.PCLK1_Frequency / freq );
00059 
00060     TIM_TimeBaseStructure.TIM_Period          = CCR_Val * 2;
00061     TIM_TimeBaseStructure.TIM_Prescaler       = 0x0;
00062     TIM_TimeBaseStructure.TIM_ClockDivision   = 0x0;
00063     TIM_TimeBaseStructure.TIM_CounterMode     = TIM_CounterMode_Up;
00064 
00065     TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure );
00066 
00067     /* Output Compare Toggle Mode configuration: Channel3 */
00068     TIM_OCInitStructure.TIM_OCMode   = TIM_OCMode_PWM1;
00069     /* in FWLib v1.0 : TIM_OCInitStructure.TIM_Channel  = TIM_Channel_3;*/
00070     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /* FWLib v2.0*/
00071     TIM_OCInitStructure.TIM_Pulse    = CCR_Val;
00072 
00073     TIM_OC3Init( TIM3, &TIM_OCInitStructure );  /* FWLib v2.0*/
00074     TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Enable );
00075 
00076 #else
00077     AUDIO_BUZZER_SetToneFrequency( freq );
00078 #endif
00079 }
00080 
00081 /* Public functions for CircleOS ---------------------------------------------*/
00082 
00083 /*******************************************************************************
00084 *
00085 *                                BUZZER_Init
00086 *
00087 *******************************************************************************/
00095 /******************************************************************************/
00096 NODEBUG2 void BUZZER_Init( void )
00097 {
00098 #if !AUDIO_AVAIL
00099     GPIO_InitTypeDef GPIO_InitStructure;
00100 
00101     /* Enable GPIOB clock  */
00102     RCC_PERIPH_GPIO_CLOCK_CMD( RCC_APB2Periph_GPIOB, ENABLE );
00103 
00104     /* GPIOB Configuration: TIM3 3in Output */
00105     GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;
00106     GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
00107     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
00108 
00109     GPIO_Init( GPIOB, &GPIO_InitStructure );
00110 
00111     /* TIM3 Configuration ------------------------------------------------------*/
00112     /* TIM3CLK = 18 MHz, Prescaler = 0x0, TIM3 counter clock = 18  MHz */
00113     /* CC update rate = TIM3 counter clock / (2* CCR_Val) ~= 750 Hz */
00114 
00115     /* Enable TIM3 clock */
00116     RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE );
00117     TIM_DeInit( TIM3 );
00118     TIM_TimeBaseStructInit( &TIM_TimeBaseStructure );
00119     TIM_OCStructInit( &TIM_OCInitStructure );
00120 
00121     /* Time base configuration */
00122     TIM_TimeBaseStructure.TIM_Period          = 0xFFFF;
00123     TIM_TimeBaseStructure.TIM_Prescaler       = 0x0;
00124     TIM_TimeBaseStructure.TIM_ClockDivision   = 0x0;
00125     TIM_TimeBaseStructure.TIM_CounterMode     = TIM_CounterMode_Up;
00126 
00127     TIM_TimeBaseInit( TIM3, &TIM_TimeBaseStructure );
00128 
00129     /* Output Compare Toggle Mode configuration: Channel3 */
00130     TIM_OCInitStructure.TIM_OCMode   = TIM_OCMode_Toggle;
00131     /* in FWLib v1.0 : TIM_OCInitStructure.TIM_Channel  = TIM_Channel_3;*/
00132     TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; /* now in in FWLib v2.0*/
00133     TIM_OCInitStructure.TIM_Pulse    = CCR_Val;
00134 
00135     TIM_OC3Init( TIM3, &TIM_OCInitStructure );  /* changed against FWLib v2.0*/
00136     TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Disable );
00137     
00138     BUZZER_SetFrequency( 440 );
00139 #endif
00140 
00141 #if AUDIO_AVAIL
00142     /* RQ : init done by Audio init*/
00143 #endif
00144 
00145     BUZZER_SetMode( BUZZER_OFF );
00146 }
00147 
00148 
00150 
00151 /* Public functions ----------------------------------------------------------*/
00152 
00153 
00154 /*******************************************************************************
00155 *
00156 *                                BUZZER_SetMode
00157 *
00158 *******************************************************************************/
00166 /******************************************************************************/
00167 void BUZZER_SetMode( enum BUZZER_mode mode )
00168 {
00169 
00170 #if AUDIO_AVAIL
00171     /* Don't use the buzzer if audio playing */
00172     if (( AUDIO_Playback_status != NO_SOUND )
00173             || ( AUDIO_Recording_status != NO_RECORD )
00174             || ( AUDIO_BuzzerOn == 0 ) )
00175     {
00176         mode = BUZZER_OFF;
00177     }
00178 #endif
00179 
00180     Buzzer_Mode    = mode;
00181     Buzzer_Counter = 0;
00182 
00183     switch ( mode )
00184     {
00185     case BUZZER_PLAYMUSIC   :
00186 #if AUDIO_AVAIL
00187         AUDIO_BUZZER_OnOff( ON );
00188 #endif
00189         BUZZER_PlayNote();  /* play melody*/
00190         /* no break */
00191 
00192     case BUZZER_LONGBEEP    :
00193     case BUZZER_SHORTBEEP   :
00194     case BUZZER_ON          :
00195 #if AUDIO_AVAIL
00196         AUDIO_BUZZER_OnOff( ON );
00197 #else
00198         TIM_Cmd( TIM3, ENABLE );
00199 #endif
00200         break;
00201 
00202     case BUZZER_OFF         :
00203 #if AUDIO_AVAIL
00204         AUDIO_BUZZER_OnOff( OFF );
00205 #else
00206         TIM_Cmd( TIM3, DISABLE );
00207 #endif
00208         break;
00209     }
00210 }
00211