diff --git a/.vscode/settings.json b/.vscode/settings.json index c1d6e01..f4660e4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -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" } } \ No newline at end of file diff --git a/APE4/ApeTask/src/Fucp_Ape4_pcie_testcase.s.c b/APE4/ApeTask/src/Fucp_Ape4_pcie_testcase.s.c index af9a59a..eb3f2ce 100644 --- a/APE4/ApeTask/src/Fucp_Ape4_pcie_testcase.s.c +++ b/APE4/ApeTask/src/Fucp_Ape4_pcie_testcase.s.c @@ -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; diff --git a/APELib/Receiver_symb/inc/freOffCompImpl.h b/APELib/Receiver_symb/inc/freOffCompImpl.h index 14b305a..0c9ae18 100644 --- a/APELib/Receiver_symb/inc/freOffCompImpl.h +++ b/APELib/Receiver_symb/inc/freOffCompImpl.h @@ -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_ */ diff --git a/APELib/Receiver_symb/inc/freOffEstImpl.h b/APELib/Receiver_symb/inc/freOffEstImpl.h index db3baf5..245e08a 100644 --- a/APELib/Receiver_symb/inc/freOffEstImpl.h +++ b/APELib/Receiver_symb/inc/freOffEstImpl.h @@ -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 diff --git a/APELib/Receiver_symb/inc/receiver_symb_func.h b/APELib/Receiver_symb/inc/receiver_symb_func.h index 4a18d45..949cec2 100644 --- a/APELib/Receiver_symb/inc/receiver_symb_func.h +++ b/APELib/Receiver_symb/inc/receiver_symb_func.h @@ -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, diff --git a/APELib/Receiver_symb/inc/receiver_symb_macro.h b/APELib/Receiver_symb/inc/receiver_symb_macro.h index ec886a5..c4a0be7 100644 --- a/APELib/Receiver_symb/inc/receiver_symb_macro.h +++ b/APELib/Receiver_symb/inc/receiver_symb_macro.h @@ -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) diff --git a/APELib/Receiver_symb/src/freOffCompImpl.s.c b/APELib/Receiver_symb/src/freOffCompImpl.s.c index 17c2402..b1766c5 100644 --- a/APELib/Receiver_symb/src/freOffCompImpl.s.c +++ b/APELib/Receiver_symb/src/freOffCompImpl.s.c @@ -1,55 +1,76 @@ #include "ucps2.h" #include "ucpm2.h" -#include -#include -#include +#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 ; diff --git a/APELib/Receiver_symb/src/freOffEstImpl.s.c b/APELib/Receiver_symb/src/freOffEstImpl.s.c index 63638ed..19398f4 100644 --- a/APELib/Receiver_symb/src/freOffEstImpl.s.c +++ b/APELib/Receiver_symb/src/freOffEstImpl.s.c @@ -1,24 +1,24 @@ #include "ucps2.h" #include "ucpm2.h" -#include -#include +#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 ; diff --git a/APELib/Receiver_symb/src/freoff_Proc.s.c b/APELib/Receiver_symb/src/freoff_Proc.s.c index 2500afb..87754c7 100644 --- a/APELib/Receiver_symb/src/freoff_Proc.s.c +++ b/APELib/Receiver_symb/src/freoff_Proc.s.c @@ -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 // diff --git a/APELib/Receiver_symb/src/receiver_Symb_Proc.s.c b/APELib/Receiver_symb/src/receiver_Symb_Proc.s.c index 65ef249..14356c0 100644 --- a/APELib/Receiver_symb/src/receiver_Symb_Proc.s.c +++ b/APELib/Receiver_symb/src/receiver_Symb_Proc.s.c @@ -16,7 +16,7 @@ * @Date: 2024年10月30日 */ 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; diff --git a/APELib/Receiver_symb/src/receiver_Symb_Task.s.c b/APELib/Receiver_symb/src/receiver_Symb_Task.s.c index 776793d..82bae1e 100644 --- a/APELib/Receiver_symb/src/receiver_Symb_Task.s.c +++ b/APELib/Receiver_symb/src/receiver_Symb_Task.s.c @@ -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; } diff --git a/APELib/Receiver_sync/src/receiver_Sync_Proc.s.c b/APELib/Receiver_sync/src/receiver_Sync_Proc.s.c index f265676..fec35df 100644 --- a/APELib/Receiver_sync/src/receiver_Sync_Proc.s.c +++ b/APELib/Receiver_sync/src/receiver_Sync_Proc.s.c @@ -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; diff --git a/Common/inc/mem_def.h b/Common/inc/mem_def.h index 16b04a4..d8bd1cc 100644 --- a/Common/inc/mem_def.h +++ b/Common/inc/mem_def.h @@ -23,6 +23,13 @@ #define SM4_BASE (0x0A200000)//1.5M #define SM5_BASE (0x0A380000)//1.5M +//空间规划: +/* + SM0:() + SM5:(1201/1024KB)用于存放RECV_SYNC后给RECV_SYMB的数据 + SM2:(/1536KB)用于存放Transmitter的输出结果 +*/ + //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)