00001
00015
00016
00017
00018 #include "circle.h"
00019
00021
00022
00023
00024
00025
00026
00027
00028 static TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
00029 static TIM_OCInitTypeDef TIM_OCInitStructure;
00030 u16 CCR_Val = 0x2EE0;
00031
00032
00033
00034
00035
00036
00037 extern enum BUZZER_mode Buzzer_Mode;
00038 extern RCC_ClocksTypeDef RCC_ClockFreq;
00039
00040
00041
00042
00043
00044
00052
00053 void BUZZER_SetFrequency( u16 freq )
00054 {
00055
00056 #if !AUDIO_AVAIL
00057
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
00068 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
00069
00070 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
00071 TIM_OCInitStructure.TIM_Pulse = CCR_Val;
00072
00073 TIM_OC3Init( TIM3, &TIM_OCInitStructure );
00074 TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Enable );
00075
00076 #else
00077 AUDIO_BUZZER_SetToneFrequency( freq );
00078 #endif
00079 }
00080
00081
00082
00083
00084
00085
00086
00087
00095
00096 NODEBUG2 void BUZZER_Init( void )
00097 {
00098 #if !AUDIO_AVAIL
00099 GPIO_InitTypeDef GPIO_InitStructure;
00100
00101
00102 RCC_PERIPH_GPIO_CLOCK_CMD( RCC_APB2Periph_GPIOB, ENABLE );
00103
00104
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
00112
00113
00114
00115
00116 RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3, ENABLE );
00117 TIM_DeInit( TIM3 );
00118 TIM_TimeBaseStructInit( &TIM_TimeBaseStructure );
00119 TIM_OCStructInit( &TIM_OCInitStructure );
00120
00121
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
00130 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
00131
00132 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
00133 TIM_OCInitStructure.TIM_Pulse = CCR_Val;
00134
00135 TIM_OC3Init( TIM3, &TIM_OCInitStructure );
00136 TIM_OC3PreloadConfig( TIM3, TIM_OCPreload_Disable );
00137
00138 BUZZER_SetFrequency( 440 );
00139 #endif
00140
00141 #if AUDIO_AVAIL
00142
00143 #endif
00144
00145 BUZZER_SetMode( BUZZER_OFF );
00146 }
00147
00148
00150
00151
00152
00153
00154
00155
00156
00157
00158
00166
00167 void BUZZER_SetMode( enum BUZZER_mode mode )
00168 {
00169
00170 #if AUDIO_AVAIL
00171
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();
00190
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