1.修改APE5-7任务注册方式,2.修改耗时打点方式 3.遗留问题:PCIE内部处理核死在打点位置3-4之间

This commit is contained in:
HUOHUO 2025-04-05 04:28:49 -07:00
parent 2b84338c7b
commit b94a4cff53
25 changed files with 118 additions and 206 deletions

View File

@ -25,6 +25,8 @@
"mem_sections.h": "c",
"msg_transfer_layer.h": "c",
"typedef.h": "c",
"receiver_bit_func.h": "c"
"receiver_bit_func.h": "c",
"drv_ape.h": "c",
"transmitter_func.h": "c"
}
}

View File

@ -20,6 +20,7 @@
#include "log_interface.h"
#include "Frame_test.h"
#include "trace.h"
#include "osp_ape.h"

View File

@ -7,9 +7,7 @@ __APE_DM0 uint32_t g_slot_ind_dm0[8] = {0}; //32byte
void Slot_ind_Task()
{
uint16_t start_slot = TIME_SLOT();
uint16_t start_us = TIME_US();
uint16_t end_slot;
uint16_t end_us;
g_time_start[0] = TIME_US();
RUN_CNT(TRACE_SLOTIND_ADDR, 0);
@ -34,8 +32,5 @@ void Slot_ind_Task()
osp_phy_msg_send((char*)msg_header, msg_len);
RUN_CNT(TRACE_SLOTIND_ADDR, 1);
end_slot = TIME_SLOT();
end_us = TIME_US();
TRACE_MAX(TRACE_SLOTIND_ADDR, 2, TIME_DIFF(start_slot, start_us, end_slot, end_us) );
TRACE_MAX(TRACE_SLOTIND_ADDR, 2, Time_offset(0) );
}

View File

@ -33,5 +33,4 @@
#define DMA_TAG_CHAIN 3
extern __APE_DM3 v16s32 SVRReg;
#endif

View File

@ -1,41 +0,0 @@
/******************************************************************
* @file trace.h
* @brief: record code status
* @author: HUOHUO
* @Date 2022110
* COPYRIGHT NOTICE: ITTC All rights reserved.
* Change_date Owner Change_content
* 20241023 HUOHUO create file
*****************************************************************/
#ifndef TRACE_H
#define TRACE_H
#include "common.h"
#include "drv_ape.h"
#include "mem_def.h"
#include "phy_macro.h"
#define TRACE(base, offset, val) STORE_EX_W( (void*)((base) + 4*(offset)), (val))
#define TRACE_MAX(base, offset, val) \
{ \
if ( (val) > LOAD_EX_W( (void*)((base) + 4*(offset)) ) ) \
STORE_EX_W( (void*)((base) + 4*(offset)), (val) ); \
}
#define RUN_CNT(base, offset) STORE_EX_W( (void*)((base) + 4*(offset)), LOAD_EX_W( (void*)((base) + 4*(offset)) ) + 1 )
#define TIME_SLOT() (get_tx_nr_slot() )
#define TIME_US() (uint16_t)((get_tx_nr_slot_cycle() * 2097) >> 21)
#define TIME_DIFF(start_slot, start_us, end_slot, end_us) ((start_slot) <= (end_slot) )? \
(( (end_slot) - (start_slot) ) * 500 + (end_us) - (start_us) ): \
((NR_SFN_SLOT_NUM + (end_slot) - (start_slot) )* 500 + (end_us) - (start_us) ) \
//#define TIME_RECORD(base, offset, time0) STORE_EX_W( (void*)((base) + 4*(offset)), GET_STC_CNT() - time0)
#endif

View File

@ -33,11 +33,13 @@ void ape4_event_task(uint32_t addr, uint32_t size)
{PHY_TASK_RECIEVER_SYNC, "Receiver_Sync", PHY_TASK_PRI_RECEIVER_SYNC, 2048, OSP_TIMER_TYPE, 0x000, 0x3FF, 50, (OSP_TASKINIT_FUNC)Receiver_Sync_Init, (OSP_TASKENTRY_FUNC)Receiver_Sync_Task};
osp_task_info_ex mgr_task3 =
{PHY_TASK_TEST, "Test_Task", PHY_TASK_PRI_TEST, 4096, OSP_TIMER_TYPE, 0x000, 0x3FF, 50, NULL, (OSP_TASKENTRY_FUNC)Test_Task};
osp_task_info_ex pcie_normal_task_info = {PCIE_TASK_RECEIVER, (int8_t*)"pcie_normal_task", PCIE_TASK_PRI_RECEIVER, 4096, OSP_NORMAL_TYPE, 1, 0, 0, NULL, (OSP_TASKENTRY_FUNC)pcie_test_task_func};
TRACE(TRACE_RECV_INIT_ADDR, 2, 1);
osp_task_create(&mgr_task2);
osp_task_create(&pcie_normal_task_info);
TRACE(TRACE_RECV_INIT_ADDR, 3, 1);
LOG_INFO_S("APE4 finish task create!\n");
@ -68,8 +70,7 @@ void Phy_Task_Ape4_Reg()
osp_task_info_ex ape4_event_task_info_del = {51, "ape4_event_task_del1", 51, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape4_event_task_del};
//test_case_cfgpar_pcie();
//osp_task_info_ex pcie_normal_task_info = {PCIE_TASK_RECEIVER, (int8_t*)"pcie_normal_task", PCIE_TASK_PRI_RECEIVER, 4096, OSP_NORMAL_TYPE, 1, 0, 0, NULL, (OSP_TASKENTRY_FUNC)pcie_test_task_func};
//osp_task_create(&pcie_normal_task_info);
osp_task_create(&ape4_event_task_info);
osp_task_create(&ape4_event_task_info_del);

View File

@ -30,6 +30,7 @@
//lxh 202501
#include "mem_sections.h"
#include "drv_ape.h"
#include "trace.h"
@ -458,15 +459,15 @@ void test_speed_recv_msg_pcie()
handler.inst_id = i;
handler.type_id = CU_SPLIT;
cu_flag = C_PLANE;
TRACE(TRACE_PCIE_ADDR, 3, 3);
msg_transfer_receive(handler.value, cu_flag, offset, len, &msg_ptr);
TRACE(TRACE_PCIE_ADDR, 3, 4);
cu_flag = U_PLANE;
msg_transfer_receive(handler.value, cu_flag, offset, len, &msg_ptr);
TRACE(TRACE_PCIE_ADDR, 3, 5);
handler.type_id = OAM;
msg_transfer_receive(handler.value, cu_flag, offset, len, &msg_ptr);
TRACE(TRACE_PCIE_ADDR, 3, 6);
}
/*********************************************************************************/
}
@ -474,10 +475,14 @@ void test_speed_recv_msg_pcie()
void pcie_test_task_func(void)
{
return ;
g_time_start[1] = TIME_US();
RUN_CNT(TRACE_PCIE_ADDR, 0);
//uint32_t clockTick = 0;
// uint32_t clockOffset = 0;
TRACE(TRACE_PCIE_ADDR, 3, 1);
test_case_sendmsg_pcie();
TRACE(TRACE_PCIE_ADDR, 3, 2);
#ifdef PCIE_WITH_JESD
#endif
@ -485,6 +490,10 @@ void pcie_test_task_func(void)
debug_write(DBG_DDR_COMMON_IDX(get_core_id(),17), 0x70701040);
//delay_us(50);
TRACE(TRACE_PCIE_ADDR, 3, 0xffff);
RUN_CNT(TRACE_PCIE_ADDR, 1);
TRACE_MAX(TRACE_PCIE_ADDR, 2, Time_offset(1) );
return;
}

View File

@ -33,5 +33,4 @@
#define DMA_TAG_CHAIN 19
extern __APE_DM3 v16s32 SVRReg;
#endif

View File

