1.修复SYNC 偏移可能超出范围的bug

This commit is contained in:
HUOHUO 2025-04-06 07:30:15 -07:00
parent 9a1c13edda
commit 02ccf4995a
2 changed files with 24 additions and 19 deletions

View File

@ -68,7 +68,7 @@ void Receiver_Symb_Proc(
return ;
// //计算结果搬移到外存 // //计算结果搬移到外存
// temp_u32 = 1000;//计算byte数 // temp_u32 = 1000;//计算byte数
@ -84,22 +84,22 @@ void Receiver_Symb_Proc(
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 5, time1 -time0); TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 5, time1 -time0);
time0 = time1; time0 = time1;
// ChannelEst_Proc(param_ptr,temp_dm0_ptr,temp_dm1_ptr); ChannelEst_Proc(param_ptr,temp_dm0_ptr,temp_dm1_ptr);
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 4); TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 4);
// time1 = Time_offset(0); time1 = Time_offset(0);
// TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 6, time1 -time0); TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 6, time1 -time0);
// time0 = time1; time0 = time1;
// ChannelEqu_Proc(param_ptr, temp_dm0_ptr, temp_dm1_ptr, temp_dm2_ptr, temp_dm3_ptr); ChannelEqu_Proc(param_ptr, temp_dm0_ptr, temp_dm1_ptr, temp_dm2_ptr, temp_dm3_ptr);
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 5); TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 5);
// time1 = Time_offset(0); time1 = Time_offset(0);
// TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 7, time1 -time0); TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 7, time1 -time0);
// time0 = time1; time0 = time1;
// Transform_Proc(param_ptr, temp_dm0_ptr, temp_dm1_ptr, temp_dm2_ptr, temp_dm3_ptr); Transform_Proc(param_ptr, temp_dm0_ptr, temp_dm1_ptr, temp_dm2_ptr, temp_dm3_ptr);
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 6); TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 6);
// time1 = Time_offset(0); time1 = Time_offset(0);
// TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 8, time1 -time0); TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 8, time1 -time0);
time0 = time1; time0 = time1;
#ifdef IDE_TEST #ifdef IDE_TEST

View File

@ -259,7 +259,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
dbg_time0 = Time_offset(2); dbg_time0 = Time_offset(2);
//搬移1055sample数据供定时同步,奇数slot处理偶buffer数据反之 //搬移1055sample数据供定时同步,奇数slot处理偶buffer数据反之
#ifndef RECV_DBG_DATA_TEST
if( 1 == (slot & 0x01) ) if( 1 == (slot & 0x01) )
{ {
src_addr0 = (uint32_t)JESD_NRFDD_RX_SLOT_EVEN_DATA_ADDR; src_addr0 = (uint32_t)JESD_NRFDD_RX_SLOT_EVEN_DATA_ADDR;
@ -270,6 +270,10 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
src_addr0 = (uint32_t)JESD_NRFDD_RX_SLOT_ODD_DATA_ADDR; src_addr0 = (uint32_t)JESD_NRFDD_RX_SLOT_ODD_DATA_ADDR;
src_addr1 = (uint32_t)JESD_NRFDD_RX_SLOT_EVEN_DATA_ADDR; src_addr1 = (uint32_t)JESD_NRFDD_RX_SLOT_EVEN_DATA_ADDR;
} }
#else
src_addr0 = (uint32_t)JESD_NRFDD_RX_SLOT_EVEN_DATA_ADDR;
src_addr1 = (uint32_t)JESD_NRFDD_RX_SLOT_ODD_DATA_ADDR;
#endif
ape_csu_task_lookup(DMA_TAG_G2L, 1); ape_csu_task_lookup(DMA_TAG_G2L, 1);
//取数方式同步点为中心前16后15相关长度1024 //取数方式同步点为中心前16后15相关长度1024
@ -385,8 +389,8 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 5); TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 5);
uint32_t maxWindowSum = receiver_sync_temp_dm3_ptr[1]; uint32_t maxWindowSum = receiver_sync_temp_dm3_ptr[1];
//更新最佳位置 //更新最佳位置
uint32_t bestPosition =receiver_sync_temp_dm3_ptr[0]-16 + frame_head_offset; int32_t bestPosition =receiver_sync_temp_dm3_ptr[0]-16 + frame_head_offset;
LOG_ERROR_S("%d %d\n", receiver_sync_temp_dm3_ptr[0], receiver_sync_temp_dm3_ptr[1]); LOG_ERROR_S("%d %d %d\n", receiver_sync_temp_dm3_ptr[0], receiver_sync_temp_dm3_ptr[1], bestPosition);
//更新sync2symb的buffer状态记录 //更新sync2symb的buffer状态记录
STORE_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_len, LOAD_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_len) + 61440); STORE_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_len, LOAD_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_len) + 61440);
STORE_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_offset , 61440 * buffer_sel2); STORE_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_offset , 61440 * buffer_sel2);
@ -431,6 +435,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
//为了适配SYMB接口如果数据是两段搬移成一块 //为了适配SYMB接口如果数据是两段搬移成一块
if(2 == data_send2symb_task[task_idx].num_data_section) if(2 == data_send2symb_task[task_idx].num_data_section)
{ {
ape_csu_task_lookup(DMA_TAG_G2G,1);
ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(data_send2symb_task[task_idx].data_section1_ptr), ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(data_send2symb_task[task_idx].data_section1_ptr),
(uint64_t)(data_send2symb_task[task_idx].data_section0_ptr + data_send2symb_task[task_idx].data_section0_length), (uint64_t)(data_send2symb_task[task_idx].data_section0_ptr + data_send2symb_task[task_idx].data_section0_length),
(data_send2symb_task[task_idx].data_section1_length)<<2, (data_send2symb_task[task_idx].data_section1_length)<<2,
@ -462,7 +467,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
uint32_t threshold = 1; uint32_t threshold = 1;
if(threshold) if(threshold)
{ {
STORE_EX_W(&g_receiver_sync_status_SM_ptr->frame_head_offset , bestPosition % 61440); STORE_EX_W(&g_receiver_sync_status_SM_ptr->frame_head_offset , (bestPosition+61440) % 61440);
//LOG_INFO_S("rec sync track offset: %d\n", bestPosition % 61440); //LOG_INFO_S("rec sync track offset: %d\n", bestPosition % 61440);
ret = SYNC_OK; ret = SYNC_OK;
} }