1.修改sync to symb数据接口 2.修改symb 外存地址为SM,新增symb各个部分耗时

This commit is contained in:
HUOHUO 2025-04-06 07:01:59 -07:00
parent 0ea3c06767
commit 9a1c13edda
13 changed files with 189 additions and 120 deletions

View File

@ -27,6 +27,9 @@
"typedef.h": "c",
"receiver_bit_func.h": "c",
"drv_ape.h": "c",
"transmitter_func.h": "c"
"transmitter_func.h": "c",
"freoffestimpl.h": "c",
"freoffcompimpl.h": "c",
"freoffcomp.h": "c"
}
}

View File

@ -475,7 +475,7 @@ void test_speed_recv_msg_pcie()
void pcie_test_task_func(void)
{
// return ;
return ;
g_time_start[1] = TIME_NS();
RUN_CNT(TRACE_PCIE_ADDR, 0);
//uint32_t clockTick = 0;

View File

@ -1,5 +1,5 @@
#ifndef FREOFFCOMP_H_
#define FREOFFCOMP_H_
#ifndef FREOFFCOMPIMPL_H_
#define FREOFFCOMPIMPL_H_
#include "ucps2.h"
#include "ucpm2.h"
#include "ape_common.h"
@ -7,6 +7,6 @@
MPU_ENTRY void freOffCompAsm(v16u32 src);
void freOffCompImpl(v16u32 * SVRReg, int* ConfigAddr_comp, int* ConfigAddr_cordic, int *freEstOutAddr,int* data_ptr_ddr,int* res_ptr_ddr, int *ava_ptr_dm2, int *ava_ptr_dm3);
void freOffCompImpl(int* ConfigAddr_comp, int* ConfigAddr_cordic, int *freEstOutAddr,int* data_ptr_ddr,int* res_ptr_ddr, int *ava_ptr_dm2, int *ava_ptr_dm3);
#endif /* FREQOFFSETEST_H_ */

View File

@ -5,7 +5,7 @@
MPU_ENTRY void freOffEstAsm(v16u32 src);
void freOffEstImpl(v16u32 * SVRReg, int* ConfigBaseAddr_est,int *InputAddr0,int *InputAddr1, int *freEstOutAddr);
void freOffEstImpl(int* ConfigBaseAddr_est,int *InputAddr0,int *InputAddr1, int *freEstOutAddr);
#endif

View File

@ -22,6 +22,8 @@
#include "osp_ape.h"
#include "task_define.h"
#include "trace.h"
#include "freOffEstImpl.h"
#include "freOffCompImpl.h"
//include mpu header files
@ -38,7 +40,7 @@ extern int32_t storedfreoffestvalue ;
void Receiver_Symb_Init();
void Receiver_Symb_Task(receiver_sync2symb_t* msg_ptr, uint32_t msg_len);
void Receiver_Symb_Proc(
uint32_t* param_ptr,
receiver_sync2symb_t* param_ptr,
int32_t* temp_dm0_ptr,
int32_t* temp_dm1_ptr,
int32_t* temp_dm2_ptr,

View File

@ -9,7 +9,7 @@
*****************************************************************/
#ifndef RECEIVER_SYMB_MACRO_H
#define RECEIVER_SYMB_MACRO_H
#include "mem_def.h"
//GENERATE with Generate_RECEIVER_SYMB_symb_macro_h.m
//DO NOT MODIFY
//=======================================================================
@ -45,10 +45,6 @@
//=======================================================================
#define COMPENSATED_DATA_DDR_PTR (RECEIVER_SYMB_OUT)
#define CHANNELEST_DATA_DDR_PTR (RECEIVER_SYMB_OUT + 0x3c000)
#define CHANNELEQU_DATA_DDR_PTR (RECEIVER_SYMB_OUT + 0x3c000 + 0x8000) //equ output
#define TRANSFORMER_DATA_DDR_PTR (RECEIVER_SYMB_OUT)
//SPU查找表各字段长度定义,单位为word(4Byte)

View File

@ -1,55 +1,76 @@
#include "ucps2.h"
#include "ucpm2.h"
#include <freOffComp.h>
#include <freOffCompImpl.h>
#include <cordicSC.h>
#include "freOffComp.h"
#include "freOffCompImpl.h"
#include "cordicSC.h"
#include "ape_common.h"
#include "common.h"
#include "trace.h"
//v16u32 KI = {2,4,6};
void freOffCompImpl(v16u32 * SVRReg, int* ConfigAddr_comp, int* ConfigAddr_cordic, int *freEstOutAddr,int* data_ptr_ddr,int* res_ptr_ddr, int *ava_ptr_dm2, int *ava_ptr_dm3){
void freOffCompImpl(int* ConfigAddr_comp, int* ConfigAddr_cordic, int *freEstOutAddr,int* data_ptr_ddr,int* res_ptr_ddr, int *ava_ptr_dm2, int *ava_ptr_dm3){
volatile int a = 1;
int count = 7680;
freEstOutAddr[0] = freEstOutAddr[0]>>10;
int increment = freEstOutAddr[0];
uint32_t time0, time1;
for(int i=0;i<8;i++){
for(int i=0;i<1;i++)
{
int res_ptr_offset = i*count;
int *input_data_ptr = ava_ptr_dm3;
int *fre_comp_exp_ptr = ava_ptr_dm2;
int *output_data_ptr = ava_ptr_dm3;
time0 = Time_offset(0);
int time_data_length = count;
ape_csu_task_lookup(DMA_TAG_G2L, 1);
ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)data_ptr_ddr,
(uint64_t)DM_TO_CSU_ADDR(input_data_ptr),
time_data_length*4,
DMA_TAG_G2L,
0);
1);
time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 9, time1-time0);
time0 =time1;
cordicSC(ConfigAddr_cordic,MPU_ADDR(freEstOutAddr),MPU_ADDR(fre_comp_exp_ptr),increment,count);
SVRReg[0][0] = MPU_ADDR(ConfigAddr_cordic);
cordicSCAsm(*SVRReg);
a = __ucps2_getStatB();
__ucps2_delay();
WAIT_MPU_STOP;
SVRReg[0] = MPU_ADDR(ConfigAddr_cordic);
cordicSCAsm(SVRReg);
WAIT_MPU_STOP;
time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 10, time1-time0);
time0 =time1;
freOffComp(ConfigAddr_comp,MPU_ADDR(input_data_ptr),MPU_ADDR(fre_comp_exp_ptr),MPU_ADDR(output_data_ptr));
SVRReg[0][0] = MPU_ADDR(ConfigAddr_comp);
freOffCompAsm(*SVRReg);
a = __ucps2_getStatB();
__ucps2_delay();
ape_csu_task_lookup(DMA_TAG_G2L, 1);
WAIT_MPU_STOP;
SVRReg[0] = MPU_ADDR(ConfigAddr_comp);
freOffCompAsm(SVRReg);
WAIT_MPU_STOP;
time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 11, time1-time0);
time0 =time1;
ape_csu_dma_1D_L2G_ch0ch1_transfer((uint64_t)DM_TO_CSU_ADDR((uint32_t)output_data_ptr),
(uint64_t)(res_ptr_ddr + res_ptr_offset),
time_data_length*4 ,
DMA_TAG_L2G,
1);
}
time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 12, time1-time0);
time0 =time1;
}
return ;

View File

@ -1,24 +1,24 @@
#include "ucps2.h"
#include "ucpm2.h"
#include<freOffEst.h>
#include<freOffEstImpl.h>
#include "freOffEst.h"
#include "freOffEstImpl.h"
#include "ape_common.h"
#include "common.h"
v16u32 KI = {2,4,6};
void freOffEstImpl(v16u32 * SVRReg,int* ConfigBaseAddr_est, int *InputAddr0,int *InputAddr1,int *freEstOutAddr){
void freOffEstImpl(int* ConfigBaseAddr_est, int *InputAddr0,int *InputAddr1,int *freEstOutAddr){
volatile int a = 1;
freOffEst(ConfigBaseAddr_est, MPU_ADDR(InputAddr0), MPU_ADDR(InputAddr1), MPU_ADDR(freEstOutAddr));
SVRReg[0][0] = MPU_ADDR(ConfigBaseAddr_est);
freOffEstAsm(*SVRReg);
a = __ucps2_getStatB();
__ucps2_delay();
WAIT_MPU_STOP;
ape_csu_task_lookup(DMA_TAG_G2L, 1);
SVRReg[0] = MPU_ADDR(ConfigBaseAddr_est);
freOffEstAsm(SVRReg);
return ;

View File

@ -1,5 +1,6 @@
#include "receiver_symb_func.h"
#include "ape_common.h"
void FreOff_Proc(
@ -16,6 +17,7 @@ void FreOff_Proc(
uint32_t time_data_length;
uint32_t time_data_dm3_ptr = ((((uint32_t)&temp_dm3_ptr[0] + 4095)>>12)<<12);
uint32_t res_ptr = RECEIVER_SYMB_OUT;
uint32_t time0, time1;
// Read Global Buff
time_data_ddr_ptr = (uint32_t)*param_ptr;
@ -36,14 +38,12 @@ void FreOff_Proc(
uint32_t *InputCPAddr = (uint32_t *)time_data_dm3_ptr;
uint32_t *InputPilotAddr = InputCPAddr + 1024;
v16u32 * SVRReg = (v16u32 *)temp_dm1_ptr;
uint32_t *freEstOutAddr = (uint32_t *)(temp_dm1_ptr + 0x0020);
SVRReg[0] = (v16u32){0, 0, 0, 0,
0x40, 0, 0, 0,
0xff00ff, 0, 0, 0x0000,
0xffff, 0x6, 0, 0};
freOffEstImpl(SVRReg,ConfigAddr_est, InputCPAddr, InputPilotAddr, freEstOutAddr);
time0 = Time_offset(0);
freOffEstImpl(ConfigAddr_est, InputCPAddr, InputPilotAddr, freEstOutAddr);
time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 9, time1-time0);
time0 = time1;
// Low-pass Filter
if(storedfreoffestvalue > 600000){
storedfreoffestvalue = freEstOutAddr[0];
@ -57,7 +57,6 @@ void FreOff_Proc(
uint32_t *available_ptr_dm2 = temp_dm2_ptr;
uint32_t *available_ptr_dm3 = temp_dm3_ptr;
freOffCompImpl(
SVRReg,
ConfigAddr_comp,
ConfigAddr_cordic,
freEstOutAddr,
@ -66,31 +65,12 @@ void FreOff_Proc(
available_ptr_dm2,
available_ptr_dm3
);
time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 10, time1-time0);
}
// //计算结果搬移到SM
//

View File

@ -16,7 +16,7 @@
* @Date: 20241030
*/
void Receiver_Symb_Proc(
uint32_t *param_ptr,
receiver_sync2symb_t *param_ptr,
int32_t *temp_dm0_ptr,
int32_t *temp_dm1_ptr,
int32_t *temp_dm2_ptr,
@ -32,17 +32,39 @@ void Receiver_Symb_Proc(
uint32_t mpu_temp_dm3_ptr;
uint32_t temp_u32;
uint32_t time_data_dm0_ptr = ((((uint32_t)&temp_dm0_ptr[0] + 4095)>>12)<<12);
uint32_t res_ptr = RECEIVER_OUT2;
uint32_t time0, time1;
//data读入
//获取源数据地址
receiver_sync2symb_t* para_dm_ptr = (receiver_sync2symb_t*)param_ptr;
receiver_sync2symb_t* para_dm_ptr = param_ptr;
uint32_t cur_sfn = get_rx_nr_sfn();
uint32_t cur_slot = get_rx_nr_slot();
uint32_t cur_time = TIME_NS();
// LOG_ERROR_S("%d %d %d %d %d %d %d 0x%08x 0x%08x %d %d\n", cur_sfn, cur_slot, cur_time, para_dm_ptr->sfn, para_dm_ptr->slot, para_dm_ptr->num_data_section,
// para_dm_ptr->proc_id, para_dm_ptr->data_section0_ptr, para_dm_ptr->data_section1_ptr, para_dm_ptr->data_section0_length, para_dm_ptr->data_section1_length);
LOG_ERROR_S("%d %d %d %d %d %d %d 0x%08x 0x%08x %d %d\n", cur_sfn, cur_slot, cur_time, para_dm_ptr->sfn, para_dm_ptr->slot, para_dm_ptr->num_data_section,
para_dm_ptr->proc_id, para_dm_ptr->data_section0_ptr, para_dm_ptr->data_section1_ptr, para_dm_ptr->data_section0_length, para_dm_ptr->data_section1_length);
// if(1 == para_dm_ptr->num_data_section)
// {
// ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(para_dm_ptr->data_section0_ptr),
// (uint64_t)DM_TO_CSU_ADDR(temp_dm0_ptr),
// (para_dm_ptr->data_section0_length)<<2,
// DMA_TAG_G2L,
// 1);
// }
// else
// {
// ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(para_dm_ptr->data_section0_ptr),
// (uint64_t)DM_TO_CSU_ADDR(temp_dm0_ptr),
// (para_dm_ptr->data_section0_length)<<2,
// DMA_TAG_G2L,
// 0);
// ape_csu_dma_1D_G2L_ch2ch3_transfer((uint64_t)(para_dm_ptr->data_section1_ptr),
// (uint64_t)DM_TO_CSU_ADDR(temp_dm0_ptr + (para_dm_ptr->data_section0_length)),
// (para_dm_ptr->data_section1_length)<<2,
// DMA_TAG_G2L,
// 1);
// }
@ -52,22 +74,39 @@ void Receiver_Symb_Proc(
// temp_u32 = 1000;//计算byte数
// WAIT_MPU_STOP;
// ape_csu_task_lookup(DMA_TAG_G2L, 1);
// ape_csu_dma_1D_L2G_ch0ch1_transfer((uint64_t)DM_TO_CSU_ADDR(time_data_dm0_ptr),
// (uint64_t)res_ptr,
// temp_u32,
// DMA_TAG_L2G,
// 1);
FreOff_Proc(param_ptr, temp_dm0_ptr, temp_dm1_ptr, temp_dm2_ptr, temp_dm3_ptr);
ChannelEst_Proc(param_ptr,temp_dm0_ptr,temp_dm1_ptr);
ChannelEqu_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, 2);
time0 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 4, time0);
FreOff_Proc((uint32_t*)para_dm_ptr->data_section0_ptr, temp_dm0_ptr, temp_dm1_ptr, temp_dm2_ptr, temp_dm3_ptr);
TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 3);
time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 5, time1 -time0);
time0 = time1;
// ChannelEst_Proc(param_ptr,temp_dm0_ptr,temp_dm1_ptr);
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 4);
// time1 = Time_offset(0);
// TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 6, time1 -time0);
// time0 = time1;
// ChannelEqu_Proc(param_ptr, temp_dm0_ptr, temp_dm1_ptr, temp_dm2_ptr, temp_dm3_ptr);
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 5);
// time1 = Time_offset(0);
// TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 7, time1 -time0);
// time0 = time1;
// Transform_Proc(param_ptr, temp_dm0_ptr, temp_dm1_ptr, temp_dm2_ptr, temp_dm3_ptr);
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 6);
// time1 = Time_offset(0);
// TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 8, time1 -time0);
time0 = time1;
#ifdef IDE_TEST
printf("DataTrans");
#endif
return ;
//7.核间消息to APE2
//需要定义结构体
receiver_symb2bit_t data_send2bit_task;

View File

@ -43,7 +43,7 @@ void Receiver_Symb_Task(receiver_sync2symb_t* msg_ptr, uint32_t msg_len)
dmalloc_trim(0, APE_DM3);
//1. DM0空间申请
receiver_symb_malloc_dm0_ptr = dmemalign_unit(0x4000, 131072, APE_DM0); //申请了128KiB 首地址16k对齐
receiver_symb_malloc_dm0_ptr = dmemalign_unit(0x4000, 204800, APE_DM0); //申请了128KiB 首地址16k对齐
if (NULLPTR == receiver_symb_malloc_dm0_ptr)
{
LOG_ERROR_S("rec sync DM0 fail\n");
@ -156,7 +156,7 @@ void Receiver_Symb_Task(receiver_sync2symb_t* msg_ptr, uint32_t msg_len)
//6. 计算流程
Receiver_Symb_Proc(
(uint32_t*)receiver_symb_param_ptr,
(receiver_sync2symb_t*)receiver_symb_param_ptr,
receiver_symb_temp_dm0_ptr,
receiver_symb_temp_dm1_ptr,
receiver_symb_temp_dm2_ptr,
@ -177,5 +177,12 @@ void Receiver_Symb_Task(receiver_sync2symb_t* msg_ptr, uint32_t msg_len)
RUN_CNT(TRACE_RECEIVER_SYMB_ADDR, 1);
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 2, Time_offset(0));
// __ucps2_synch(0);
// __ucps2_synch(0);
// __ucps2_synch(0);
// __ucps2_synch(0);
// __ucps2_synch(0);
// __ucps2_dbgbreak();
return;
}

View File

@ -234,8 +234,6 @@ void Receiver_Sync_Proc(
//用于跟踪同步
void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
{
//DBG
return ;
g_time_start[2] = TIME_NS();
uint16_t dbg_time0, dbg_time1;
RUN_CNT(TRACE_RECEIVER_SYNC_FINE_ADDR, 0);
@ -245,7 +243,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
uint32_t time0 = g_time_start;
volatile uint32_t time1 = time0;
uint32_t task_idx = 0;
uint32_t frame_head_offset;
volatile uint32_t frame_head_offset;
uint32_t src_addr0;
uint32_t src_addr1;
@ -259,7 +257,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
Receiver_Sync_Memory_Alloc();
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 2);
dbg_time0 = Time_offset(0);
dbg_time0 = Time_offset(2);
//搬移1055sample数据供定时同步,奇数slot处理偶buffer数据反之
if( 1 == (slot & 0x01) )
@ -280,16 +278,17 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
if(16 > frame_head_offset)
{
//上个buffer尾
memcpy_ext(receiver_sync_temp_dm0_ptr, src_addr1 + ((61440 - (16 - frame_head_offset) ) <<2), (16 - frame_head_offset)<<2 );
//当前buffer头
ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(src_addr0),
(uint64_t)DM_TO_CSU_ADDR(receiver_sync_temp_dm0_ptr + (16 - frame_head_offset) ),
(1055 - (16 - frame_head_offset) )<<2,
DMA_TAG_G2L,
0);
//上个buffer尾
memcpy_ext(receiver_sync_temp_dm0_ptr, src_addr1 + ((61440 - (16 - frame_head_offset) ) <<2), (16 - frame_head_offset)<<2 );
LOG_ERROR_S("csu1:%d %d\n", (16 - frame_head_offset)<<2 , (1055 - (16 - frame_head_offset) )<<2 );
// LOG_ERROR_S("csu1:%d %d\n", (16 - frame_head_offset)<<2 , (1055 - (16 - frame_head_offset) )<<2 );
}
else if(61440 - (15 + 1024) < frame_head_offset)
{
@ -300,9 +299,9 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
DMA_TAG_G2L,
0);
//下个buffer头 等待保证数据被jesd_csu存入
while(time1 - time0 < 10)
while(time1 - time0 < 10000)
{
time1 = TIME_NS();
time1 = Time_offset(2);
}
ape_csu_dma_1D_G2L_ch2ch3_transfer((uint64_t)(src_addr1),
(uint64_t)DM_TO_CSU_ADDR(receiver_sync_temp_dm0_ptr + (61440 - (frame_head_offset -16) ) ),
@ -310,7 +309,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
DMA_TAG_G2L,
0);
LOG_ERROR_S("csu2:%d %d\n", ((61440 - (frame_head_offset -16)) )<<2 , (1055 - (61440 - (frame_head_offset -16)) )<<2 );
// LOG_ERROR_S("csu2:%d %d\n", ((61440 - (frame_head_offset -16)) )<<2 , (1055 - (61440 - (frame_head_offset -16)) )<<2 );
}
else
{
@ -321,7 +320,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
DMA_TAG_G2L,
0);
LOG_ERROR_S("csu3:0x%08x 0x%08x\n", (src_addr0 + ((frame_head_offset -16) <<2) ) , receiver_sync_temp_dm0_ptr );
// LOG_ERROR_S("csu3:0x%08x 0x%08x\n", (src_addr0 + ((frame_head_offset -16) <<2) ) , receiver_sync_temp_dm0_ptr );
}
//复制数据DM0 -> DM1
@ -331,11 +330,11 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
MPU_ADDR(receiver_sync_temp_dm1_ptr),
(1055) << 2);
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 3);
WAIT_MPU_STOP;
ape_csu_task_lookup(DMA_TAG_G2L, 1);
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 3);
dbg_time1 = Time_offset(0);
dbg_time1 = Time_offset(2);
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 5, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
// LOG_ERROR_S("%d %d %d\n", sfn, slot , dbg_cur_time);
@ -370,7 +369,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
WAIT_MPU_STOP;
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 4);
dbg_time1 = Time_offset(0);
dbg_time1 = Time_offset(2);
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 6, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
SVRReg[0] = MPU_ADDR(cfg_addr);
@ -380,28 +379,29 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
// 得到验证后的同步位置
WAIT_MPU_STOP;
dbg_time1 = Time_offset(0);
dbg_time1 = Time_offset(2);
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 7, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 5);
uint32_t maxWindowSum = receiver_sync_temp_dm3_ptr[1];
//更新最佳位置
uint32_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]);
//更新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_offset , 61440 * buffer_sel2);
if(-1 == LOAD_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_proc_data_offset) ) //初始态,初始化数据处理偏移
volatile cylic_buffer_proc_data_offset = LOAD_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_proc_data_offset);
if(-1 == cylic_buffer_proc_data_offset ) //初始态,初始化数据处理偏移
{
STORE_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_proc_data_offset , 61440 * buffer_sel);
__ucps2_synch(0);
cylic_buffer_proc_data_offset = 61440 * buffer_sel;
}
__ucps2_synch(0);
uint32_t cylic_buffer_data_offset = LOAD_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_offset);
uint32_t cylic_buffer_proc_data_offset = LOAD_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_proc_data_offset);
volatile cylic_buffer_data_offset = 61440 * buffer_sel2;
uint32_t cylic_buffer_data_offset_temp = (cylic_buffer_data_offset >= cylic_buffer_proc_data_offset) ?
cylic_buffer_data_offset :
(cylic_buffer_data_offset + 61440 * RECEIVER_SYNC_SYNC2SYMB_NUM_BUFFER);
@ -428,6 +428,15 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
cylic_buffer_data_len = cylic_buffer_data_offset_temp - offset_temp;
cylic_buffer_proc_data_offset = offset_temp % (61440*4);
//为了适配SYMB接口如果数据是两段搬移成一块
if(2 == data_send2symb_task[task_idx].num_data_section)
{
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),
(data_send2symb_task[task_idx].data_section1_length)<<2,
DMA_TAG_G2G,
1);
}
//发核间消息给SYMB_TASK
phy_et_msg_send((uint32_t)(&data_send2symb_task[task_idx]),
sizeof(receiver_sync2symb_t),
@ -445,7 +454,7 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
STORE_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_data_len , cylic_buffer_data_len);
STORE_EX_W(&g_receiver_sync_status_SM_ptr->cylic_buffer_proc_data_offset, cylic_buffer_proc_data_offset);
dbg_time1 = Time_offset(0);
dbg_time1 = Time_offset(2);
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 8, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;