@ -27,12 +27,7 @@
/* 收到消息后创建任务 */
void ape5_event_task(uint32_t addr, uint32_t size)
{
osp_task_info_ex mgr_task =
{PHY_TASK_RECIEVER_SYMB, "Receiver_Symb", PHY_TASK_PRI_RECEIVER_SYMB, 4096, OSP_EVENT_TYPE, 0x000, 0x000, 0, (OSP_TASKINIT_FUNC)Receiver_Symb_Init, (OSP_TASKENTRY_FUNC)Receiver_Symb_Task};
osp_task_create(&mgr_task);
osp_timer_sync(1);
LOG_INFO_S("APE5 finish task create!\n");
return;
}
@ -56,12 +51,14 @@ void ape5_event_task_del(uint32_t addr, uint32_t size)
*/
void Phy_Task_Ape5_Reg()
{
osp_task_info_ex ape5_event_task_info = {50, "ape5_event_task1", 50, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape5_event_task};
osp_task_info_ex ape5_event_task_info_del = {51, "ape5_event_task_del1", 51, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape5_event_task_del};
osp_task_create(&ape5_event_task_info);
osp_task_create(&ape5_event_task_info_del);
// osp_task_info_ex ape5_event_task_info = {50, "ape5_event_task1", 50, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape5_event_task};
// osp_task_info_ex ape5_event_task_info_del = {51, "ape5_event_task_del1", 51, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape5_event_task_del};
osp_task_info_ex mgr_task = {PHY_TASK_RECIEVER_SYMB, "Receiver_Symb", PHY_TASK_PRI_RECEIVER_SYMB, 4096, OSP_EVENT_TYPE, 0x000, 0x000, 0, (OSP_TASKINIT_FUNC)Receiver_Symb_Init, (OSP_TASKENTRY_FUNC)Receiver_Symb_Task};
// osp_task_create(&ape5_event_task_info);
// osp_task_create(&ape5_event_task_info_del);
osp_task_create(&mgr_task);
LOG_INFO_S("APE5 finish task create!\n");
return ;

View File

@ -33,5 +33,4 @@
#define DMA_TAG_CHAIN 3
extern __APE_DM3 v16s32 SVRReg;
#endif

View File

@ -27,12 +27,7 @@
/* 收到消息后创建任务 */
void ape6_event_task(uint32_t addr, uint32_t size)
{
osp_task_info_ex mgr_task =
{PHY_TASK_RECIEVER_BIT, "Receiver_Bit", PHY_TASK_PRI_RECEIVER_BIT, 4096, OSP_EVENT_TYPE, 0x000, 0x000, 0, (OSP_TASKINIT_FUNC)Receiver_Bit_Init, (OSP_TASKENTRY_FUNC)Receiver_Bit_Task};
osp_task_create(&mgr_task);
osp_timer_sync(1);
LOG_INFO_S("APE6 finish task create!\n");
return;
}
@ -56,11 +51,16 @@ void ape6_event_task_del(uint32_t addr, uint32_t size)
*/
void Phy_Task_Ape6_Reg()
{
osp_task_info_ex ape6_event_task_info = {50, "ape6_event_task1", 50, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape6_event_task};
osp_task_info_ex ape6_event_task_info_del = {51, "ape6_event_task_del1", 51, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape6_event_task_del};
// osp_task_info_ex ape6_event_task_info = {50, "ape6_event_task1", 50, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape6_event_task};
// osp_task_info_ex ape6_event_task_info_del = {51, "ape6_event_task_del1", 51, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape6_event_task_del};
osp_task_info_ex mgr_task =
{PHY_TASK_RECIEVER_BIT, "Receiver_Bit", PHY_TASK_PRI_RECEIVER_BIT, 4096, OSP_EVENT_TYPE, 0x000, 0x000, 0, (OSP_TASKINIT_FUNC)Receiver_Bit_Init, (OSP_TASKENTRY_FUNC)Receiver_Bit_Task};
// osp_task_create(&ape6_event_task_info);
// osp_task_create(&ape6_event_task_info_del);
osp_task_create(&mgr_task);
LOG_INFO_S("APE6 finish task create!\n");
osp_task_create(&ape6_event_task_info);
osp_task_create(&ape6_event_task_info_del);
return ;

View File

@ -33,5 +33,4 @@
#define DMA_TAG_CHAIN 19
extern __APE_DM3 v16s32 SVRReg;
#endif

View File

@ -27,12 +27,7 @@
/* 收到消息后创建任务 */
void ape7_event_task(uint32_t addr, uint32_t size)
{
osp_task_info_ex mgr_task =
{PHY_TASK_RECIEVER_FIRST_SYNC, "Receiver_Sync_First_Sync", PHY_TASK_PRI_RECEIVER_FIRST_SYNC, 4096, OSP_EVENT_TYPE, 0x000, 0x000, 0, (OSP_TASKINIT_FUNC)Receiver_Sync_First_Init, (OSP_TASKENTRY_FUNC)Receiver_First_Sync_Proc};
osp_task_create(&mgr_task);
osp_timer_sync(1);
LOG_INFO_S("APE7 finish task create!\n");
return;
}
@ -56,11 +51,15 @@ void ape7_event_task_del(uint32_t addr, uint32_t size)
*/
void Phy_Task_Ape7_Reg()
{
osp_task_info_ex ape7_event_task_info = {50, "ape7_event_task1", 50, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape7_event_task};
osp_task_info_ex ape7_event_task_info_del = {51, "ape7_event_task_del1", 51, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape7_event_task_del};
// osp_task_info_ex ape7_event_task_info = {50, "ape7_event_task1", 50, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape7_event_task};
// osp_task_info_ex ape7_event_task_info_del = {51, "ape7_event_task_del1", 51, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape7_event_task_del};
osp_task_info_ex mgr_task =
{PHY_TASK_RECIEVER_FIRST_SYNC, "Receiver_Sync_First_Sync", PHY_TASK_PRI_RECEIVER_FIRST_SYNC, 4096, OSP_EVENT_TYPE, 0x000, 0x000, 0, (OSP_TASKINIT_FUNC)Receiver_Sync_First_Init, (OSP_TASKENTRY_FUNC)Receiver_First_Sync_Proc};
// osp_task_create(&ape7_event_task_info);
// osp_task_create(&ape7_event_task_info_del);
osp_task_create(&mgr_task);
LOG_INFO_S("APE7 finish task create!\n");
osp_task_create(&ape7_event_task_info);
osp_task_create(&ape7_event_task_info_del);
return ;

View File

@ -21,10 +21,7 @@
*/
void Receiver_Bit_Task(void* msg_ptr, uint32_t msg_len)
{
uint16_t start_slot = TIME_SLOT();
uint16_t start_us = TIME_US();
uint16_t end_slot;
uint16_t end_us;
g_time_start[0] = TIME_US();
RUN_CNT(TRACE_RECEIVER_BIT_ADDR, 0);
@ -174,9 +171,8 @@ void Receiver_Bit_Task(void* msg_ptr, uint32_t msg_len)
TRACE(TRACE_RECEIVER_BIT_ADDR, 3, 100);
RUN_CNT(TRACE_RECEIVER_BIT_ADDR, 1);
end_slot = TIME_SLOT();
end_us = TIME_US();
TRACE_MAX(TRACE_RECEIVER_BIT_ADDR, 2, TIME_DIFF(start_slot, start_us, end_slot, end_us) );
TRACE_MAX(TRACE_RECEIVER_BIT_ADDR, 2, Time_offset(0) );
return;
}

View File

@ -22,9 +22,7 @@
void Receiver_Symb_Task(receiver_sync2symb_t* msg_ptr, uint32_t msg_len)
{
uint16_t start_slot = TIME_SLOT();
uint16_t start_us = TIME_US();
uint16_t end_slot;
uint16_t end_us;
g_time_start[0] = TIME_US();
RUN_CNT(TRACE_RECEIVER_SYMB_ADDR, 0);
@ -177,9 +175,7 @@ void Receiver_Symb_Task(receiver_sync2symb_t* msg_ptr, uint32_t msg_len)
TRACE(TRACE_RECEIVER_SYMB_ADDR, 3, 100);
RUN_CNT(TRACE_RECEIVER_SYMB_ADDR, 1);
end_slot = TIME_SLOT();
end_us = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 2, TIME_DIFF(start_slot, start_us, end_slot, end_us) );
TRACE_MAX(TRACE_RECEIVER_SYMB_ADDR, 2, Time_offset(0));
return;
}

View File

@ -176,7 +176,7 @@ void Receiver_Sync_Proc(
uint32_t cur_sfn = get_rx_nr_sfn();
uint32_t cur_slot = get_rx_nr_slot();
uint32_t sync_status = LOAD_EX_W(&(g_receiver_sync_status_SM_ptr->sync_status));
volatile sync_status = LOAD_EX_W(&(g_receiver_sync_status_SM_ptr->sync_status));
if(SYNC_FIRST_RUNING == sync_status)
{
@ -233,18 +233,15 @@ void Receiver_Sync_Proc(
//用于跟踪同步
void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
{
uint16_t start_slot = TIME_SLOT();
uint16_t start_us = TIME_US();
uint16_t end_slot;
uint16_t end_us;
//DBG
return ;
g_time_start[0] = TIME_US();
uint16_t dbg_time0, dbg_time1;
uint16_t dbg_slot0, dbg_slot1;
RUN_CNT(TRACE_RECEIVER_SYNC_FINE_ADDR, 0);
uint32_t ret;
int32_t *cfg_addr;// 配置地址指针
uint32_t time0 = TIME_US();
uint32_t time0 = g_time_start;
volatile uint32_t time1 = time0;
uint32_t task_idx = 0;
uint32_t frame_head_offset;
@ -261,8 +258,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_slot0 = TIME_SLOT();
dbg_time0 = TIME_US();
dbg_time0 = Time_offset(0);
//搬移1055sample数据供定时同步,奇数slot处理偶buffer数据反之
if( 1 == (slot & 0x01) )
@ -335,11 +331,10 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 3);
ape_csu_task_lookup(DMA_TAG_G2L, 1);
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
uint32_t dbg_cur_time = TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1);
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 5, dbg_cur_time );
dbg_time1 = Time_offset(0);
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);
// if(100 < dbg_cur_time )
// {
@ -352,9 +347,6 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
// __ucps2_dbgbreak();
// }
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_time1;
//插空拷贝数据到SM提供给sync_symb数据输入来源
ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(src_addr0),
(uint64_t)(sync2symb_data_buffer[buffer_sel]),
@ -375,11 +367,9 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
WAIT_MPU_STOP;
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 4);
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 6, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 6, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_time1;
SVRReg[0] = MPU_ADDR(cfg_addr);
SyncVerAsm(SVRReg);
@ -387,11 +377,9 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
// 得到验证后的同步位置
WAIT_MPU_STOP;
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 7, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 7, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_time1;
TRACE(TRACE_RECEIVER_SYNC_FINE_ADDR, 3, 5);
uint32_t maxWindowSum = receiver_sync_temp_dm3_ptr[1];
//更新最佳位置
@ -454,11 +442,9 @@ 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_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 8, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 8, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_time1;
//TODO:后续需要添加门限判断条件
uint32_t threshold = 1;
@ -488,8 +474,6 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
Receiver_Sync_Memory_Free();
RUN_CNT(TRACE_RECEIVER_SYNC_FINE_ADDR, 1);
end_slot = TIME_SLOT();
end_us = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 2, TIME_DIFF(start_slot, start_us, end_slot, end_us) );
TRACE_MAX(TRACE_RECEIVER_SYNC_FINE_ADDR, 2, Time_offset(0) );
return;
}

