将PCIE任务注册为触发任务,将任务部署迁移到APE7,修改状态机,新增等待RK3588计算结果的中间状态

This commit is contained in:
HUOHUO 2025-04-21 10:23:53 -07:00
parent 78c92355a8
commit 865072aac7
63 changed files with 113 additions and 40 deletions

View File

@ -35,6 +35,8 @@
"fft4096int32.h": "c",
"channelestimpl.h": "c",
"ucps2.h": "c",
"channelest.h": "c"
"channelest.h": "c",
"interface_rec_sync2_pcie.h": "c",
"fucp_ape7_pcie_testcase.h": "c"
}
}

View File

@ -53,7 +53,7 @@ void Phy_Task_Ape3_Reg()
{
// osp_task_info_ex ape3_event_task_info = {50, "ape3_event_task1", 50, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape3_event_task};
// osp_task_info_ex ape3_event_task_info_del = {51, "ape3_event_task_del1", 51, 2048, OSP_EVENT_TYPE, 0, 0, 0, NULL, (OSP_TASKENTRY_FUNC)ape3_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_info_ex mgr_task = {PHY_TASK_RECEIVER_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(&ape3_event_task_info);
// osp_task_create(&ape3_event_task_info_del);

View File

@ -19,7 +19,7 @@
#include "Frame_test.h"
#include "receiver_sync_func.h"
#include "trace.h"
#include "Fucp_Ape4_pcie_testcase.h"
/**************************function******************************/
@ -30,18 +30,14 @@ void ape4_event_task(uint32_t addr, uint32_t size)
uint32_t ape_id = get_core_id();
osp_task_info_ex mgr_task2 =
{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};
{PHY_TASK_RECEIVER_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);
test_case_cfgpar_pcie();
osp_task_create(&pcie_normal_task_info);
TRACE(TRACE_RECV_INIT_ADDR, 3, 1);
LOG_INFO_S("APE4 finish task create!\n");

View File

@ -53,7 +53,7 @@ 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_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_info_ex mgr_task = {PHY_TASK_RECEIVER_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);

View File

@ -55,7 +55,7 @@ void Phy_Task_Ape6_Reg()
// 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};
{PHY_TASK_RECEIVER_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);

View File

@ -13,7 +13,7 @@
// -FHDR------------------------------------------------------------
#ifndef __PCIE_TESTCASE_H__
#define __PCIE_TESTCASE_H__
#include "interface_rec_sync2_pcie.h"
uint32_t pcie_rx_callback_data(const char* buf,uint32_t payloadSize);
uint32_t pcie_rx_callback_ctrl(const char* buf,uint32_t payloadSize);
uint32_t pcie_rx_callback_oam(const char* buf,uint32_t payloadSize);
@ -22,7 +22,8 @@ void test_case_sendmsg_pcie();
void test_case_recv_msg_pcie();
void test_speed_sendmsg_pcie();
void test_speed_recv_msg_pcie();
void pcie_test_task_func(void);
void pcie_test_task_func(receiver_sync2pcie_t* msg_ptr, uint32_t msg_len);
#endif

View File

@ -17,6 +17,7 @@
#include "log_interface.h"
#include "trace.h"
#include "receiver_sync_first_func.h"
#include "Fucp_Ape7_pcie_testcase.h"
/**************************function******************************/
/*!
@ -54,9 +55,14 @@ 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 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};
{PHY_TASK_RECEIVER_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_info_ex pcie_normal_task_info =
{PHY_TASK_PCIE, (int8_t*)"pcie_normal_task", PHY_TASK_PRI_PCIE, 4096, OSP_EVENT_TYPE, 0x000, 0, 0, NULL, (OSP_TASKENTRY_FUNC)pcie_test_task_func};
// osp_task_create(&ape7_event_task_info);
// osp_task_create(&ape7_event_task_info_del);
test_case_cfgpar_pcie();
osp_task_create(&pcie_normal_task_info);
osp_task_create(&mgr_task);
LOG_INFO_S("APE7 finish task create!\n");

View File

@ -31,7 +31,9 @@
#include "mem_sections.h"
#include "drv_ape.h"
#include "trace.h"
#include "interface_rec_sync2_pcie.h"
#include "Fucp_Ape7_pcie_testcase.h"
#include "mem_def.h"
@ -473,8 +475,26 @@ void test_speed_recv_msg_pcie()
}
void pcie_test_task_func(void)
void pcie_test_task_func(receiver_sync2pcie_t* msg_ptr, uint32_t msg_len)
{
//获取状态机状态
volatile uint32_t status_SM_addr= (uint32_t)RECEIVER_SYNC2SYNC_FIRST_INF_ADDR;
/*typedef enum
{
SYNC_IDLE=0,
SYNC_FIRST_RUNING,
SYNC_AI_PROCECING,
SYNC_TRACKING
}receiver_sync_status_e;*/
if(2 != LOAD_EX_W(status_SM_addr))
return ;
//提供的数据地址(DDR)和本次数据的SFN SLOT号
uint32_t sfn = msg_ptr->sfn;
uint32_t slot = msg_ptr->slot;
uint32_t data_addr = msg_ptr->data_section0_ptr;
uint32_t data_len = 1024*4;
return ;
g_time_start[1] = TIME_NS();
RUN_CNT(TRACE_PCIE_ADDR, 0);
@ -494,7 +514,18 @@ void pcie_test_task_func(void)
RUN_CNT(TRACE_PCIE_ADDR, 1);
TRACE_MAX(TRACE_PCIE_ADDR, 2, Time_offset(1) );
return;
//TODO:接收到RK3588的数据后必须更新状态机后级模块才能工作
//WARNING:需要使用这个代码
#if 0
volatile uint32_t status_SM_addr= (uint32_t)RECEIVER_SYNC2SYNC_FIRST_INF_ADDR;
STORE_EX_W(status_SM_addr , 3);
__ucps2_synch(0);
#endif
return;
}

View File

@ -115,8 +115,8 @@ void Receiver_Symb_Proc(
UCP4008_KERNEL_INTER,
APE5_CORE_ID,
APE6_CORE_ID,
PHY_TASK_RECIEVER_SYMB,
PHY_TASK_RECIEVER_BIT);
PHY_TASK_RECEIVER_SYMB,
PHY_TASK_RECEIVER_BIT);
return;
}

View File

@ -23,6 +23,7 @@
#include "task_define.h"
#include "trace.h"
#include "interface_rec_sync2_rec_sync_first.h"
#include "interface_rec_sync2_pcie.h"
//include mpu header files
@ -54,7 +55,7 @@ extern uint16_t g_proc_id;
void Receiver_Sync_Init();
void Receiver_Sync_Task();
void Receiver_Sync_Proc();
void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot);
void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot, uint32_t proc_type);
//debug
extern uint32_t* last_mem_dm[8];

View File

@ -61,6 +61,7 @@ typedef enum
{
SYNC_IDLE=0,
SYNC_FIRST_RUNING,
SYNC_AI_PROCECING,
SYNC_TRACKING
}receiver_sync_status_e;

View File

@ -196,8 +196,8 @@ void Receiver_Sync_Proc(
UCP4008_KERNEL_INNER,
APE4_CORE_ID,
APE7_CORE_ID,
PHY_TASK_RECIEVER_SYNC,
PHY_TASK_RECIEVER_FIRST_SYNC);
PHY_TASK_RECEIVER_SYNC,
PHY_TASK_RECEIVER_FIRST_SYNC);
//第一次同步目前不存储数据做处理,注释
// receiver_sync2first_sync_t data_send2first_sync_task;
@ -206,14 +206,14 @@ void Receiver_Sync_Proc(
// UCP4008_KERNEL_INNER,
// get_core_id(),
// get_core_id(),
// PHY_TASK_PRI_RECEIVER_SYNC,
// PHY_TASK_PRI_RECEIVER_FIRST_SYNC);
// PHY_TASK_RECEIVER_SYNC,
// PHY_TASK_RECEIVER_FIRST_SYNC);
TRACE(TRACE_RECEIVER_SYNC_ADDR, 3, 4);
}
else if(SYNC_TRACKING == sync_status)
else if((SYNC_TRACKING == sync_status) || (SYNC_AI_PROCECING == sync_status))
{
TRACE(TRACE_RECEIVER_SYNC_ADDR, 3, 5);
Receiver_Fine_Sync_Proc(cur_sfn, cur_slot);
Receiver_Fine_Sync_Proc(cur_sfn, cur_slot, sync_status);
//根据当前状态机状态buffer存储的数据长度sync同步帧头发送核间消息触发任务
TRACE(TRACE_RECEIVER_SYNC_ADDR, 3, 6);
@ -232,7 +232,7 @@ void Receiver_Sync_Proc(
//用于跟踪同步
void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot, uint32_t proc_type)
{
g_time_start[2] = TIME_NS();
uint16_t dbg_time0, dbg_time1;
@ -443,16 +443,29 @@ void Receiver_Fine_Sync_Proc(uint32_t sfn, uint32_t slot)
1);
}
//发核间消息给SYMB_TASK, slot号为偶数APE5处理奇数APE3处理
if(SYNC_TRACKING == proc_type)
{
uint32_t symb_proc_core_sel = (0 == (slot & 0x1)) ? APE5_CORE_ID : APE3_CORE_ID;
phy_et_msg_send((uint32_t)(&data_send2symb_task[task_idx]),
sizeof(receiver_sync2symb_t),
UCP4008_KERNEL_INTER,
get_core_id(),
symb_proc_core_sel,
PHY_TASK_PRI_RECEIVER_SYNC,
PHY_TASK_PRI_RECEIVER_SYMB);
phy_et_msg_send((uint32_t)(&data_send2symb_task[task_idx]),
sizeof(receiver_sync2symb_t),
UCP4008_KERNEL_INTER,
get_core_id(),
symb_proc_core_sel,
PHY_TASK_RECEIVER_SYNC,
PHY_TASK_RECEIVER_SYMB);
}
else
{
phy_et_msg_send((uint32_t)(&data_send2symb_task[task_idx]),
sizeof(receiver_sync2pcie_t),
UCP4008_KERNEL_INTER,
get_core_id(),
APE7_CORE_ID,
PHY_TASK_RECEIVER_SYNC,
PHY_TASK_PCIE);
}
g_proc_id++;
task_idx++;
}

View File

@ -57,6 +57,7 @@ typedef enum
{
SYNC_IDLE=0,
SYNC_FIRST_RUNING,
SYNC_AI_PROCECING,
SYNC_TRACKING
}receiver_sync_first_status_e;

View File

@ -362,7 +362,7 @@ void Receiver_First_Sync_Proc(receiver_sync2first_sync_t* msg_ptr, uint32_t msg_
//执行完成,更新状态机
if(SYNC_OK == ret)
{
STORE_EX_W(&g_receiver_sync_status_SM_ptr->sync_status , SYNC_TRACKING);
STORE_EX_W(&g_receiver_sync_status_SM_ptr->sync_status , SYNC_AI_PROCECING);
__ucps2_synch(0);
}
else

View File

@ -26,7 +26,7 @@ typedef enum
PHY_TASK_PRI_RECEIVER_BIT,
PHY_TASK_PRI_TEST,
PHY_TASK_PRI_RECEIVER_FIRST_SYNC,
PCIE_TASK_PRI_RECEIVER,
PHY_TASK_PRI_PCIE,
PHY_TASK_PRI_EQUAL_PRI, //不需要优先级抢占的任务,设置为该优先级
}task_pri_e;
@ -38,12 +38,12 @@ typedef enum
PHY_TASK_CONFIG,
PHY_TASK_SLOT_IND,
PHY_TASK_TRANSIMITTER,
PHY_TASK_RECIEVER_SYNC,
PHY_TASK_RECIEVER_SYMB,
PHY_TASK_RECIEVER_BIT,
PHY_TASK_RECEIVER_SYNC,
PHY_TASK_RECEIVER_SYMB,
PHY_TASK_RECEIVER_BIT,
PHY_TASK_TEST,
PHY_TASK_RECIEVER_FIRST_SYNC,
PCIE_TASK_RECEIVER,
PHY_TASK_RECEIVER_FIRST_SYNC,
PHY_TASK_PCIE,
PHY_TASK_PHY_MGR,
PHY_TASK_MAX=32
}task_id_e;

View File

@ -0,0 +1,21 @@
#ifndef INTERFACE_REC_SYNC2_PCIE_H
#define INTERFACE_REC_SYNC2_PCIE_H
#include "type_define.h"
typedef struct receiver_sync2pcie_s
{
uint16_t sfn;//创建任务时刻的sfn
uint16_t slot;//创建任务时刻的slot
uint16_t num_data_section;
uint16_t proc_id;//记录包的顺序
uint32_t data_section0_ptr;
uint32_t data_section1_ptr;
uint32_t data_section0_length;//单位Word
uint32_t data_section1_length;//单位Word
}receiver_sync2pcie_t;
#endif