V124 1.修正功率配置过程,避免升功率或降功率时配置瞬间可能超出目标功率值的问题;2.修正上一版本配置功率时按下确认键,导致瞬间功率下降问题;3.调整LCD配置功率上限为衰减器最大上限;4.修正RS485通讯问题;
This commit is contained in:
+95
-2
@@ -79,8 +79,33 @@ void uart_debug(uint8 *pbuf,uint32 len)
|
||||
#define HMC472_STEPS_MAX 63
|
||||
#define ADRV9009_ATT_BASE 8000
|
||||
|
||||
static int32 g_last_total_mdb = -1;
|
||||
static uint16 g_last_adrv9009_att = 0xFFFF;
|
||||
static volatile uint8 g_adrv9009_ready = 0;
|
||||
|
||||
/*
|
||||
* Validate a stored power command only after the current channel's WE power
|
||||
* has been loaded. A raw attenuation of zero is a valid physical maximum;
|
||||
* only a negative raw attenuation proves that the stored db value is beyond
|
||||
* the range represented by the new HMC472 + ADRV9009 power model.
|
||||
*/
|
||||
static uint8 normalize_new_power_rf_db(S_WE_PARA *pwe, S_RF_PARA *prf)
|
||||
{
|
||||
int32 raw_total_mdb;
|
||||
|
||||
raw_total_mdb = (int32)RAW_MAX_OUTPUT_MDB
|
||||
- ((int32)prf->db + (int32)pwe->power - (int32)REF_POWER_UNITS)
|
||||
* (int32)PWR_UNIT_TO_MDB;
|
||||
|
||||
if(raw_total_mdb >= 0)
|
||||
return 0;
|
||||
|
||||
printf("new power cfg reset invalid rf db: we=%d power=%d db=%d raw_total_mdb=%d\n",
|
||||
pwe->power, prf->power, prf->db, raw_total_mdb);
|
||||
prf->db = DEFAULT_RF_POWER_DB;
|
||||
prf->power = RF_POWER_ZERO;
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if USE_NEW_POWER_CFG
|
||||
@@ -111,6 +136,8 @@ static void fpga_restore_rf_att(S_RF_PARA *prf)
|
||||
|
||||
static void fpga_set_rf_output_with_para(uint8 rf, S_RF_PARA *prf)
|
||||
{
|
||||
uint8 current_rf;
|
||||
|
||||
rf = rf ? 1 : 0;
|
||||
|
||||
#if USE_DELAYED_RF_ENABLE
|
||||
@@ -121,6 +148,19 @@ static void fpga_set_rf_output_with_para(uint8 rf, S_RF_PARA *prf)
|
||||
}
|
||||
#endif
|
||||
|
||||
current_rf = fpga_byte_read(0x01, 0x26) & 0x01;
|
||||
if(rf && current_rf)
|
||||
{
|
||||
/*
|
||||
* RF is already exposed at the connector. Re-running the complete
|
||||
* enable sequence would first force HMC472 to 31.5 dB and create a
|
||||
* visible output-power dip before restoring the requested setting.
|
||||
* Keep the path enabled and only refresh its attenuation instead.
|
||||
*/
|
||||
fpga_restore_rf_att(prf);
|
||||
return;
|
||||
}
|
||||
|
||||
cfg_fpga_agc_att(RF_OFF_AGC_ATT);
|
||||
|
||||
if(rf)
|
||||
@@ -1003,14 +1043,45 @@ void fpga_save_wd(S_WD_PARA *ppara)
|
||||
|
||||
}
|
||||
|
||||
uint16 fpga_limit_power_target(S_WE_PARA *pwe, S_RF_PARA *prf, uint16 target_power)
|
||||
{
|
||||
#if USE_NEW_POWER_CFG
|
||||
int32 total_mdb;
|
||||
uint32 power_up_steps;
|
||||
|
||||
if(target_power <= prf->power)
|
||||
return target_power;
|
||||
|
||||
total_mdb = (int32)RAW_MAX_OUTPUT_MDB
|
||||
- ((int32)prf->db + (int32)pwe->power - (int32)REF_POWER_UNITS)
|
||||
* (int32)PWR_UNIT_TO_MDB;
|
||||
|
||||
if(total_mdb <= 0)
|
||||
return prf->power;
|
||||
|
||||
power_up_steps = (uint32)total_mdb / PWR_UNIT_TO_MDB;
|
||||
if((uint32)(target_power - prf->power) > power_up_steps)
|
||||
target_power = (uint16)(prf->power + power_up_steps);
|
||||
#else
|
||||
(void)pwe;
|
||||
(void)prf;
|
||||
#endif
|
||||
|
||||
return target_power;
|
||||
}
|
||||
|
||||
void fpga_save_power(S_WE_PARA *pwe,S_RF_PARA *prf)
|
||||
{
|
||||
#if USE_NEW_POWER_CFG
|
||||
int32 total_mdb = 0;
|
||||
uint32 hmc_extra = 0;
|
||||
uint8 agc_att_val = 0;
|
||||
uint8 adrv9009_first = 0;
|
||||
uint16 adrv9009_att_val = 0;
|
||||
|
||||
if(normalize_new_power_rf_db(pwe, prf))
|
||||
e2rom_save_power(prf);
|
||||
|
||||
total_mdb = (int32)RAW_MAX_OUTPUT_MDB
|
||||
- ((int32)prf->db + (int32)pwe->power - (int32)REF_POWER_UNITS)
|
||||
* (int32)PWR_UNIT_TO_MDB;
|
||||
@@ -1040,14 +1111,35 @@ void fpga_save_power(S_WE_PARA *pwe,S_RF_PARA *prf)
|
||||
agc_att_val = RF_OFF_AGC_ATT;
|
||||
}
|
||||
|
||||
/*
|
||||
* Use one safe ordering rule for every adjustment, including large
|
||||
* changes and HMC472 crossover steps:
|
||||
* output power rising (total attenuation falling): ADRV9009 first;
|
||||
* output power falling (total attenuation rising): HMC472 first.
|
||||
* This keeps every intermediate state at or below the requested/previous
|
||||
* output level. Unknown direction (initialization) uses HMC472 first.
|
||||
*/
|
||||
if(g_adrv9009_ready &&
|
||||
(g_last_total_mdb >= 0) &&
|
||||
(g_last_adrv9009_att != 0xFFFF) &&
|
||||
(total_mdb < g_last_total_mdb) &&
|
||||
(adrv9009_att_val != g_last_adrv9009_att))
|
||||
{
|
||||
cfg_adrv_att(adrv9009_att_val);
|
||||
g_last_adrv9009_att = adrv9009_att_val;
|
||||
adrv9009_first = 1;
|
||||
}
|
||||
|
||||
cfg_fpga_agc_att(agc_att_val);
|
||||
|
||||
if(g_adrv9009_ready && (adrv9009_att_val != g_last_adrv9009_att))
|
||||
if(!adrv9009_first && g_adrv9009_ready && (adrv9009_att_val != g_last_adrv9009_att))
|
||||
{
|
||||
cfg_adrv_att(adrv9009_att_val);
|
||||
g_last_adrv9009_att = adrv9009_att_val;
|
||||
}
|
||||
|
||||
g_last_total_mdb = total_mdb;
|
||||
|
||||
printf("[power] we=%3d db=%3d total_mdb=%5d | agc_att=%d adrv_att=%d\n",
|
||||
pwe->power, prf->db, total_mdb, agc_att_val, adrv9009_att_val);
|
||||
|
||||
@@ -1355,7 +1447,7 @@ void fpga_save_all_para(BOOL flag)
|
||||
|
||||
enter_menu(1);
|
||||
|
||||
/* oneshu@20220404
|
||||
/*
|
||||
当系统守护进程启动的时候 g_restart_app_flg 为1, 不会重新配置38j82. 然后恢复g_restart_app_flg=0.
|
||||
若 LCD/网页/串口/udp/tcp 协议,再进此函数 会保证能执行38j82 */
|
||||
log_printf(LOG_DEBUG,I_NOUSED,"g_restart_app_flg=%d\n", g_restart_app_flg);
|
||||
@@ -1376,6 +1468,7 @@ void fpga_save_all_para(BOOL flag)
|
||||
cfg_adrv_orx_manu_gain(atsc_para.system_para.orx_manu_gain);
|
||||
#if USE_NEW_POWER_CFG
|
||||
g_adrv9009_ready = 1;
|
||||
g_last_total_mdb = -1;
|
||||
g_last_adrv9009_att = 0xFFFF;
|
||||
fpga_save_power(&atsc_para.we_para, &atsc_para.rf_para);
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user