View File

@ -162,15 +162,8 @@ void Receiver_Sync_First_Memory_Free( )
void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_len)
{
uint16_t start_slot = TIME_SLOT();
uint16_t start_us = TIME_US();
uint16_t end_slot;
uint16_t end_us;
g_time_start[0] = TIME_US();
RUN_CNT(TRACE_RECEIVER_SYNC_FIRST_ADDR, 0);
const uint32_t loop_num = 1;
uint32_t ret;
@ -182,12 +175,10 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
uint32_t total_nsample = sample_per_tti + addition_sample;
uint32_t sample_per_csu = (total_nsample >> 1);
uint32_t nsample_per_section = total_nsample / loop_num;
uint32_t corr_dm_ptr;
int32_t *cfg_addr;// 配置地址指针
uint32_t maxPosition = 0;
uint32_t maxsum;
volatile uint16_t dbg_time0, dbg_time1;
volatile uint16_t dbg_slot0, dbg_slot1;
//Proc的DM空间申请
Receiver_Sync_First_Memory_Alloc();
@ -195,8 +186,7 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
//寻找帧同步头,更新同步信息结构体
//搬移500us+数据供定时同步,奇数slot处理偶buffer数据反之
dbg_slot0 = TIME_SLOT();
dbg_time0 = TIME_US();
dbg_time0 = Time_offset(0);
uint32_t src_addr0;
uint32_t src_addr1;
if( 1 == (slot & 0x01) )
@ -255,11 +245,9 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
ape_csu_task_lookup(DMA_TAG_G2L, 1);
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 4, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 4, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_time1;
TRACE(TRACE_RECEIVER_SYNC_FIRST_ADDR, 3, 3);
SVRReg[0] = MPU_ADDR(cfg_addr);
ByteCopyAsm(SVRReg);
@ -271,12 +259,11 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
// receiver_sync_first_temp_dm3_ptr);
WAIT_MPU_STOP;
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 5, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 5, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_slot1;
dm_check(0);
// dm_check(0);
cfg_addr = (int32_t *)receiver_sync_first_config_dm0_ptr + g_receiver_sync_first_table_param.ConfigSlidingCorrelation_CFG2_Offset;
@ -300,13 +287,11 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
SlidingCorrelationAsm(SVRReg);
WAIT_MPU_STOP;
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 6, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 6, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_slot1;
TRACE(TRACE_RECEIVER_SYNC_FIRST_ADDR, 3, 5);
dm_check(1);
//dm_check(1);
maxPosition = receiver_sync_first_temp_dm3_ptr[0];
maxsum = receiver_sync_first_temp_dm3_ptr[1];
@ -322,12 +307,9 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
0);
ape_csu_task_lookup(DMA_TAG_G2L, 1);
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 7, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 7, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_slot1;
@ -365,22 +347,18 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
MPU_ADDR(receiver_sync_first_temp_dm2_ptr),
MPU_ADDR(receiver_sync_first_temp_dm3_ptr));
WAIT_MPU_STOP;
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 8, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 8, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_slot1;
TRACE(TRACE_RECEIVER_SYNC_FIRST_ADDR, 3, 6);
dm_check(2);
//dm_check(2);
SVRReg[0] = MPU_ADDR(cfg_addr);
SlidingCorrelationSecondAsm(SVRReg);
WAIT_MPU_STOP;
dbg_slot1 = TIME_SLOT();
dbg_time1 = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 9, TIME_DIFF(dbg_slot0, dbg_time0, dbg_slot1, dbg_time1) );
dbg_time1 = Time_offset(0);
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 9, dbg_time1-dbg_time0 );
dbg_time0 = dbg_time1;
dbg_slot0 = dbg_slot1;
TRACE(TRACE_RECEIVER_SYNC_FIRST_ADDR, 3, 7);
@ -390,7 +368,7 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
maxsum = receiver_sync_first_temp_dm3_ptr[1];
}
dm_check(3);
//dm_check(3);
//TODO:后续需要添加门限判断条件
uint32_t threshold = 1;
if(threshold)
@ -425,8 +403,6 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
RUN_CNT(TRACE_RECEIVER_SYNC_FIRST_ADDR, 1);
end_slot = TIME_SLOT();
end_us = TIME_US();
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 2, TIME_DIFF(start_slot, start_us, end_slot, end_us) );
TRACE_MAX(TRACE_RECEIVER_SYNC_FIRST_ADDR, 2, Time_offset(0));
return;
}

View File

@ -4,9 +4,7 @@ void Test_Task()
{
uint16_t start_slot = TIME_SLOT();
uint16_t start_us = TIME_US();
uint16_t end_slot;
uint16_t end_us;
g_time_start[0] = TIME_US();
RUN_CNT(TRACE_TESTTASK_ADDR, 0);
uint32_t cur_sfn = get_rx_nr_sfn();
@ -75,7 +73,5 @@ void Test_Task()
TRACE(TRACE_TESTTASK_ADDR, 3, 4);
RUN_CNT(TRACE_TESTTASK_ADDR, 1);
end_slot = TIME_SLOT();
end_us = TIME_US();
TRACE_MAX(TRACE_TESTTASK_ADDR, 2, TIME_DIFF(start_slot, start_us, end_slot, end_us) );
TRACE_MAX(TRACE_TESTTASK_ADDR, 2, Time_offset(0) );
}

View File

@ -28,9 +28,7 @@ void Transmitter_Task()
//时间统计
uint16_t start_slot = TIME_SLOT();
uint16_t start_us = TIME_US();
uint16_t end_slot;
uint16_t end_us;
g_time_start[1] = TIME_US();
uint16_t time0_us, time1_us;
uint16_t time0_slot, time1_slot;
RUN_CNT(TRACE_TRANSMITTER_ADDR, 0);
@ -132,10 +130,9 @@ void Transmitter_Task()
transmitter_temp_dm2_ptr = (int32_t *)ADDR_ALIGN(transmitter_malloc_dm2_ptr, 14); //起始地址16k对齐
TRACE(TRACE_TRANSMITTER_ADDR, 3, 2);
time1_slot = TIME_SLOT();
time1_us = TIME_US();
time1_us = Time_offset(1);
TRACE_MAX(TRACE_TRANSMITTER_ADDR, 4, TIME_DIFF(start_slot, start_us,time1_slot, time1_us));
TRACE_MAX(TRACE_TRANSMITTER_ADDR, 4, time1_us);
time0_slot = time1_slot;
time0_us = time1_us;
//6. 计算流程
@ -149,10 +146,8 @@ void Transmitter_Task()
transmitter_cur_sfn
);
time1_slot = TIME_SLOT();
time1_us = TIME_US();
TRACE_MAX(TRACE_TRANSMITTER_ADDR, 5, TIME_DIFF(time0_slot, time0_us,time1_slot, time1_us));
time0_slot = time1_slot;
time1_us = Time_offset(1);
TRACE_MAX(TRACE_TRANSMITTER_ADDR, 5, time1_us - time0_us);
time0_us = time1_us;
@ -179,9 +174,7 @@ void Transmitter_Task()
TRACE(TRACE_TRANSMITTER_ADDR, 3, 1024);
RUN_CNT(TRACE_TRANSMITTER_ADDR, 1);
end_slot = TIME_SLOT();
end_us = TIME_US();
TRACE_MAX(TRACE_TRANSMITTER_ADDR, 2, TIME_DIFF(start_slot, start_us, end_slot, end_us) );
LOG_ERROR_S("DM0:%d:%d, DM1:%d:%d,DM2:%d:%d,DM3:%d:%d\n",result00,result01,result10,result11,result20,result21,result30,result31);
TRACE_MAX(TRACE_TRANSMITTER_ADDR, 2, Time_offset(1) );
//LOG_ERROR_S("DM0:%d:%d, DM1:%d:%d,DM2:%d:%d,DM3:%d:%d\n",result00,result01,result10,result11,result20,result21,result30,result31);
return;
}

