92 lines
1.9 KiB
C
Raw Normal View History

2024-07-03 21:57:00 +08:00
/***************************************************************
copyright from private LiuXiao
if you have any question,you can contact me by email 461445092@qq.com
2022-10-05 17:56:24.020233
***************************************************************/
#include <string.h>
#include ".\SA51024.h"
#include "../config/mcal/peripheral/tc/plib_tc0.h"
#include "../config/mcal/peripheral/port/plib_port.h"
extern STATE_UINT16 speaker_cycle_u16;
void SA51024_MainTask(void);
void TC0_CallBack_Function (TC_TIMER_STATUS status, uintptr_t context)
{
if ((DAC_IsReady(DAC_CHANNEL_0) == true))
{
SA51024_MainTask();
}
}
/*
sa51024 related var init
*/
void SA51024_Init(void)
{
uint16 index = 0;
sa51024_state = SA51024_IDLE;
sa51024_strength= SA51024_STRENGTH_LEVEL0;
sa51024_wave_index = 0;
for(index =0; index < NUM_ELEMENTS; index++)
{
sa51024_wave_tbl_u16_new[index] = (uint16)((Raw_data[index]/32.0) + 2048);
}
TC0_TimerCallbackRegister(TC0_CallBack_Function, 0);
TC0_TimerStart();
}
/*100us task*/
void SA51024_MainTask(void)
{
/*output sin wave*/
if(SA51024_WORKING == SA51024_WAVE_STATE )
{
SA51024_WAVE_INDEX++;
if(SA51024_WAVE_INDEX>=SA51024_WAVE_MAX_NUM)//SA51024_WAVE_MAX_ID
{
SA51024_WAVE_INDEX = 0;
speaker_cycle_u16 = SA51024_WAVE_MAX_NUM;
SA51024_WAVE_STATE = SA51024_STOP;
}
SA51024_TRIG_ADC(SA51024_WAVE_TABLE[SA51024_WAVE_INDEX]);
}
else if(SA51024_STOP == SA51024_WAVE_STATE )
{/*output 0V*/
SA51024_WAVE_INDEX = 0;
SA51024_TRIG_ADC(2048);
SA51024_WAVE_STATE = SA51024_IDLE;
}
else{
SA51024_TRIG_ADC(2048);
}
}
/*
set sa51024 control state
para state woking->vibrate
para level ->vibrate strenght
*/
void SA51024_Set_State(FA51024_main_e_typ state,FA51024_ctrl_e_typ level)
{
if(SA51024_WORKING == state)
{
SA51024_WAVE_STATE = SA51024_WORKING;
}
else
{
SA51024_WAVE_STATE = SA51024_STOP;
}
}