功放控制
📎 原始文档:https://www.kdocs.cn/l/cns0gXQfFhz0 功放控制
需要添加两个文件
user_pa.c
#include "user_pa.h"
#include "gpio.h"
#include "app_core.h"
#include "app_action.h"
#include "app_main.h"
#include "app_task.h"
//#include "mic2dac.h"
bool pa_sys_automute;
void user_pa_in_service(u8 cmd);
void user_normal_pa_in_service(void);
static u16 user_pa_timer = 0;
static bool mute_flag = PA_MUTE;
void set_pa_sys_automute(bool mute)
{
pa_sys_automute = mute;
}
bool get_pa_sys_automute(void)
{
return pa_sys_automute;
}
bool get_mute_flag(void)
{
return (mute_flag == PA_UMUTE)?true:false;
}
void io_strl(u8 cmd)
{
switch (cmd) {
case PA_MUTE:
if(mute_flag != PA_MUTE)
{
printf("PA_MUTE\n");
mute_flag = PA_MUTE;
gpio_set_pull_up(MUTE_PIN, 0);
gpio_set_pull_down(MUTE_PIN, 0);
gpio_set_direction(MUTE_PIN, 0);
gpio_direction_output(MUTE_PIN,MUTE_MODE);
if(user_pa_timer)
{
sys_timer_del(user_pa_timer);
user_pa_timer = 0;
}
}
break;
case PA_UMUTE:
if(mute_flag != PA_UMUTE)
{
printf("PA_UMUTE\n");
mute_flag = PA_UMUTE;
gpio_set_pull_up(MUTE_PIN, 0);
gpio_set_pull_down(MUTE_PIN, 0);
gpio_set_direction(MUTE_PIN, 0);
gpio_direction_output(MUTE_PIN,!MUTE_MODE);
if(user_pa_timer)
{
sys_timer_del(user_pa_timer);
user_pa_timer = 0;
}
user_pa_timer = sys_timer_add(NULL,user_normal_pa_in_service,1000);
}
break;
case PA_CLASS_D:
printf("PA_CLASS_D\n");
break;
case PA_CLASS_AB:
printf("PA_CLASS_AB\n");
break;
case PA_INIT:
gpio_set_pull_up(MUTE_PIN, 0);
gpio_set_pull_down(MUTE_PIN, 0);
gpio_set_direction(MUTE_PIN, 0);
gpio_direction_output(MUTE_PIN,MUTE_MODE);
if(user_pa_timer)
{
sys_timer_del(user_pa_timer);
user_pa_timer = 0;
}
break;
default:
break;
}
}
extern APP_VAR app_var;
void user_pa_in_service(u8 cmd)
{
printf("%s %d\n",__func__,cmd);
bool mute;
// switch (cmd)
// {
// case STATE_AUTOMUTE:
// {
// mute = get_pa_sys_automute();
// if(app_check_curr_task(APP_BT_TASK))
// {
// extern bool user_bt_dec_runing(void);
// if(user_bt_dec_runing())
// {
// mute = 0;
// }else{
// mute = 1;
// }
// }
// }
// break;
// case STATE_DEC_CHANGE:
// case STATE_NORMAL:
// {
// mute = get_pa_sys_automute();
// if(app_check_curr_task(APP_BT_TASK))
// {
// extern bool user_bt_dec_runing(void);
// if(user_bt_dec_runing())
// {
// mute = 0;
// }else{
// mute = 1;
// }
// }
// }
// break;
// case STATE_TONE_CHANGE:
// {
// mute = get_pa_sys_automute();
// if(app_check_curr_task(APP_BT_TASK))
// {
// extern bool user_bt_dec_runing(void);
// if(user_bt_dec_runing())
// {
// mute = 0;
// }else{
// mute = 1;
// }
// }
// }
// break;
// default:
// break;
// }
mute = get_pa_sys_automute();
if(cmd != STATE_AUTOMUTE)
{
if(app_check_curr_task(APP_BT_TASK))
{
extern bool user_bt_dec_runing(void);
if(user_bt_dec_runing())
{
mute = 0;
}else{
mute = 1;
}
}
}
if(cmd == STATE_MIC_CLOSE)
{
mute = 1;
}
/*******************************mute*******************************/
// if(!app_var.music_volume){
// // puts(">> L\n");
// printf("!app_var.music_volume\n");
// mute = 1;
// }
/*******************************umute*******************************/
extern int tone_get_status(void);
if(tone_get_status()){
mute = 0;
printf("tone_get_status\n");
}
//if(get_mic2dac_status() == MIC2DAC_STATUS_START)
//{
// printf("get_mic2dac_status() == MIC2DAC_STATUS_START\n");
// mute = 0;
//}
printf(">>>>>>>>>>> mute flag %d\n",mute);
if(mute){
io_strl(PA_MUTE);
}else{
io_strl(PA_UMUTE);
}
}
void user_normal_pa_in_service(void)
{
user_pa_in_service(STATE_NORMAL);
}
user_pa.h
#ifndef USER_PA_H
#define USER_PA_H
#include "typedef.h"
#include "board_config.h"
#define MUTE_PIN IO_PORTA_00
#define MODE_PIN IO_PORTB_05
enum {
MUTE_MODE_LOW,
MUTE_MODE_HIGH,
};
#define MUTE_MODE MUTE_MODE_LOW
enum {
PA_INIT,
PA_POWER_OFF,
PA_CLASS_AB,
PA_CLASS_D,
PA_MUTE,
PA_UMUTE,
};
enum{
STATE_AUTOMUTE,
STATE_DEC_CHANGE,
STATE_TONE_CHANGE,
STATE_NORMAL,
STATE_MIC_CLOSE,
};
extern void io_strl(u8 cmd);
#define M_PA_IO_H_LEVEL(GPIO) do{ \
gpio_set_direction(GPIO,0);\
gpio_set_pull_down(GPIO,0);\
gpio_set_pull_up(GPIO,0);\
gpio_set_die(GPIO,1);\
gpio_set_output_value(GPIO,1);\
} while(0)
#define M_PA_IO_L_LEVEL(GPIO) do{ \
gpio_set_direction(GPIO,0);\
gpio_set_pull_down(GPIO,0);\
gpio_set_pull_up(GPIO,0);\
gpio_set_die(GPIO,1);\
gpio_set_output_value(GPIO,0);\
} while(0)
#define M_PA_IO_R_LEVEL(GPIO) do{ \
gpio_set_direction(GPIO,1);\
gpio_set_pull_down(GPIO,0);\
gpio_set_pull_up(GPIO,0);\
gpio_set_die(GPIO,1);\
gpio_set_output_value(GPIO,0);\
} while(0)
#endif
自动mute功能
#define AUDIO_OUTPUT_AUTOMUTE ENABLE //打开自动mute board_xxx.h
////////////////////////////////////////////////////////
void audio_mix_out_automute_mute(u8 mute) //修改这个函数 audio_dec.c
{
printf(">>>>>>>>>>>>>>>>>>>> %s\n", mute ? ("MUTE") : ("UNMUTE"));
extern void set_pa_sys_automute(bool mute);
extern void user_pa_in_service(u8 cmd);
set_pa_sys_automute(mute);
user_pa_in_service(STATE_AUTOMUTE);
}
提示音相关控制


蓝牙相关控制



功放引脚配置