View File

@ -12,7 +12,6 @@
#ifndef LOG_INTERFACE_H
#define LOG_INTERFACE_H
#include <type_define.h>
#include "osp_interface.h"
#include "common.h"

View File

@ -86,8 +86,9 @@
#define TRACE_TESTTASK_ADDR (TRACE_RECEIVER_BIT_ADDR + TRACE_GRP_LEN) // 0x88700a00
#define TRACE_RECEIVER_SYNC_FIRST_ADDR (TRACE_TESTTASK_ADDR + TRACE_GRP_LEN) // 0x88700c00
#define TRACE_RECEIVER_SYNC_FINE_ADDR (TRACE_RECEIVER_SYNC_FIRST_ADDR + TRACE_GRP_LEN) // 0x88700e00
#define TRACE_PCIE_ADDR (TRACE_RECEIVER_SYNC_FINE_ADDR + TRACE_GRP_LEN) //0x88701000
#define TRACE_TRANSMITTER_ADDR (TRACE_RECEIVER_SYNC_FINE_ADDR + TRACE_GRP_LEN) // 0x88701000
#define TRACE_TRANS_INIT_ADDR (TRACE_TRANSMITTER_ADDR + TRACE_GRP_LEN) // 0x88701200
#define TRACE_TRANSMITTER_ADDR (TRACE_PCIE_ADDR + TRACE_GRP_LEN) // 0x88701200
#define TRACE_TRANS_INIT_ADDR (TRACE_TRANSMITTER_ADDR + TRACE_GRP_LEN) // 0x88701400
#endif

