Commit c4d9c18b authored by hu's avatar hu

调整蜂鸣器播放驱动,声音部分音源不对

parent a6bafc8a
...@@ -50,11 +50,11 @@ void Data_User_Mileage_KL30Init(void) ...@@ -50,11 +50,11 @@ void Data_User_Mileage_KL30Init(void)
ODOInit.Offset = TempBuf[2]; ODOInit.Offset = TempBuf[2];
Data_ODO_KL30_Init(DataODOBuf, &ODOInit, Func.EEPromWrite_Cbk); Data_ODO_KL30_Init(DataODOBuf, &ODOInit, Func.EEPromWrite_Cbk);
Data_User_EEPROM_Read(EEPROM_BLOCK_TRIP_STAMP, TempBuf + 3, 4); Data_User_EEPROM_Read(EEPROM_BLOCK_TRIP_STAMP, TempBuf + 3, 9);
TripInit[EM_TRIP_A].Stamp = TempBuf[3]; TripInit[EM_TRIP_A].Stamp = TempBuf[3];
TripInit[EM_TRIP_A].MaxValue = 9999999u; TripInit[EM_TRIP_A].MaxValue = 9999999u;
TripInit[EM_TRIP_A].IsRestart = 1u; /*1-循环 0-最大值保持*/ TripInit[EM_TRIP_A].IsRestart = 1u;
TripInit[EM_TRIP_B].Stamp = TempBuf[4]; TripInit[EM_TRIP_B].Stamp = TempBuf[4];
TripInit[EM_TRIP_B].MaxValue = 9999999u; TripInit[EM_TRIP_B].MaxValue = 9999999u;
......
...@@ -1122,6 +1122,7 @@ void Popups_Sound_Playing(uint8_t PopupSnd) ...@@ -1122,6 +1122,7 @@ void Popups_Sound_Playing(uint8_t PopupSnd)
* Return : None * Return : None
* onther : None * onther : None
--------------------------------------------------------------------------*/ --------------------------------------------------------------------------*/
uint16_t Sound_test = 0;
void Popup_Alone_Sound_Server(void) void Popup_Alone_Sound_Server(void)
{ {
COMMON_PowerStatus_t u8IG_st; COMMON_PowerStatus_t u8IG_st;
...@@ -1152,6 +1153,7 @@ void Popup_Alone_Sound_Server(void) ...@@ -1152,6 +1153,7 @@ void Popup_Alone_Sound_Server(void)
{ {
if (u8IG_st == COMMON_POWER_ON) if (u8IG_st == COMMON_POWER_ON)
{ {
/*00 忘拔钥匙*/ /*00 忘拔钥匙*/
Sound_Delete(SND_Key_Notremoved); Sound_Delete(SND_Key_Notremoved);
...@@ -1420,6 +1422,19 @@ void Popup_Alone_Sound_Server(void) ...@@ -1420,6 +1422,19 @@ void Popup_Alone_Sound_Server(void)
{ {
Sound_Delete(SND_Fuel_Saving); Sound_Delete(SND_Fuel_Saving);
} }
/*音源测试程序*/
// if(Sound_test&0x001) Sound_Request (SND_Key_Notremoved, 1); else Sound_Delete(SND_Key_Notremoved );
// if(Sound_test&0x002) Sound_Request (SND_Braking, 1); else Sound_Delete(SND_Braking );
// if(Sound_test&0x004) Sound_Request (SND_Air_Brake, 1); else Sound_Delete(SND_Air_Brake );
// if(Sound_test&0x008) Sound_Request (SND_BRAKE_LOCK, 1); else Sound_Delete(SND_BRAKE_LOCK );
// if(Sound_test&0x010) Sound_Request (SND_Parking_Brake, 1); else Sound_Delete(SND_Parking_Brake );
// if(Sound_test&0x020) Sound_Request (SND_Car_Dump_SPEED, 1); else Sound_Delete(SND_Car_Dump_SPEED );
// if(Sound_test&0x040) Sound_Request (SND_Temp_High, 1); else Sound_Delete(SND_Temp_High );
// if(Sound_test&0x080) Sound_Request (SND_Coolant_Low, 1); else Sound_Delete(SND_Coolant_Low );
// if(Sound_test&0x100) Sound_Request (SND_Oil_pressure_Low, 1); else Sound_Delete(SND_Oil_pressure_Low );
// if(Sound_test&0x200) Sound_Request (SND_ACC_AIR, 1); else Sound_Delete(SND_ACC_AIR );
// if(Sound_test&0x400) Sound_Request (SND_BackUP_SPEED, 1); else Sound_Delete(SND_BackUP_SPEED );
} }
else /*IG-OFF*/ else /*IG-OFF*/
{ {
......
...@@ -5,26 +5,26 @@ ...@@ -5,26 +5,26 @@
SoundPlayCtrlStruct SoundPlayCtrl; SoundPlayCtrlStruct SoundPlayCtrl;
void Sound_Player_Init ( void ) void Sound_Player_Init(void)
{ {
SoundPlayCtrl.Playing = SND_SRC_NONE; //加载要播放的声音 SoundPlayCtrl.Playing = SND_SRC_NONE; //加载要播放的声音
SoundPlayCtrl.Timer = 0; SoundPlayCtrl.Timer = 0;
SoundPlayCtrl.Cycle = 0; SoundPlayCtrl.Cycle = 0;
SoundPlayCtrl.Status = SND_PLAYER_IDLE; SoundPlayCtrl.Status = SND_PLAYER_IDLE;
SoundPlayCtrl.VolInit = 1; SoundPlayCtrl.VolInit = 1;
Buzzer_Init(); Buzzer_Start_Up();
} }
uint8_t Sound_Play ( uint8_t SoundID ) uint8_t Sound_Play(uint8_t SoundID)
{ {
if ( SoundPlayCtrl.VolInit ) //首次播放时初始化音量 if (SoundPlayCtrl.VolInit) //首次播放时初始化音量
{ {
SoundPlayCtrl.VolInit = 0; SoundPlayCtrl.VolInit = 0;
} }
if ( SoundID < SND_TOTAL_NUM ) if (SoundID < SND_TOTAL_NUM)
{ {
if ( SoundPlayCtrl.Status != SND_PLAYER_IDLE ) //如果有声音正在播放,则返回播放失败 if (SoundPlayCtrl.Status != SND_PLAYER_IDLE) //如果有声音正在播放,则返回播放失败
return 1; return 1;
SoundPlayCtrl.Playing = SoundID; //加载要播放的声音 SoundPlayCtrl.Playing = SoundID; //加载要播放的声音
...@@ -37,15 +37,15 @@ uint8_t Sound_Play ( uint8_t SoundID ) ...@@ -37,15 +37,15 @@ uint8_t Sound_Play ( uint8_t SoundID )
return 2; //返回错误状态 return 2; //返回错误状态
} }
uint8_t Sound_Stop ( uint8_t SoundID ) uint8_t Sound_Stop(uint8_t SoundID)
{ {
if ( SoundID < SND_TOTAL_NUM ) if (SoundID < SND_TOTAL_NUM)
{ {
if ( ( SoundPlayCtrl.Status == SND_PLAYER_IDLE ) || \ if ((SoundPlayCtrl.Status == SND_PLAYER_IDLE) ||
( SoundPlayCtrl.Playing != SoundID ) ) //如果播放器已停止播放或正在播放的声音不是请求停止播放的声音 (SoundPlayCtrl.Playing != SoundID)) //如果播放器已停止播放或正在播放的声音不是请求停止播放的声音
return 0; //返回停止成功 return 0; //返回停止成功
if ( SoundPlayCtrl.Status == SND_PLAYER_PLAY_REQ ) //请求停止播放的声音是刚请求播放的声音 if (SoundPlayCtrl.Status == SND_PLAYER_PLAY_REQ) //请求停止播放的声音是刚请求播放的声音
{ {
SoundPlayCtrl.Playing = SND_SRC_NONE; SoundPlayCtrl.Playing = SND_SRC_NONE;
SoundPlayCtrl.Timer = 0; SoundPlayCtrl.Timer = 0;
...@@ -61,11 +61,11 @@ uint8_t Sound_Stop ( uint8_t SoundID ) ...@@ -61,11 +61,11 @@ uint8_t Sound_Stop ( uint8_t SoundID )
return 2; //返回错误状态 return 2; //返回错误状态
} }
void Sound_Clear ( void ) void Sound_Clear(void)
{ {
if ( SoundPlayCtrl.Status == SND_PLAYER_IDLE ) if (SoundPlayCtrl.Status == SND_PLAYER_IDLE)
return; return;
else if ( SoundPlayCtrl.Status == SND_PLAYER_PLAY_REQ ) else if (SoundPlayCtrl.Status == SND_PLAYER_PLAY_REQ)
{ {
SoundPlayCtrl.Playing = SND_SRC_NONE; SoundPlayCtrl.Playing = SND_SRC_NONE;
SoundPlayCtrl.Timer = 0; SoundPlayCtrl.Timer = 0;
...@@ -75,12 +75,12 @@ void Sound_Clear ( void ) ...@@ -75,12 +75,12 @@ void Sound_Clear ( void )
} }
else else
{ {
if ( SoundPlayCtrl.Playing < SND_TOTAL_NUM ) if (SoundPlayCtrl.Playing < SND_TOTAL_NUM)
{ {
if ( SndAttributeTable[SoundPlayCtrl.Playing].Mode == SND_MODE_SINGLE ) if (SndAttributeTable[SoundPlayCtrl.Playing].Mode == SND_MODE_SINGLE)
Buzzer_Stop_All_Track(); Buzzer_Stop_Play();
else else
Buzzer_Stop_All_Track(); ;
} }
SoundPlayCtrl.Playing = SND_SRC_NONE; SoundPlayCtrl.Playing = SND_SRC_NONE;
...@@ -90,42 +90,42 @@ void Sound_Clear ( void ) ...@@ -90,42 +90,42 @@ void Sound_Clear ( void )
} }
} }
uint8_t Sound_Priority_Query ( uint8_t SoundID ) uint8_t Sound_Priority_Query(uint8_t SoundID)
{ {
if ( SoundID == SND_SRC_CURRENT ) if (SoundID == SND_SRC_CURRENT)
{ {
if ( SoundPlayCtrl.Playing < SND_TOTAL_NUM ) if (SoundPlayCtrl.Playing < SND_TOTAL_NUM)
return SndAttributeTable[SoundPlayCtrl.Playing].Priority; return SndAttributeTable[SoundPlayCtrl.Playing].Priority;
else else
return 0xFF; return 0xFF;
} }
else if ( SoundID < SND_TOTAL_NUM ) else if (SoundID < SND_TOTAL_NUM)
return SndAttributeTable[SoundID].Priority; return SndAttributeTable[SoundID].Priority;
else else
return 0xFF; return 0xFF;
} }
//10ms // 10ms
void Sound_Play_Service ( void ) void Sound_Play_Service(void)
{ {
if ( SoundPlayCtrl.Status == SND_PLAYER_IDLE ) if (SoundPlayCtrl.Status == SND_PLAYER_IDLE)
return; return;
if ( SoundPlayCtrl.Timer >= 10 ) if (SoundPlayCtrl.Timer >= 10)
SoundPlayCtrl.Timer -= 10; SoundPlayCtrl.Timer -= 10;
else if ( SoundPlayCtrl.Timer > 0 ) else if (SoundPlayCtrl.Timer > 0)
SoundPlayCtrl.Timer = 0; SoundPlayCtrl.Timer = 0;
if ( ( SoundPlayCtrl.Status == SND_PLAYER_PLAYING ) || ( SoundPlayCtrl.Status == SND_PLAYER_PLAY_REQ ) ) if ((SoundPlayCtrl.Status == SND_PLAYER_PLAYING) || (SoundPlayCtrl.Status == SND_PLAYER_PLAY_REQ))
{ {
if ( SoundPlayCtrl.Timer == 0 ) if (SoundPlayCtrl.Timer == 0)
{ {
if ( SoundPlayCtrl.Cycle == 0 ) if (SoundPlayCtrl.Cycle == 0)
{ {
if ( SoundPlayCtrl.Playing < SND_TOTAL_NUM ) if (SoundPlayCtrl.Playing < SND_TOTAL_NUM)
{ {
if ( SndAttributeTable[SoundPlayCtrl.Playing].Mode != SND_MODE_SINGLE ) if (SndAttributeTable[SoundPlayCtrl.Playing].Mode != SND_MODE_SINGLE)
Buzzer_Stop_All_Track(); Buzzer_Stop_Play();
} }
SoundPlayCtrl.Playing = SND_SRC_NONE; SoundPlayCtrl.Playing = SND_SRC_NONE;
...@@ -133,20 +133,20 @@ void Sound_Play_Service ( void ) ...@@ -133,20 +133,20 @@ void Sound_Play_Service ( void )
} }
else else
{ {
if ( SoundPlayCtrl.Playing < SND_TOTAL_NUM ) if (SoundPlayCtrl.Playing < SND_TOTAL_NUM)
{ {
if ( SndAttributeTable[SoundPlayCtrl.Playing].Mode == SND_MODE_SINGLE ) if (SndAttributeTable[SoundPlayCtrl.Playing].Mode == SND_MODE_SINGLE)
Buzzer_Play_Sound ( SndAttributeTable[SoundPlayCtrl.Playing].Index ); Buzzer_Play_Track(SndAttributeTable[SoundPlayCtrl.Playing].Index);
else else
{ {
if ( SoundPlayCtrl.Status == SND_PLAYER_PLAY_REQ ) if (SoundPlayCtrl.Status == SND_PLAYER_PLAY_REQ)
Buzzer_Play_Sound ( SndAttributeTable[SoundPlayCtrl.Playing].Index ); Buzzer_Repeat_Play_Track(SndAttributeTable[SoundPlayCtrl.Playing].Index);
} }
SoundPlayCtrl.Timer = SndAttributeTable[SoundPlayCtrl.Playing].Period; SoundPlayCtrl.Timer = SndAttributeTable[SoundPlayCtrl.Playing].Period;
SoundPlayCtrl.Status = SND_PLAYER_PLAYING; SoundPlayCtrl.Status = SND_PLAYER_PLAYING;
if ( SoundPlayCtrl.Cycle != SND_CYCLE_NONSTOP ) if (SoundPlayCtrl.Cycle != SND_CYCLE_NONSTOP)
SoundPlayCtrl.Cycle--; SoundPlayCtrl.Cycle--;
} }
else else
...@@ -160,18 +160,18 @@ void Sound_Play_Service ( void ) ...@@ -160,18 +160,18 @@ void Sound_Play_Service ( void )
} }
else //当前声音被请求停止播放 else //当前声音被请求停止播放
{ {
if ( SoundPlayCtrl.Playing < SND_TOTAL_NUM ) if (SoundPlayCtrl.Playing < SND_TOTAL_NUM)
{ {
if ( SndAttributeTable[SoundPlayCtrl.Playing].Mode != SND_MODE_SINGLE ) if (SndAttributeTable[SoundPlayCtrl.Playing].Mode != SND_MODE_SINGLE)
{ {
Buzzer_Stop_All_Track(); Buzzer_Stop_Play();
SoundPlayCtrl.Playing = SND_SRC_NONE; SoundPlayCtrl.Playing = SND_SRC_NONE;
SoundPlayCtrl.Cycle = 0; SoundPlayCtrl.Cycle = 0;
SoundPlayCtrl.Status = SND_PLAYER_IDLE; SoundPlayCtrl.Status = SND_PLAYER_IDLE;
} }
else else
{ {
if ( SoundPlayCtrl.Timer == 0 ) if (SoundPlayCtrl.Timer == 0)
{ {
SoundPlayCtrl.Playing = SND_SRC_NONE; SoundPlayCtrl.Playing = SND_SRC_NONE;
SoundPlayCtrl.Cycle = 0; SoundPlayCtrl.Cycle = 0;
...@@ -181,4 +181,3 @@ void Sound_Play_Service ( void ) ...@@ -181,4 +181,3 @@ void Sound_Play_Service ( void )
} }
} }
} }
...@@ -66,7 +66,7 @@ typedef enum ...@@ -66,7 +66,7 @@ typedef enum
******************************************************************************/ ******************************************************************************/
typedef struct typedef struct
{ {
BUZZER_Track_Index_en_t Index; uint8_t Index;
uint8_t Priority; uint8_t Priority;
uint8_t Cycle; uint8_t Cycle;
uint8_t Mode; uint8_t Mode;
...@@ -81,32 +81,32 @@ static const SndAttributeStruct SndAttributeTable[SND_SRC_INDEX_MAX] = ...@@ -81,32 +81,32 @@ static const SndAttributeStruct SndAttributeTable[SND_SRC_INDEX_MAX] =
/*================================================================================================ /*================================================================================================
音源名称 | 音源序号 | 优先级 | 循环次数 | 播放模式 | 周期(ms) 音源名称 | 音源序号 | 优先级 | 循环次数 | 播放模式 | 周期(ms)
------------------------------------------------------------------------------------------------*/ ------------------------------------------------------------------------------------------------*/
{/*00 SND_SRC_Key_Notremoved */ BUZZER_Track_Index_Tic, 1, 1, SND_MODE_SINGLE, 1000U, },/*00 1HZ 忘拔钥匙 */ {/*00 SND_SRC_Key_Notremoved */ 0x01u, 1, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 1000U, },/*00 1HZ 忘拔钥匙 */
{/*01 SND_SRC_Braking */ BUZZER_Track_Index_Tic, 2, 1, SND_MODE_SINGLE, 100U, },/*01 连续 制动 */ {/*01 SND_SRC_Braking */ 0x02u, 2, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*01 连续 制动 */
{/*02 SND_SRC_Air_Brake */ BUZZER_Track_Index_Tic, 3, 1, SND_MODE_SINGLE, 100U, },/*02 连续 制动气压 */ {/*02 SND_SRC_Air_Brake */ 0x03u, 3, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*02 连续 制动气压 */
{/*03 SND_SRC_BRAKE_LOCK */ BUZZER_Track_Index_Tic, 4, 1, SND_MODE_SINGLE, 100U, },/*03 BRAKE LOCK */ {/*03 SND_SRC_BRAKE_LOCK */ 0x04u, 4, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*03 BRAKE LOCK */
{/*04 SND_SRC_Parking_Brake */ BUZZER_Track_Index_Tic, 5, 1, SND_MODE_SINGLE, 100U, },/*04 停车制动忘记复位*/ {/*04 SND_SRC_Parking_Brake */ 0x05u, 5, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*04 停车制动忘记复位*/
{/*05 SND_SRC_Car_Dump_SPEED */ BUZZER_Track_Index_Tic, 6, 1, SND_MODE_SINGLE, 100U, },/*05 车厢报警自卸蜂鸣器*/ {/*05 SND_SRC_Car_Dump_SPEED */ 0x06u, 6, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*05 车厢报警自卸蜂鸣器*/
{/*06 SND_SRC_Temp_High */ BUZZER_Track_Index_Tic, 7, 1, SND_MODE_SINGLE, 100U, },/*06 连续 水温过热 */ {/*06 SND_SRC_Temp_High */ 0x07u, 7, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*06 连续 水温过热 */
{/*07 SND_SRC_Coolant_Low */ BUZZER_Track_Index_Tic, 8, 1, SND_MODE_SINGLE, 100U, },/*07 连续 冷却水量 */ {/*07 SND_SRC_Coolant_Low */ 0x08u, 8, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*07 连续 冷却水量 */
{/*08 SND_SRC_Oil_pressure_Low*/ BUZZER_Track_Index_Tic, 9, 1, SND_MODE_SINGLE, 100U, },/*08 -(预留:油压)*/ {/*08 SND_SRC_Oil_pressure_Low*/ 0x09u, 9, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*08 -(预留:油压)*/
{/*09 SND_SRC_ACC_AIR */ BUZZER_Track_Index_Tic, 10, 1, SND_MODE_SINGLE, 100U, },/*09 连续 ACC AIR */ {/*09 SND_SRC_ACC_AIR */ 0x0au, 10, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*09 连续 ACC AIR */
{/*10 SND_SRC_BackUP_SPEED */ BUZZER_Track_Index_Tic, 11, 1, SND_MODE_SINGLE, 1000U, },/*10 1HZ 倒车警报 */ {/*10 SND_SRC_BackUP_SPEED */ 0x0bu, 11, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 1000U, },/*10 1HZ 倒车警报 */
{/*11 SND_SRC_DS_SPEED */ BUZZER_Track_Index_Tic, 12, 1, SND_MODE_SINGLE, 100U, },/*11 DS 警报 */ {/*11 SND_SRC_DS_SPEED */ 0x00u, 12, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*11 DS 警报 */
{/*12 SND_SRC_ROWS_SPEED */ BUZZER_Track_Index_Tic, 13, 1, SND_MODE_SINGLE, 100U, },/*12 ROWS 警报 */ {/*12 SND_SRC_ROWS_SPEED */ 0x00u, 13, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*12 ROWS 警报 */
{/*13 SND_SRC_Roll_SPEED */ BUZZER_Track_Index_Tic, 14, 1, SND_MODE_SINGLE, 100U, },/*13 Roll 警报 */ {/*13 SND_SRC_Roll_SPEED */ 0x00u, 14, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*13 Roll 警报 */
{/*14 SND_SRC_EVSC_SPEED */ BUZZER_Track_Index_Tic, 15, 1, SND_MODE_SINGLE, 100U, },/*14 4HZ EVSC */ {/*14 SND_SRC_EVSC_SPEED */ 0x00u, 15, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*14 4HZ EVSC */
{/*15 SND_SRC_DPD_SPEED */ BUZZER_Track_Index_Tic, 16, 1, SND_MODE_SINGLE, 100U, },/*15 1HZ 3 DPD 手动再生 */ {/*15 SND_SRC_DPD_SPEED */ 0x00u, 16, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*15 1HZ 3 DPD 手动再生 */
{/*15 SND_SRC_DPD_SPEED */ BUZZER_Track_Index_Tic, 16, 1, SND_MODE_SINGLE, 100U, },/*15 2HZ 3 DPD 手动再生 */ {/*15 SND_SRC_DPD_SPEED */ 0x00u, 16, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*15 2HZ 3 DPD 手动再生 */
{/*15 SND_SRC_DPD_SPEED */ BUZZER_Track_Index_Tic, 16, 1, SND_MODE_SINGLE, 100U, },/*15 4HZ 3 DPD 手动再生 */ {/*15 SND_SRC_DPD_SPEED */ 0x00u, 16, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*15 4HZ 3 DPD 手动再生 */
{/*16 SND_SRC_NEES */ BUZZER_Track_Index_Tic, 17, 1, SND_MODE_SINGLE, 100U, },/*16 NEES */ {/*16 SND_SRC_NEES */ 0x00u, 17, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*16 NEES */
{/*17 SND_SRC_ECO_STOP */ BUZZER_Track_Index_Tic, 18, 1, SND_MODE_SINGLE, 100U, },/*17 eco stop */ {/*17 SND_SRC_ECO_STOP */ 0x00u, 18, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*17 eco stop */
{/*18 SND_SRC_Cyclone_High */ BUZZER_Track_Index_Tic, 19, 1, SND_MODE_SINGLE, 100U, },/*18 4HZ 气悬车高调整 */ {/*18 SND_SRC_Cyclone_High */ 0x00u, 19, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*18 4HZ 气悬车高调整 */
{/*18 SND_SRC_Cyclone_High */ BUZZER_Track_Index_Tic, 19, 1, SND_MODE_SINGLE, 100U, },/*18 0.5HZ 气悬车高调整 */ {/*18 SND_SRC_Cyclone_High */ 0x00u, 19, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*18 0.5HZ 气悬车高调整 */
{/*19 SND_SRC_SEATBELT_SPEED */ BUZZER_Track_Index_Tic, 20, 1, SND_MODE_SINGLE, 100U, },/*19 2HZ 安全带 */ {/*19 SND_SRC_SEATBELT_SPEED */ 0x00u, 20, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*19 2HZ 安全带 */
{/*20 SND_SRC_Fuel_Saving */ BUZZER_Track_Index_Tic, 21, 1, SND_MODE_SINGLE, 100U, },/*20 1HZ省油耗建议 */ {/*20 SND_SRC_Fuel_Saving */ 0x00u, 21, SND_CYCLE_NONSTOP, SND_MODE_SINGLE, 100U, },/*20 1HZ省油耗建议 */
{/*21 SND_SRC_TICK */ 0000u, 22, 1, SND_MODE_SINGLE, 100U, }, {/*21 SND_SRC_TICK */ 0x05u, 22, 1, SND_MODE_SINGLE, 100U, },
{/*22 SND_SRC_TOCK */ 0001u, 23, 1, SND_MODE_SINGLE, 100U, }, {/*22 SND_SRC_TOCK */ 0x06u, 23, 1, SND_MODE_SINGLE, 100U, },
/*==============================================================================================*/ /*==============================================================================================*/
}; };
......
...@@ -10,278 +10,117 @@ ...@@ -10,278 +10,117 @@
#include "TimerB.h" #include "TimerB.h"
#include "Sound_Tracks.h"
#define BUZZER_PWM_CHANNEL TIMERB_0_CH11 #define BUZZER_PWM_CHANNEL TIMERB_0_CH11
/******************************************************************************
单音列表
******************************************************************************/
const SingleSoundStruct SingleSound[] =
{
{2381, 210 , 23, 0}, //Tic
{2174, 230, 41, 0}, //Tac
{200, 600, 7812, 1500}, //Dong
{ 75, 380, 7844, 1000}, //Pling
{ 96, 180, 5755, 1000}, //Plong
{127, 640, 1094, 1094}, //Park Beep
};
/****************************************************************************** BuzzerPlayCtrlStruct BuzzerPlayCtrl;
复合音列表
******************************************************************************/
const ComplexSoundStruct ComplexSound[] =
{
{{BUZZER_SINGLE_SOUND_TIC}, 1}, //Tic
{{BUZZER_SINGLE_SOUND_TAC}, 1}, //Tac
{{BUZZER_SINGLE_SOUND_DONG}, 1}, //Dong
{{BUZZER_SINGLE_SOUND_PLING}, 1}, //Pling
{{BUZZER_SINGLE_SOUND_PLONG}, 1}, //Plong
{{BUZZER_SINGLE_SOUND_PARK_BEEP}, 1}, //Park Beep
{{BUZZER_SINGLE_SOUND_PLING, BUZZER_SINGLE_SOUND_PLONG}, 2}, //Pling-Plong
};
/****************************************************************************** /******************************************************************************
全局变量f 函数名:Buzzer_Start_Up
******************************************************************************/ 功 能:启动并初始化蜂鸣器
uint8_t BuzzerSoundPlayStat; 蜂鸣器PWM使用CLKSA/CLKSB时钟源,推荐的时钟源频率为50kHz~100kHz
uint8_t BuzzerSoundUpdate; 参 数:无
uint8_t * pBuzzerSoundID;
uint8_t BuzzerSoundCnt;
uint16_t BuzzerPrechargeTimer;
uint16_t BuzzerSoundPlayTime;
uint16_t BuzzerSoundFadeOutTime;
TrackInfoStruct BuzTrack[BUZZER_TRACK_CNT];
/******************************************************************************
函数名:Buzzer_Track_Play
功 能:蜂鸣器播放某一音轨
如果同一时间内有两条或多条音轨同时被播放,只有音轨编号较大的音轨将被播放
出来
参 数:TrackID :音轨编号
返回值:无 返回值:无
******************************************************************************/ ******************************************************************************/
void Buzzer_Track_Play ( uint8_t TrackID ) void Buzzer_Start_Up(void)
{ {
BuzTrack[TrackID].RepeatTimer = 0; BuzzerPlayCtrl.Mode = BUZZER_MODE_IDLE;
if ( BuzTrack[TrackID].RepeatNum == 0 ) BuzzerPlayCtrl.Track = 0;
BuzTrack[TrackID].Mode = BUZZER_SOUND_PLAY_NONSTOP; BuzzerPlayCtrl.Note = 0;
else BuzzerPlayCtrl.Timer = 0;
BuzTrack[TrackID].Mode = BUZZER_SOUND_PLAY_REPEAT; BuzzerPlayCtrl.Fade = 0;
}
/******************************************************************************
函数名:Buzzer_Track_Pause
功 能:蜂鸣器暂停播放某一音轨
参 数:TrackID :音轨编号
返回值:无
******************************************************************************/
void Buzzer_Track_Pause ( uint8_t TrackID )
{
BuzTrack[TrackID].Mode = BUZZER_SOUND_PLAY_IDLE;
}
/****************************************************************************** BUZZER_CTRL = 0;
函数名:Buzzer_Track_Pause TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL);
功 能:蜂鸣器停止播放某一音轨 TimerB_PWM_Channel_Init(BUZZER_PWM_CHANNEL, TIMERB_CLOCK_0, TIMERB_HIGH);
参 数:TrackID :音轨编号
返回值:无
******************************************************************************/
void Buzzer_Track_Stop ( uint8_t TrackID )
{
BuzTrack[TrackID].Mode = BUZZER_SOUND_PLAY_IDLE;
BuzTrack[TrackID].RepeatCnt = BuzTrack[TrackID].RepeatNum;
} }
/****************************************************************************** /******************************************************************************
函数名:Buzzer_Stop_All_Track 函数名:Buzzer_Shutdown
功 能:停止播放所有音轨 功 能:关闭蜂鸣器
参 数:无 参 数:无
返回值:无 返回值:无
******************************************************************************/ ******************************************************************************/
void Buzzer_Stop_All_Track ( void ) void Buzzer_Shutdown(void)
{ {
uint8_t i; BuzzerPlayCtrl.Mode = BUZZER_MODE_IDLE;
for ( i = 0; i < BUZZER_TRACK_CNT; i++ ) BuzzerPlayCtrl.Track = 0;
{ BuzzerPlayCtrl.Note = 0;
BuzTrack[i].Mode = BUZZER_SOUND_PLAY_IDLE; BuzzerPlayCtrl.Timer = 0;
BuzTrack[i].RepeatCnt = BuzTrack[i].RepeatNum; BuzzerPlayCtrl.Fade = 0;
}
}
/****************************************************************************** BUZZER_CTRL = 0;
函数名:Buzzer_Get_Track_Status TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL);
功 能:获取蜂鸣器某一音轨的状态
参 数:TrackID :音轨编号
返回值:0 - 空闲 1 - 播放中
******************************************************************************/
uint8_t Buzzer_Get_Track_Status ( uint8_t TrackID )
{
if ( BuzTrack[TrackID].Mode == BUZZER_SOUND_PLAY_IDLE )
return 0;
else
return 1;
} }
/****************************************************************************** /******************************************************************************
函数名:Buzzer_Get_All_Track_Status 函数名:Buzzer_Play_Track
功 能:获取蜂鸣器全部音轨的状态 功 能:单次播放指定音轨
参 数: 参 数:TrackID - 音轨编号
返回值:0 - 空闲 1 - 有某一音轨播放中 返回值:
******************************************************************************/ ******************************************************************************/
uint8_t Buzzer_Get_All_Track_Status ( void ) void Buzzer_Play_Track(uint8_t TrackID)
{ {
uint8_t i; if (BuzzerPlayCtrl.Mode)
i = BUZZER_TRACK_CNT; return;
while ( i ) if (TrackID >= SND_TRACK_TOTAL_NUM)
{ return;
i--;
if ( BuzTrack[i].Mode != BUZZER_SOUND_PLAY_IDLE ) BUZZER_CTRL = 1;
return 1;
}
return 0; BuzzerPlayCtrl.Track = TrackID;
} BuzzerPlayCtrl.Note = 0;
BuzzerPlayCtrl.Timer = (uint16_t)SndTracks[TrackID].PreCharge * 20;
BuzzerPlayCtrl.Fade = 0;
/****************************************************************************** BuzzerPlayCtrl.Mode = BUZZER_MODE_SINGLE;
函数名:Buzzer_Get_Track_Remaining_Repeat_Num
功 能:获取蜂鸣器某一音轨的剩余重复次数
参 数:TrackID :音轨编号
返回值:当返回值 大于0 时表示剩余的重复次数
当返回值 等于0 时 且 该音轨正在播放中 表示当前音轨处于不停的播放状态
******************************************************************************/
uint8_t Buzzer_Get_Track_Remaining_Repeat_Num ( uint8_t TrackID )
{
return BuzTrack[TrackID].RepeatCnt;
} }
/****************************************************************************** /******************************************************************************
函数名:Buzzer_Set_Track_Remaining_Repeat_Num 函数名:Buzzer_Play_Track
功 能:重新设定蜂鸣器某一音轨的剩余重复次数 功 能:循环播放指定音轨
参 数:TrackID :音轨编号 参 数:TrackID - 音轨编号
RepeatNum :重复次数
返回值:无 返回值:无
******************************************************************************/ ******************************************************************************/
void Buzzer_Set_Track_Remaining_Repeat_Num ( uint8_t TrackID, uint8_t RepeatNum ) void Buzzer_Repeat_Play_Track(uint8_t TrackID)
{
BuzTrack[TrackID].RepeatCnt = RepeatNum;
}
/******************************************************************************
函数名:Buzzer_Track_Init
功 能:蜂鸣器单音连续播放
参 数:TrackID :音轨编号,编号数越大,优先级越高
SoundID :播放的声音的ID
RepeatNum :重复播放次数,0表示不停的播放直到调用停止播放函数为止
RepeatCycle:重复播放周期,周期 = RepeatCycle * 20ms
返回值:无
******************************************************************************/
void Buzzer_Track_Init ( uint8_t TrackID, uint8_t SoundID, uint8_t RepeatNum, uint8_t RepeatCycle )
{
BuzTrack[TrackID].Mode = BUZZER_SOUND_PLAY_IDLE;
BuzTrack[TrackID].SoundID = SoundID;
BuzTrack[TrackID].RepeatNum = RepeatNum;
BuzTrack[TrackID].RepeatCnt = RepeatNum;
BuzTrack[TrackID].RepeatCycle = RepeatCycle;
}
/******************************************************************************
函数名:Buzzer_Track_Play_Service
功 能:蜂鸣器音轨播放服务函数,用于蜂鸣器播放音轨的后台控制
参 数:无
返回值:无
******************************************************************************
注 意:该服务函数必须每20ms被调用一次
******************************************************************************/
void Buzzer_Track_Play_Service ( void )
{ {
uint8_t i; if (BuzzerPlayCtrl.Mode)
i = BUZZER_TRACK_CNT; return;
while ( i )
{
i--;
if ( BuzTrack[i].Mode != BUZZER_SOUND_PLAY_IDLE )
{
if ( BuzTrack[i].RepeatTimer == 0 )
{
Buzzer_Play_Sound ( BuzTrack[i].SoundID );
BuzTrack[i].RepeatTimer = BuzTrack[i].RepeatCycle;
if ( BuzTrack[i].Mode == BUZZER_SOUND_PLAY_REPEAT )
{
BuzTrack[i].RepeatCnt--;
if ( BuzTrack[i].RepeatCnt == 0 )
{
BuzTrack[i].Mode = BUZZER_SOUND_PLAY_IDLE;
BuzTrack[i].RepeatCnt = BuzTrack[i].RepeatNum;
}
}
}
else
BuzTrack[i].RepeatTimer--;
if (TrackID >= SND_TRACK_TOTAL_NUM)
return; return;
}
}
}
/****************************************************************************** BUZZER_CTRL = 1;
函数名:Buzzer_Play_Sound
功 能:控制蜂鸣器播放一个复合音 BuzzerPlayCtrl.Track = TrackID;
参 数:播放的声音的ID BuzzerPlayCtrl.Note = 0;
返回值:无 BuzzerPlayCtrl.Timer = (uint16_t)SndTracks[TrackID].PreCharge * 20;
******************************************************************************/ BuzzerPlayCtrl.Fade = 0;
void Buzzer_Play_Sound ( uint8_t SoundID )
{
if ( BuzzerSoundPlayStat != 0 ) //(如果当前有声音在播放)打断当前声音播放
{
TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL);
LINE_BUZZER = 1;
BuzzerSoundPlayStat = 0;
BuzzerPrechargeTimer = 640;//500; //这时电容可能未充满电,需要一段预充电时间
}
else
BuzzerPrechargeTimer = 0; //首次播放不需要预充电
BuzzerSoundUpdate = 1; BuzzerPlayCtrl.Mode = BUZZER_MODE_LOOP;
pBuzzerSoundID = (uint8_t *)ComplexSound[SoundID].SoundTable;
BuzzerSoundCnt = ComplexSound[SoundID].SoundCnt;
//播放声音
BuzzerSoundPlayStat = 1;
} }
/****************************************************************************** /******************************************************************************
函数名:Buzzer_Init 函数名:Buzzer_Stop_Play
功 能:蜂鸣器播放初始化程序 功 能:停止播放音轨
参 数:无 参 数:无
返回值:无 返回值:无
******************************************************************************/ ******************************************************************************/
void Buzzer_Stop_Play(void)
void Buzzer_Init ( void )
{ {
LINE_BUZZER = 0; BuzzerPlayCtrl.Mode = BUZZER_MODE_IDLE;
TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL);
TimerB_PWM_Channel_Init(BUZZER_PWM_CHANNEL, TIMERB_CLOCK_0, TIMERB_HIGH);
BuzzerSoundPlayStat = 0;
} BuzzerPlayCtrl.Track = 0;
/****************************************************************************** BuzzerPlayCtrl.Note = 0;
函数名:Buzzer_Shutdown BuzzerPlayCtrl.Timer = 0;
功 能:关闭蜂鸣器 BuzzerPlayCtrl.Fade = 0;
参 数:无
返回值:无 BUZZER_CTRL = 0;
******************************************************************************/
void Buzzer_Shutdown ( void )
{
LINE_BUZZER = 0;
TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL); TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL);
BuzzerSoundPlayStat = 0;
} }
/****************************************************************************** /******************************************************************************
...@@ -290,63 +129,47 @@ void Buzzer_Shutdown ( void ) ...@@ -290,63 +129,47 @@ void Buzzer_Shutdown ( void )
参 数:无 参 数:无
返回值:无 返回值:无
****************************************************************************** ******************************************************************************
注 意:该服务函数必须嵌入到64us定时中断内 注 意:该服务函数必须嵌入到50us定时中断内
******************************************************************************/ ******************************************************************************/
void Buzzer_Play_ISR ( void ) void Buzzer_Play_ISR(void)
{ {
if ( BuzzerSoundPlayStat ) if (BuzzerPlayCtrl.Mode)
{ {
if ( BuzzerPrechargeTimer ) if (BuzzerPlayCtrl.Timer)
BuzzerPrechargeTimer--; BuzzerPlayCtrl.Timer--;
else
if (BuzzerPlayCtrl.Timer == 0)
{ {
if ( BuzzerSoundUpdate ) if (BuzzerPlayCtrl.Note < SndTracks[BuzzerPlayCtrl.Track].NoteNum)
{ {
TimerB_PWM_Channel_Fre_Set(BUZZER_PWM_CHANNEL, SingleSound[*pBuzzerSoundID].Freq, SingleSound[*pBuzzerSoundID].Duty); BUZZER_CTRL = 1;
//TimerB_PWM_Channel_Duty_Set(BUZZER_PWM_CHANNEL, SingleSound[*pBuzzerSoundID].Duty);
if (SndTracks[BuzzerPlayCtrl.Track].Note[BuzzerPlayCtrl.Note].Freq)
{
TimerB_PWM_Channel_Fre_Set(BUZZER_PWM_CHANNEL, SndTracks[BuzzerPlayCtrl.Track].Note[BuzzerPlayCtrl.Note].Freq, SndTracks[BuzzerPlayCtrl.Track].Note[BuzzerPlayCtrl.Note].Duty);
// TimerB_PWM_Channel_Duty_Set(BUZZER_PWM_CHANNEL, SndTracks[BuzzerPlayCtrl.Track].Note[BuzzerPlayCtrl.Note].Duty);
TimerB_PWM_Channel_Start(BUZZER_PWM_CHANNEL); TimerB_PWM_Channel_Start(BUZZER_PWM_CHANNEL);
BuzzerSoundPlayTime = SingleSound[*pBuzzerSoundID].PlayTime;
BuzzerSoundFadeOutTime = SingleSound[*pBuzzerSoundID].FadeOutTime;
BuzzerSoundUpdate = 0;
} }
else
TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL);
BuzzerSoundPlayTime--; BuzzerPlayCtrl.Timer = SndTracks[BuzzerPlayCtrl.Track].Note[BuzzerPlayCtrl.Note].Interval * 20;
BuzzerPlayCtrl.Fade = SndTracks[BuzzerPlayCtrl.Track].Note[BuzzerPlayCtrl.Note].Fade * 20;
if ( BuzzerSoundPlayTime < BuzzerSoundFadeOutTime ) BuzzerPlayCtrl.Note++;
LINE_BUZZER = 0; }
else
if ( BuzzerSoundPlayTime == 0 )
{ {
LINE_BUZZER = 1; //重新对蜂鸣器电容充电 if (BuzzerPlayCtrl.Mode == BUZZER_MODE_LOOP)
TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL); //关闭蜂鸣器频率输出 BuzzerPlayCtrl.Note = 0;
BuzzerSoundCnt--; else
if ( BuzzerSoundCnt )
{ {
BuzzerPrechargeTimer = 640 ;//500; //增加预充电时间32ms BUZZER_CTRL = 0;
BuzzerSoundUpdate = 1; TimerB_PWM_Channel_Stop(BUZZER_PWM_CHANNEL);
pBuzzerSoundID++; BuzzerPlayCtrl.Mode = BUZZER_MODE_IDLE;
} }
else
BuzzerSoundPlayStat = 0;
} }
} }
else if (BuzzerPlayCtrl.Timer < BuzzerPlayCtrl.Fade)
BUZZER_CTRL = 0;
} }
} }
\ No newline at end of file
void Warning_Sound_Init ( void )
{
Buzzer_Track_Init ( 0, BUZZER_SOUND_TIC, 1, 25 ); // Track0 Tic x1 @500ms 转向灯上升沿
Buzzer_Track_Init ( 1, BUZZER_SOUND_TAC, 1, 25 ); // Track1 Tac x1 @500ms 转向灯下降沿
Buzzer_Track_Init ( 2, BUZZER_SOUND_PLING, 120, 48 ); // Track2 Pling x120 @1000ms 安全带
Buzzer_Track_Init ( 3, BUZZER_SOUND_PLING, 5, 48 ); // Track3 Pling x∞ @1000ms 超速
Buzzer_Track_Init ( 4, BUZZER_SOUND_DONG , 60, 48 ); // Track4 Dong x60 @1000ms 门开
Buzzer_Track_Init ( 5, BUZZER_SOUND_DONG , 60, 48 ); // Track5 Dong x60 @1000ms 手刹
Buzzer_Track_Init ( 6, BUZZER_SOUND_DONG , 0, 48 ); // Track6 Dong x∞ @1000ms 小灯未关
Buzzer_Track_Init ( 7, BUZZER_SOUND_PLING_PLONG , 3, 50 ); // Track7 Pling-Plong x3 @1900ms 通用
Buzzer_Track_Init ( 8, BUZZER_SOUND_DONG , 3, 50 ); // Track8 Dong x3 @1000ms 通用
Buzzer_Track_Init ( 9, BUZZER_SOUND_PARK_BEEP , 0, 48 ); // Track8 Park Beep x∞ @1000ms 雷达
}
...@@ -5,117 +5,40 @@ ...@@ -5,117 +5,40 @@
版 本:V1.0 版 本:V1.0
日 期:2016.5.18 日 期:2016.5.18
******************************************************************************/ ******************************************************************************/
#ifndef _BUZZER_H_ #ifndef _BUZZER_H_
#define _BUZZER_H_ #define _BUZZER_H_
#include "GPIO.h" #include "GPIO.h"
#include "r_typedefs.h" #include "r_typedefs.h"
/*****************************************************************************
音轨总数
*****************************************************************************/
#define BUZZER_TRACK_CNT ((uint8_t)10)
/*****************************************************************************
声音重定义
*****************************************************************************/
#define BUZZER_SOUND_TIC ((uint8_t)0)
#define BUZZER_SOUND_TAC ((uint8_t)1)
#define BUZZER_SOUND_DONG ((uint8_t)2)
#define BUZZER_SOUND_PLING ((uint8_t)3)
#define BUZZER_SOUND_PLONG ((uint8_t)4)
#define BUZZER_SOUND_PARK_BEEP ((uint8_t)5)
#define BUZZER_SOUND_PLING_PLONG ((uint8_t)6)
/*****************************************************************************
单音重定义
*****************************************************************************/
#define BUZZER_SINGLE_SOUND_TIC ((uint8_t)0)
#define BUZZER_SINGLE_SOUND_TAC ((uint8_t)1)
#define BUZZER_SINGLE_SOUND_DONG ((uint8_t)2)
#define BUZZER_SINGLE_SOUND_PLING ((uint8_t)3)
#define BUZZER_SINGLE_SOUND_PLONG ((uint8_t)4)
#define BUZZER_SINGLE_SOUND_PARK_BEEP ((uint8_t)5)
typedef enum
{
BUZZER_Track_Index_Tic = 0x00,
BUZZER_Track_Index_Tac ,
BUZZER_Track_Index_Dong ,
BUZZER_Track_Index_Pling ,
BUZZER_Track_Index_Plong ,
BUZZER_Track_Index_ParkBeep ,
BUZZER_Track_Index_3900hz_500Dty,
BUZZER_Track_Index_2300hz_500Dty,
BUZZER_Track_Index_3900hz_280Dty,
BUZZER_Track_Index_2300hz_280Dty,
BUZZER_Track_Index_3900hz_190Dty,
BUZZER_Track_Index_2600hz_167Dty,
BUZZER_Track_Index_2000hz_500Dty,
BUZZER_Track_Index_0800hz_500Dty,
BUZZER_Track_Index_MAX,
} BUZZER_Track_Index_en_t;
/***************************************************************************** #define BUZZER_PWM_CHANNEL 4
播放类型
*****************************************************************************/
#define BUZZER_SOUND_PLAY_IDLE ((uint8_t)0)
#define BUZZER_SOUND_PLAY_REPEAT ((uint8_t)1)
#define BUZZER_SOUND_PLAY_NONSTOP ((uint8_t)2)
/******************************************************************************
信号重定义
******************************************************************************/
#define LINE_BUZZER BUZZER_ACC_OUT_EN #define LINE_BUZZER BUZZER_ACC_OUT_EN
//#define BUZZER_PWM_EN PWME_PWME4
//#define BUZZER_FREQ_CTRL PWMPER4 //蜂鸣器频率 = 100kHz / BUZZER_FREQ_CTRL
//#define BUZZER_DUTY_CTRL PWMDTY4
/****************************************************************************** #ifndef BUZZER_CTRL
结构定义 #define BUZZER_CTRL LINE_BUZZER
******************************************************************************/ #endif
typedef struct
{
uint16_t Freq; //频率控制字 设定值 = 100kHz / 单音频率
uint16_t Duty;
uint16_t PlayTime; //单音播放时间 设定值 = 单音播放时间 / 64us
uint16_t FadeOutTime; //单音淡出时间 设定值 = 单音淡出时间 / 64us
} SingleSoundStruct;
typedef struct #define BUZZER_MODE_IDLE 0
{ #define BUZZER_MODE_SINGLE 1
uint8_t SoundTable[7]; //复合音各单音列表 #define BUZZER_MODE_LOOP 2
uint8_t SoundCnt; //复合音包含的单音总数
} ComplexSoundStruct;
typedef struct typedef struct
{ {
uint8_t Mode; uint8_t Mode;
uint8_t SoundID; uint8_t Track;
uint8_t RepeatNum; uint8_t Note;
uint8_t RepeatCnt; uint16_t Timer;
uint8_t RepeatCycle; uint16_t Fade;
uint8_t RepeatTimer; } BuzzerPlayCtrlStruct;
} TrackInfoStruct;
/****************************************************************************** /******************************************************************************
函数声明 函数声明
******************************************************************************/ ******************************************************************************/
void Buzzer_Init ( void ); void Buzzer_Start_Up(void);
void Buzzer_Shutdown ( void ); void Buzzer_Shutdown(void);
void Buzzer_Play_ISR ( void ); //嵌入到64us中断中 void Buzzer_Play_Track(uint8_t TrackID);
void Warning_Sound_Init ( void ); void Buzzer_Repeat_Play_Track(uint8_t TrackID);
void Buzzer_Stop_All_Track ( void ); void Buzzer_Stop_Play(void);
void Buzzer_Track_Play_Service ( void ); //每20ms调用一次 void Buzzer_Play_ISR(void);
void Buzzer_Track_Play ( uint8_t TrackID );
void Buzzer_Track_Stop ( uint8_t TrackID );
void Buzzer_Track_Pause ( uint8_t TrackID );
void Buzzer_Play_Sound ( uint8_t SoundID );
void Buzzer_Set_Track_Remaining_Repeat_Num ( uint8_t TrackID, uint8_t RepeatNum );
void Buzzer_Track_Init ( uint8_t TrackID, uint8_t SoundID, uint8_t RepeatNum, uint8_t RepeatCycle );
uint8_t Buzzer_Get_All_Track_Status ( void );
uint8_t Buzzer_Get_Track_Status ( uint8_t TrackID );
uint8_t Buzzer_Get_Track_Remaining_Repeat_Num ( uint8_t TrackID );
#endif #endif
...@@ -142,7 +142,7 @@ void Sys_Run_Mode_10ms_Tasks(void) ...@@ -142,7 +142,7 @@ void Sys_Run_Mode_10ms_Tasks(void)
Popup_Alone_Sound_Server(); Popup_Alone_Sound_Server();
Telltales_Left_Right_Management_Service(); Telltales_Left_Right_Management_Service();
Telltales_Management(); Telltales_Management();
//Test_LED_AllLight(); // Test_LED_AllLight();
Key_Service(); Key_Service();
CAN_BUSOFF_Recover(); CAN_BUSOFF_Recover();
...@@ -170,10 +170,9 @@ void Sys_Run_Mode_20ms_Tasks(void) ...@@ -170,10 +170,9 @@ void Sys_Run_Mode_20ms_Tasks(void)
Voltmeter_Processing_Service(); Voltmeter_Processing_Service();
Sound_Management_Service(); Sound_Management_Service();
CD4051B_Debounce_Service(); CD4051B_Debounce_Service();
Seg_Display_Service();/*段码显示逻辑*/ Seg_Display_Service(); /*段码显示逻辑*/
Seg_Buffer_Commit(); Seg_Buffer_Commit();
BU98R10_Update_Request(); BU98R10_Update_Request();
Buzzer_Track_Play_Service();
} }
/*============================================================================*/ /*============================================================================*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment