update eq from DS3
This commit is contained in:
@@ -45,7 +45,11 @@
|
||||
|
||||
/* Enable/Disable Mixing core(s) - Default is on */
|
||||
#ifndef MIXER
|
||||
#define MIXER (1)
|
||||
#define MIXER (0)
|
||||
#endif
|
||||
|
||||
#ifndef _XUA_BMAX_POWER
|
||||
#define _XUA_BMAX_POWER (50)
|
||||
#endif
|
||||
|
||||
/* Set the number of mixes to perform - Default is 0 i.e mixing disabled */
|
||||
@@ -177,7 +181,184 @@
|
||||
#endif
|
||||
|
||||
#define EXCLUDE_USB_AUDIO_MAIN (1)
|
||||
/*
|
||||
* New spispec for QF60 board
|
||||
* */
|
||||
|
||||
#define FL_QUADDEVICE_XT25F16F \
|
||||
{ \
|
||||
0, /* XT25F16F - Just specify 0 as flash_id */ \
|
||||
256, /* page size */ \
|
||||
8192, /* num pages */ \
|
||||
3, /* address size */ \
|
||||
4, /* log2 clock divider */ \
|
||||
0x9F, /* QSPI_RDID */ \
|
||||
0, /* id dummy bytes */ \
|
||||
3, /* id size in bytes */ \
|
||||
0x0B4015, /* device id */ \
|
||||
0x20, /* QSPI_SE */ \
|
||||
4096, /* Sector erase is always 4KB */ \
|
||||
0x06, /* QSPI_WREN */ \
|
||||
0x04, /* QSPI_WRDI */ \
|
||||
PROT_TYPE_SR, /* Protection via SR */ \
|
||||
{{0x0,0x00},{0,0}}, /* QSPI_SP, QSPI_SU */ \
|
||||
0x02, /* QSPI_PP */ \
|
||||
0xEB, /* QSPI_READ_FAST */ \
|
||||
1, /* 1 read dummy byte */ \
|
||||
SECTOR_LAYOUT_REGULAR, /* mad sectors */ \
|
||||
{4096,{0,{0}}}, /* regular sector sizes */ \
|
||||
0x05, /* QSPI_RDSR */ \
|
||||
0x01, /* QSPI_WRSR */ \
|
||||
0x01, /* QSPI_WIP_BIT_MASK */ \
|
||||
}
|
||||
|
||||
#define FL_QUADDEVICE_WINBOND_W25Q16JW \
|
||||
{ \
|
||||
0, /* W25Q16JW - Just specify 0 as flash_id */ \
|
||||
256, /* page size */ \
|
||||
8192, /* num pages */ \
|
||||
3, /* address size */ \
|
||||
4, /* log2 clock divider */ \
|
||||
0x9F, /* QSPI_RDID */ \
|
||||
0, /* id dummy bytes */ \
|
||||
3, /* id size in bytes */ \
|
||||
0xEF4015, /* device id */ \
|
||||
0x20, /* QSPI_SE */ \
|
||||
4096, /* Sector erase is always 4KB */ \
|
||||
0x06, /* QSPI_WREN */ \
|
||||
0x04, /* QSPI_WRDI */ \
|
||||
PROT_TYPE_SR, /* Protection via SR */ \
|
||||
{{0x3C,0x00},{0,0}}, /* QSPI_SP, QSPI_SU */ \
|
||||
0x02, /* QSPI_PP */ \
|
||||
0xEB, /* QSPI_READ_FAST */ \
|
||||
1, /* 1 read dummy byte */ \
|
||||
SECTOR_LAYOUT_REGULAR, /* mad sectors */ \
|
||||
{4096,{0,{0}}}, /* regular sector sizes */ \
|
||||
0x05, /* QSPI_RDSR */ \
|
||||
0x01, /* QSPI_WRSR */ \
|
||||
0x01, /* QSPI_WIP_BIT_MASK */ \
|
||||
}
|
||||
|
||||
#define FL_QUADDEVICE_UC25HQ16B \
|
||||
{ \
|
||||
0, /* W25Q16JW - Just specify 0 as flash_id */ \
|
||||
256, /* page size */ \
|
||||
8192, /* num pages */ \
|
||||
3, /* address size */ \
|
||||
4, /* log2 clock divider */ \
|
||||
0x9F, /* QSPI_RDID */ \
|
||||
0, /* id dummy bytes */ \
|
||||
3, /* id size in bytes */ \
|
||||
0xB36015, /* device id */ \
|
||||
0x20, /* QSPI_SE */ \
|
||||
4096, /* Sector erase is always 4KB */ \
|
||||
0x06, /* QSPI_WREN */ \
|
||||
0x04, /* QSPI_WRDI */ \
|
||||
PROT_TYPE_SR, /* Protection via SR */ \
|
||||
{{0x3C,0x00},{0,0}}, /* QSPI_SP, QSPI_SU */ \
|
||||
0x02, /* QSPI_PP */ \
|
||||
0xEB, /* QSPI_READ_FAST */ \
|
||||
1, /* 1 read dummy byte */ \
|
||||
SECTOR_LAYOUT_REGULAR, /* mad sectors */ \
|
||||
{4096,{0,{0}}}, /* regular sector sizes */ \
|
||||
0x05, /* QSPI_RDSR */ \
|
||||
0x01, /* QSPI_WRSR */ \
|
||||
0x01, /* QSPI_WIP_BIT_MASK */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* New spispec for QF60 3V3 board
|
||||
* */
|
||||
|
||||
#define FL_QUADDEVICE_WINBOND_W25Q32JVxxxM \
|
||||
{ \
|
||||
0, /* W25Q32JV - Just specify 0 as flash_id */ \
|
||||
256, /* page size */ \
|
||||
16384, /* num pages */ \
|
||||
3, /* address size */ \
|
||||
4, /* log2 clock divider */ \
|
||||
0x9F, /* QSPI_RDID */ \
|
||||
0, /* id dummy bytes */ \
|
||||
3, /* id size in bytes */ \
|
||||
0xEF4016, /* device id */ \
|
||||
0x20, /* QSPI_SE */ \
|
||||
4096, /* Sector erase is always 4KB */ \
|
||||
0x06, /* QSPI_WREN */ \
|
||||
0x04, /* QSPI_WRDI */ \
|
||||
PROT_TYPE_SR, /* Protection via SR */ \
|
||||
{{0x3C,0x00},{0,0}}, /* QSPI_SP, QSPI_SU */ \
|
||||
0x02, /* QSPI_PP */ \
|
||||
0xEB, /* QSPI_READ_FAST */ \
|
||||
1, /* 1 read dummy byte */ \
|
||||
SECTOR_LAYOUT_REGULAR, /* mad sectors */ \
|
||||
{4096,{0,{0}}}, /* regular sector sizes */ \
|
||||
0x05, /* QSPI_RDSR */ \
|
||||
0x01, /* QSPI_WRSR */ \
|
||||
0x01, /* QSPI_WIP_BIT_MASK */ \
|
||||
}
|
||||
|
||||
/*
|
||||
* New spispec for xcore-AI explorer board
|
||||
* */
|
||||
#define FL_QUADDEVICE_MX25R3235 \
|
||||
{ \
|
||||
0, /* MX25R3235 - Just specify 0 as flash_id */ \
|
||||
256, /* page size */ \
|
||||
16384, /* num pages */ \
|
||||
3, /* address size */ \
|
||||
3, /* log2 clock divider */ \
|
||||
0x9F, /* QSPI_RDID */ \
|
||||
0, /* id dummy bytes */ \
|
||||
3, /* id size in bytes */ \
|
||||
0xC22816, /* device id */ \
|
||||
0x20, /* QSPI_SE */ \
|
||||
4096, /* Sector erase is always 4KB */ \
|
||||
0x06, /* QSPI_WREN */ \
|
||||
0x04, /* QSPI_WRDI */ \
|
||||
PROT_TYPE_SR, /* Protection via SR */ \
|
||||
{{0x3C,0x00},{0,0}}, /* QSPI_SP, QSPI_SU */ \
|
||||
0x02, /* QSPI_PP */ \
|
||||
0xEB, /* QSPI_READ_FAST */ \
|
||||
1, /* 1 read dummy byte */ \
|
||||
SECTOR_LAYOUT_REGULAR, /* mad sectors */ \
|
||||
{4096,{0,{0}}}, /* regular sector sizes */ \
|
||||
0x05, /* QSPI_RDSR */ \
|
||||
0x01, /* QSPI_WRSR */ \
|
||||
0x01, /* QSPI_WIP_BIT_MASK */ \
|
||||
}
|
||||
|
||||
#define FL_QUADDEVICE_MX25L160E \
|
||||
{ \
|
||||
0, /* MX25R3235 - Just specify 0 as flash_id */ \
|
||||
256, /* page size */ \
|
||||
8192, /* num pages */ \
|
||||
3, /* address size */ \
|
||||
3, /* log2 clock divider */ \
|
||||
0x9F, /* QSPI_RDID */ \
|
||||
0, /* id dummy bytes */ \
|
||||
3, /* id size in bytes */ \
|
||||
0xC22017, /* device id */ \
|
||||
0x20, /* QSPI_SE */ \
|
||||
4096, /* Sector erase is always 4KB */ \
|
||||
0x06, /* QSPI_WREN */ \
|
||||
0x04, /* QSPI_WRDI */ \
|
||||
PROT_TYPE_SR, /* Protection via SR */ \
|
||||
{{0x3C,0x00},{0,0}}, /* QSPI_SP, QSPI_SU */ \
|
||||
0x02, /* QSPI_PP */ \
|
||||
0xEB, /* QSPI_READ_FAST */ \
|
||||
1, /* 1 read dummy byte */ \
|
||||
SECTOR_LAYOUT_REGULAR, /* mad sectors */ \
|
||||
{4096,{0,{0}}}, /* regular sector sizes */ \
|
||||
0x05, /* QSPI_RDSR */ \
|
||||
0x01, /* QSPI_WRSR */ \
|
||||
0x01, /* QSPI_WIP_BIT_MASK */ \
|
||||
}
|
||||
|
||||
|
||||
// DFU_FLASH_DEVICE is a comma-separated list of flash spec structures
|
||||
// This define is used in lib_xua/lib_xua/src/dfu/flashlib_user.c
|
||||
#define DFU_FLASH_DEVICE FL_QUADDEVICE_XT25F16F, FL_QUADDEVICE_WINBOND_W25Q16JW, FL_QUADDEVICE_UC25HQ16B, FL_QUADDEVICE_WINBOND_W25Q32JVxxxM, FL_QUADDEVICE_MX25R3235, FL_QUADDEVICE_MX25L160E
|
||||
//:
|
||||
#include "user_main.h"
|
||||
|
||||
#endif
|
||||
|
||||
@@ -46,7 +46,6 @@ audio_type g_new_audio_type, g_audio_type = 0;
|
||||
unsigned g_mute_enable = 0;
|
||||
unsigned g_mute_state = 0;
|
||||
unsigned g_mute_state_old = 1;
|
||||
unsigned g_samfreq;
|
||||
unsigned g_unmute_dac_state, g_unmute_time, g_format_time;
|
||||
unsigned g_volume_level = 60, g_saved_volume_level = 60;
|
||||
unsigned g_request_volume_set = 0;
|
||||
@@ -62,7 +61,7 @@ uint32_t get_reference_time();
|
||||
unsigned g_disable_i2c = 0;
|
||||
unsigned g_dac_mode = 10;
|
||||
unsigned g_new_dac_mode = 0;
|
||||
unsigned g_samFreq = DEFAULT_FREQ;
|
||||
unsigned g_samfreq = 48000;
|
||||
// 改动原因:添加DSD模式全局变量,用于HID命令读取采样率和格式信息(已去掉DAC采样分辨率)
|
||||
unsigned g_dsd_mode = 0; // DSD模式:0=PCM, >0=DSD
|
||||
unsigned g_gain_mode = 0; // 0: 低阻, 1: 高阻
|
||||
@@ -429,35 +428,42 @@ void AudioHwRemote2(chanend c, client interface i2c_master_if i2c)
|
||||
GET_SHARED_GLOBAL(force_request_mode_change, g_force_request_eq_mode_change);
|
||||
if (new_eq_mode != request_eq_mode)
|
||||
{
|
||||
// debug_printf("new eq mode != request eq mode\n");
|
||||
SET_SHARED_GLOBAL(g_new_eq_mode, request_eq_mode);
|
||||
}
|
||||
|
||||
if (force_request_mode_change == 1)
|
||||
{
|
||||
debug_printf("force request mode change\n");
|
||||
SET_SHARED_GLOBAL(g_force_eq_mode_change, 1);
|
||||
SET_SHARED_GLOBAL(g_force_request_eq_mode_change, 0);
|
||||
}
|
||||
break;
|
||||
#if 0
|
||||
|
||||
case eq_sync_timer when timerafter(eq_sync_time) :> void :
|
||||
eq_sync_time += EQ_SYNC_DELAY;
|
||||
|
||||
// 使用单参数存储系统保存脏参数(独立保存EQ参数)
|
||||
if (eq_save_dirty_params() == 0) {
|
||||
//debug_printf("Single EQ parameters synced to Flash successfully\n");
|
||||
} else {
|
||||
//debug_printf("Failed to sync single EQ parameters to Flash\n");
|
||||
}
|
||||
|
||||
// 独立保存脏的增益
|
||||
if (eq_save_dirty_gain() == 0) {
|
||||
// debug_printf("Gain synced to Flash successfully\n");
|
||||
} else {
|
||||
//debug_printf("Failed to sync gain to Flash\n");
|
||||
}
|
||||
|
||||
// 独立保存脏的模式名称
|
||||
if (eq_save_dirty_names() == 0) {
|
||||
// debug_printf("Mode names synced to Flash successfully\n");
|
||||
} else {
|
||||
//debug_printf("Failed to sync mode names to Flash\n");
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
@@ -699,6 +705,7 @@ void AudioHwInit()
|
||||
/* Configures the external audio hardware for the required sample frequency */
|
||||
void AudioHwConfig(unsigned samFreq, unsigned mClk, unsigned dsdMode, unsigned sampRes_DAC, unsigned sampRes_ADC)
|
||||
{
|
||||
g_samfreq = samFreq;
|
||||
{
|
||||
sw_pll_fixed_clock(mClk);
|
||||
}
|
||||
|
||||
@@ -202,9 +202,7 @@ void UserBufferManagement(unsigned sampsFromUsbToAudio[], unsigned sampsFromAudi
|
||||
#endif
|
||||
}
|
||||
#if EQ_EN
|
||||
if (!is_eq_disabled()) {
|
||||
buffer_exchange(uc_eq_data, sampsFromUsbToAudio);
|
||||
}
|
||||
#endif
|
||||
sampsFromAudioToUsb[0] = sampsFromUsbToAudio[0];
|
||||
sampsFromAudioToUsb[1] = sampsFromUsbToAudio[1];
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include "debug_print.h"
|
||||
#include "eq_flash_storage.h"
|
||||
|
||||
#if 0
|
||||
#if 0
|
||||
#define DPRINTF(...) printf(__VA_ARGS__)
|
||||
#else
|
||||
#define DPRINTF(...)
|
||||
@@ -27,7 +27,6 @@
|
||||
int eq_flash_initialized = 0;
|
||||
extern unsigned int is_mode_changed(void);
|
||||
extern void change_eq_mode(unsigned sample_freq);
|
||||
extern unsigned int g_samfreq;
|
||||
extern void clear_eq_status(unsigned sample_freq, unsigned ch_no);
|
||||
extern unsigned int g_request_eq_mode;
|
||||
extern unsigned int g_eq_enable; // 改动原因:添加EQ使能开关外部声明,用于初始化时检查EQ状态
|
||||
@@ -50,7 +49,7 @@ void dsp_core0(void)
|
||||
unsigned u_in_step;
|
||||
unsigned b_fade_out = 0;
|
||||
unsigned u_out_step;
|
||||
|
||||
|
||||
// EQ Flash存储初始化标志
|
||||
|
||||
delay_milliseconds(100);
|
||||
@@ -62,7 +61,7 @@ void dsp_core0(void)
|
||||
if (eq_flash_initialized == 0) {
|
||||
// 延迟更长时间,确保QSPI Flash完全初始化
|
||||
debug_printf("Initializing EQ Flash storage system\n");
|
||||
|
||||
|
||||
// 初始化EQ Flash存储系统
|
||||
if (eq_flash_init() == 0) {
|
||||
debug_printf("EQ Flash storage initialized successfully\n");
|
||||
@@ -72,7 +71,7 @@ void dsp_core0(void)
|
||||
debug_printf("Loading EQ parameters from Flash using simplified storage\n");
|
||||
// 简化加载逻辑:每个模式只加载一次,会自动应用到所有采样率和通道
|
||||
int loaded_modes = 0;
|
||||
|
||||
|
||||
for (int mode = EQ_USER_MODE_MIN; mode <= EQ_USER_MODE_MAX; mode++) {
|
||||
if (eq_load_all_params_and_calculate_coefficients(44100, mode) == 0) {
|
||||
loaded_modes++;
|
||||
@@ -87,20 +86,20 @@ void dsp_core0(void)
|
||||
// 改动原因:修复EQ开关逻辑问题,确保从Flash加载模式时正确设置g_saved_eq_mode和g_eq_enable
|
||||
// eq_flash_load_current_mode()会同时加载模式并设置g_eq_enable
|
||||
int saved_mode_result = eq_flash_load_current_mode();
|
||||
|
||||
|
||||
// 改动原因:确保g_eq_enable被正确加载,无论模式加载是否成功
|
||||
// eq_flash_load_current_mode()已经设置了g_eq_enable,这里读取确认
|
||||
unsigned int eq_enable = g_eq_enable;
|
||||
|
||||
|
||||
if (saved_mode_result >= 0 && saved_mode_result <= 9) {
|
||||
uint8_t saved_mode = (uint8_t)saved_mode_result;
|
||||
debug_printf("Loaded current EQ mode %d and enable %d from Flash\n", saved_mode, eq_enable);
|
||||
|
||||
|
||||
// 改动原因:将eq_enable独立为全局开关,所有模式共用一个开关
|
||||
// 无论EQ是否启用,都设置到Flash中保存的模式,eq_enable只控制EQ处理开关
|
||||
g_saved_eq_mode = saved_mode;
|
||||
SET_SHARED_GLOBAL(g_request_eq_mode, saved_mode);
|
||||
debug_printf("EQ initialization: Set mode to %d from Flash, EQ enable: %d (global switch, independent of mode)\n",
|
||||
debug_printf("EQ initialization: Set mode to %d from Flash, EQ enable: %d (global switch, independent of mode)\n",
|
||||
saved_mode, eq_enable);
|
||||
} else {
|
||||
// Flash加载失败时,使用默认模式0,EQ默认禁用
|
||||
@@ -110,8 +109,8 @@ void dsp_core0(void)
|
||||
g_eq_enable = 0;
|
||||
eq_enable = 0; // 同步本地变量
|
||||
debug_printf("Failed to load EQ mode from Flash, using default mode 0, EQ disabled (enable: %d)\n", eq_enable);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
debug_printf("Failed to initialize EQ Flash storage system, continuing without Flash storage\n");
|
||||
// 即使Flash初始化失败,也标记为已初始化,避免重复尝试
|
||||
@@ -132,7 +131,7 @@ void dsp_core0(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
sample_freq = g_samfreq;
|
||||
sample_freq = 48000;
|
||||
audio_in_samples[0] = read_from_ring_buffer(0);
|
||||
audio_in_samples[1] = read_from_ring_buffer(1);
|
||||
|
||||
@@ -145,7 +144,7 @@ void dsp_core0(void)
|
||||
u_out_step=1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
audio_out_samples[0] = handler_eq_filter(sample_freq, 0, audio_in_samples[0]);
|
||||
audio_out_samples[1] = handler_eq_filter(sample_freq, 1, audio_in_samples[1]);
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#include "share_buffer.h"
|
||||
#define RING_BUFFER_SIZE 128
|
||||
#define RING_BUFFER_SIZE 512
|
||||
|
||||
typedef struct {
|
||||
int buffer[RING_BUFFER_SIZE];
|
||||
|
||||
Reference in New Issue
Block a user