View File

@ -12,7 +12,6 @@
#ifndef TASK_DEFINE_H
#define TASK_DEFINE_H
#include <type_define.h>
#include "osp_interface.h"
#include "osp_ape.h"
typedef enum

View File

@ -28,14 +28,15 @@
#define RUN_CNT(base, offset) STORE_EX_W( (void*)((base) + 4*(offset)), LOAD_EX_W( (void*)((base) + 4*(offset)) ) + 1 )
#define TIME_SLOT() (get_tx_nr_slot() )
#define TIME_US() (uint16_t)((get_tx_nr_slot_cycle() * 2097) >> 21)
#define TIME_US() (uint32_t)((GET_STC_CNT()* 2097) >> 21)
#define TIME_NS() (uint32_t)((GET_STC_CNT())
#define TIME_DIFF(start_slot, start_us, end_slot, end_us) ((start_slot) <= (end_slot) )? \
(( (end_slot) - (start_slot) ) * 500 + ( (end_us) - (start_us) )): \
((NR_SFN_SLOT_NUM + (end_slot) - (start_slot) )* 500 + (end_us) - (start_us) ) \
extern uint32_t g_time_start[3];
extern uint32_t Time_offset(uint32_t idx);
//#define TIME_RECORD(base, offset, time0) STORE_EX_W( (void*)((base) + 4*(offset)), GET_STC_CNT() - time0)
#endif

12
Common/src/trace.s.c Normal file
View File

@ -0,0 +1,12 @@
#include "trace.h"
uint32_t g_time_start[3];
__attribute__((always_inline)) uint32_t Time_offset(uint32_t idx)
{
#ifndef IDE_TEST
uint32_t cur_cycle = TIME_US();
return (cur_cycle < g_time_start[idx]) ? (cur_cycle + (0x389aca00 - g_time_start[idx])) : (cur_cycle - g_time_start[idx]);
#else
return 0;
#endif
}

View File

@ -6,7 +6,7 @@
typedef struct receiver_sync_status_s
{
uint32_t cylic_buffer_data_offset;//循环buffer指示数据存入的头相对buffer_ptr[0]偏移
uint32_t cylic_buffer_proc_data_offset;//循环buffer指示数据处理的头相对buffer_ptr[0]偏移
int32_t cylic_buffer_proc_data_offset;//循环buffer指示数据处理的头相对buffer_ptr[0]偏移
uint32_t cylic_buffer_data_len;//单位是Word
uint32_t sync_status;//参见receiver_sync_status_e
uint32_t frame_head_offset;//每个500us中帧头的偏移值范围0~61439