View File

@ -23,6 +23,13 @@
#define SM4_BASE (0x0A200000)//1.5M
#define SM5_BASE (0x0A380000)//1.5M
//空间规划:
/*
SM0:
SM5:1201/1024KBRECV_SYNC后给RECV_SYMB的数据
SM2:/1536KBTransmitter的输出结果
*/
//len define
//SM0
@ -37,9 +44,7 @@
#define TRACE_GRP_LEN (0x00000200) //128Word
/************************************SM0--1M*************************************************/
#define RECEIVER_SYNC_CFG_BASE (SM0_BASE)
#define RECEIVER_SYMB_CFG_BASE (RECEIVER_SYNC_CFG_BASE + 0x100)
#define RECEIVER_BIT_CFG_BASE (RECEIVER_SYMB_CFG_BASE + 0x100)
#define RECEIVER_BIT_CFG_BASE (SM0_BASE)
/************************************SM1---1M ***********************************************/
#define RECEIVER_SYNC2SYMB_BUFFER0_ADDR (SM1_BASE)
#define RECEIVER_SYNC2SYMB_BUFFER1_ADDR (RECEIVER_SYNC2SYMB_BUFFER0_ADDR + TIME_DATA_SLOT_LEN)
@ -47,20 +52,27 @@
#define RECEIVER_SYNC2SYMB_BUFFER3_ADDR (RECEIVER_SYNC2SYMB_BUFFER2_ADDR + TIME_DATA_SLOT_LEN)
#define RECEIVER_SYNC2SYNC_FIRST_INF_ADDR (RECEIVER_SYNC2SYMB_BUFFER3_ADDR + TIME_DATA_SLOT_LEN) //LEN: sizeof(receiver_sync_status_t)
/************************************SM2--1.5M***********************************************/
#define TRANSMITTER_OUT (SM2_BASE)
#define TRANSMITTER_BASE (TRANSMITTER_OUT) //4k对齐
#define TRANSMITTER_OUT (SM2_BASE) //4k对齐
/************************************SM3--1.5M***********************************************/
#define SM3_PHY_MSG_BUFFER_ADDR (SM3_BASE)
#define SM3_PHY_TASKS_MGR_ADDR (SM3_PHY_MSG_BUFFER_ADDR + SM3_PHY_MSG_BUFFER_LEN)
#define SM3_PHY_MSG_BUFFER_ADDR (SM3_BASE)
#define SM3_PHY_TASKS_MGR_ADDR (SM3_PHY_MSG_BUFFER_ADDR + SM3_PHY_MSG_BUFFER_LEN)
#define RECEIVER_OUT3 (SM3_BASE + 0x4000)
/************************************SM4--1.5M***********************************************/
//TODO:地址规划
#define RECEIVER_OUT1 (SM4_BASE)
#define RECEIVER_OUT2 (SM4_BASE + 0x4000)
#define RECEIVER_OUT3 (SM4_BASE + 0x8000)
#define RECEIVER_SYMB_OUT (RECEIVER_OUT1)
#define RECEIVER_SYMB_OUT (SM4_BASE)
#define COMPENSATED_DATA_DDR_PTR (RECEIVER_SYMB_OUT)
#define CHANNELEST_DATA_DDR_PTR (RECEIVER_SYMB_OUT + 0x3c000)
#define CHANNELEQU_DATA_DDR_PTR (RECEIVER_SYMB_OUT + 0x3c000 + 0x8000) //equ output
#define TRANSFORMER_DATA_DDR_PTR (RECEIVER_SYMB_OUT)
/************************************SM5--1.5M***********************************************/
#define RECEIVER_BASE (SM5_BASE) //4k对齐
#define RECEIVER_SYNC2SYMB_BUFFER0_ADDR (RECEIVER_BASE)
#define RECEIVER_SYNC2SYMB_BUFFER1_ADDR (RECEIVER_SYNC2SYMB_BUFFER0_ADDR + TIME_DATA_SLOT_LEN)
#define RECEIVER_SYNC2SYMB_BUFFER2_ADDR (RECEIVER_SYNC2SYMB_BUFFER1_ADDR + TIME_DATA_SLOT_LEN)
#define RECEIVER_SYNC2SYMB_BUFFER3_ADDR (RECEIVER_SYNC2SYMB_BUFFER2_ADDR + TIME_DATA_SLOT_LEN)
#define RECEIVER_SYNC2SYMB_BUFFER_REV_ADDR (RECEIVER_SYNC2SYMB_BUFFER3_ADDR + TIME_DATA_SLOT_LEN)
#define RECEIVER_SYNC2SYNC_FIRST_INF_ADDR (RECEIVER_SYNC2SYMB_BUFFER_REV_ADDR + TIME_DATA_SLOT_LEN) //LEN: sizeof(receiver_sync_status_t)
/**************************************DDR***************************************************/
#define DDR_PHY_BASE (0x6BC00000) //共579M可用0x6BC00000-0x8FFFFFFF
#define DDR_ERROR_RECORD_CNT_ADDR (0x79FF8000)