This commit is contained in:
HUOHUO 2025-05-27 10:57:28 -07:00
commit 168f1bb98e
3 changed files with 133 additions and 30 deletions

View File

@ -37,11 +37,12 @@ void ChannelEquImpl(
){ ){
volatile int a = 1; volatile int a = 1;
int numSym = 7 ; ///7; int numSym = 7;
int Scale = 13; int Scale = 13;
int NRE=4096; int NRE=4096;
int ShiftFactor[] = {7,1,0,0,0,0,0,0,0,0,0,0}; int ShiftFactor[] = {7,1,0,0,0,0,0,0,0,0,0,0};
int NumCB = 2; int NumCB = 2;
CfgAgcShift[0] = 1;
for(int i=0;i<NumCB;i++){ for(int i=0;i<NumCB;i++){
@ -83,6 +84,28 @@ void ChannelEquImpl(
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 24, *channelEst_dm0_ptr);
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 25, *(channelEst_dm0_ptr+1));
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 26, *(channelEst_dm0_ptr+2));
// TRACE(TRACE_RECEIVER_SYMB_ADDR, 27, *(channelEst_dm0_ptr+3));
ape_csu_task_lookup(DMA_TAG_G2L, 1);
AgcShiftForFftInt32(
(int)CfgAgcShift,
MPU_ADDR(Fft_est_dm3_ptr),
MPU_ADDR(Fft_est_dm3_ptr),
4096,
1,
MPU_ADDR(AgcFactor),
MPU_ADDR(AgcFactor),
MPU_ADDR(channelEst_dm0_ptr),
MPU_ADDR(channelEst_dm0_ptr)
);
SVRReg[0] = MPU_ADDR(CfgAgcShift);
AgcShiftForFftInt32Asm(SVRReg);
WAIT_MPU_STOP;
Fft4096Int32( Fft4096Int32(
(int)CfgFft4096, (int)CfgFft4096,
1, 1,
@ -101,6 +124,22 @@ void ChannelEquImpl(
WAIT_MPU_STOP; WAIT_MPU_STOP;
ape_csu_dma_1D_L2G_ch0ch1_transfer(
(uint64_t)DM_TO_CSU_ADDR(Fft_est_dm3_ptr),
(uint64_t)0x84c00000,
4096*4 ,
DMA_TAG_L2G,
1);
//构造第二根天线
ByteCopy((int)CfgByteCopy, MPU_ADDR(channelEst_dm0_ptr),MPU_ADDR(Fft_est_dm3_ptr + 4096),16384);
SVRReg[0] = MPU_ADDR(CfgByteCopy);
ByteCopyAsm(SVRReg);
if(i==1){
InData_ddr_ptr = InData_ddr_ptr + 7*(68+4096) + 1024 + 72;
}
ape_csu_dma_1D_L2G_ch0ch1_transfer( ape_csu_dma_1D_L2G_ch0ch1_transfer(
(uint64_t)DM_TO_CSU_ADDR(Fft_est_dm3_ptr), (uint64_t)DM_TO_CSU_ADDR(Fft_est_dm3_ptr),
(uint64_t)0x84c00000, (uint64_t)0x84c00000,
@ -121,6 +160,42 @@ void ChannelEquImpl(
int *Fft_outputdata_dm3_ptr = Fft_est_dm3_ptr + 0x2000; int *Fft_outputdata_dm3_ptr = Fft_est_dm3_ptr + 0x2000;
int *InData_dm0_ptr = channelEst_dm0_ptr + 0x2000; int *InData_dm0_ptr = channelEst_dm0_ptr + 0x2000;
int *Fft_outputdata_dm3_ptr = Fft_est_dm3_ptr + 0x2000;
int *InData_dm0_ptr = channelEst_dm0_ptr + 0x2000;
ape_csu_task_lookup(DMA_TAG_G2L, 1);
ape_csu_dma_1D_G2L_ch0ch1_transfer(
(uint64_t)(InData_ddr_ptr + 68) ,
(uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr),
4096*4,
DMA_TAG_G2L,
1);
WAIT_MPU_STOP;
ape_csu_task_lookup(DMA_TAG_G2L, 1);
for(int j=0;j<numSym;j++){
AgcShiftForFftInt32(
(int)CfgAgcShift,
MPU_ADDR(Fft_outputdata_dm3_ptr),
MPU_ADDR(Fft_outputdata_dm3_ptr),
4096,
1,
MPU_ADDR(AgcFactor),
MPU_ADDR(AgcFactor),
MPU_ADDR(InData_dm0_ptr),
MPU_ADDR(InData_dm0_ptr)
);
SVRReg[0] = MPU_ADDR(CfgAgcShift);
AgcShiftForFftInt32Asm(SVRReg);
WAIT_MPU_STOP;
TRACE(TRACE_RECEIVER_SYMB_ADDR, 12, *Fft_outputdata_dm3_ptr);
TRACE(TRACE_RECEIVER_SYMB_ADDR, 13, *(Fft_outputdata_dm3_ptr+1));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 14, *InData_dm0_ptr);
TRACE(TRACE_RECEIVER_SYMB_ADDR, 15, *(InData_dm0_ptr+1));
ape_csu_task_lookup(DMA_TAG_G2L, 1); ape_csu_task_lookup(DMA_TAG_G2L, 1);
ape_csu_dma_1D_G2L_ch0ch1_transfer( ape_csu_dma_1D_G2L_ch0ch1_transfer(
@ -175,6 +250,15 @@ void ChannelEquImpl(
WAIT_MPU_STOP; WAIT_MPU_STOP;
ape_csu_dma_1D_L2G_ch0ch1_transfer(
(uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr),
(uint64_t)0x84d00000,
4096*4 ,
DMA_TAG_L2G,
1);
ape_csu_dma_1D_L2G_ch0ch1_transfer( ape_csu_dma_1D_L2G_ch0ch1_transfer(
(uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr), (uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr),
(uint64_t)0x84d00000, (uint64_t)0x84d00000,
@ -248,6 +332,27 @@ void ChannelEquImpl(
/****************************** IFFT ****************************************8*/
int *Temp1 = Fft_outputdata_dm3_ptr + 0x1000; // 缓存
TRACE(TRACE_RECEIVER_SYMB_ADDR, 16, *Equ_Output_2);
TRACE(TRACE_RECEIVER_SYMB_ADDR, 17, *(Equ_Output_2+1));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 18, *(Equ_Output_2+2));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 19, *(Equ_Output_2+3));
//提前准备下一块数据
if(j<numSym-1){
ape_csu_task_lookup(DMA_TAG_G2L, 1);
ape_csu_dma_1D_G2L_ch0ch1_transfer((uint64_t)(InData_ddr_ptr + (68+4096)*(j+1) + 68), //(68+4096)*(j+1) + 68)
(uint64_t)DM_TO_CSU_ADDR(Fft_outputdata_dm3_ptr),
4096*4,
DMA_TAG_G2L,
0);
}
/****************************** IFFT ****************************************8*/ /****************************** IFFT ****************************************8*/
int *Temp1 = Fft_outputdata_dm3_ptr + 0x1000; // 缓存 int *Temp1 = Fft_outputdata_dm3_ptr + 0x1000; // 缓存
IFFT4096DataTurn( IFFT4096DataTurn(
@ -264,6 +369,7 @@ void ChannelEquImpl(
WAIT_MPU_STOP; WAIT_MPU_STOP;
int *Temp0 = available_ptr_dm2; // buff, Equ_Output_2 int *Temp0 = available_ptr_dm2; // buff, Equ_Output_2
IFFT4096( IFFT4096(
(int)CfgIFFT4096, (int)CfgIFFT4096,
@ -301,6 +407,12 @@ void ChannelEquImpl(
TRACE(TRACE_RECEIVER_SYMB_ADDR, 20, *(Equ_Output_2)); TRACE(TRACE_RECEIVER_SYMB_ADDR, 20, *(Equ_Output_2));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 21, *(Equ_Output_2+1)); TRACE(TRACE_RECEIVER_SYMB_ADDR, 21, *(Equ_Output_2+1));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 22, *(Equ_Output_2+2)); TRACE(TRACE_RECEIVER_SYMB_ADDR, 22, *(Equ_Output_2+2));
SVRReg[0] = MPU_ADDR(ConfigAddCp);
AddCPAsm(SVRReg);
WAIT_MPU_STOP;
TRACE(TRACE_RECEIVER_SYMB_ADDR, 20, *(Equ_Output_2));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 21, *(Equ_Output_2+1));
TRACE(TRACE_RECEIVER_SYMB_ADDR, 22, *(Equ_Output_2+2));
ape_csu_task_lookup(DMA_TAG_G2L, 1); ape_csu_task_lookup(DMA_TAG_G2L, 1);
ape_csu_dma_1D_L2G_ch0ch1_transfer( ape_csu_dma_1D_L2G_ch0ch1_transfer(

View File

@ -38,7 +38,7 @@ void Receiver_Symb_Proc(
//data读入 //data读入
//获取源数据地址 //获取源数据地址
receiver_sync2symb_t* para_dm_ptr = param_ptr; receiver_sync2symb_t* para_dm_ptr = param_ptr;
//TODO: 计算完成结果需要存到下面两个buffer地址中的一个 //TODO: 计算完成结果需要存到下面两个buffer地址中的一个
uint32_t cur_out_ddr_ptr = (0 == g_symb2bit_buffer_sel) ? ((uint32_t)RECEIVER_SYMB2BIT_BUFFER0_ADDR) : ((uint32_t)RECEIVER_SYMB2BIT_BUFFER1_ADDR); uint32_t cur_out_ddr_ptr = (0 == g_symb2bit_buffer_sel) ? ((uint32_t)RECEIVER_SYMB2BIT_BUFFER0_ADDR) : ((uint32_t)RECEIVER_SYMB2BIT_BUFFER1_ADDR);
//LOG_ERROR_S("%d %d %d %d 0x%08x 0x%08x %d %d\n",para_dm_ptr->sfn, para_dm_ptr->slot, para_dm_ptr->num_data_section, //LOG_ERROR_S("%d %d %d %d 0x%08x 0x%08x %d %d\n",para_dm_ptr->sfn, para_dm_ptr->slot, para_dm_ptr->num_data_section,
@ -108,32 +108,18 @@ void Receiver_Symb_Proc(
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
// printf("DataTrans"); printf("DataTrans");
// #endif #endif
//return ;
return ;
//7.核间消息to APE2 //7.核间消息to APE2
//需要定义结构体 //需要定义结构体
receiver_symb2bit_t data_send2bit_task;
//更新buffer
g_symb2bit_buffer_sel = (g_symb2bit_buffer_sel + 1) & 0x1;
data_send2bit_task.proc_id = para_dm_ptr->proc_id;
data_send2bit_task.sfn = para_dm_ptr->sfn;
data_send2bit_task.slot = para_dm_ptr->slot;
data_send2bit_task.data_ptr = cur_out_ddr_ptr;
data_send2bit_task.data_length = 57344;//TODO:待确认单位WORD
//LOG_ERROR_S("%d 0x%08x %d\n",data_send2bit_task.proc_id, data_send2bit_task.data_ptr, g_symb2bit_buffer_sel);
#ifdef CORE_ODD
uint8_t cur_core_id = APE3_CORE_ID;
#else
uint8_t cur_core_id = APE5_CORE_ID;
#endif
phy_et_msg_send((uint32_t)(&data_send2bit_task), phy_et_msg_send((uint32_t)(&data_send2bit_task),
sizeof(receiver_symb2bit_t), sizeof(receiver_symb2bit_t),
UCP4008_KERNEL_INTER, UCP4008_KERNEL_INTER,
cur_core_id, APE5_CORE_ID,
APE6_CORE_ID, APE6_CORE_ID,
PHY_TASK_RECEIVER_SYMB, PHY_TASK_RECEIVER_SYMB,
PHY_TASK_RECEIVER_BIT); PHY_TASK_RECEIVER_BIT);

View File

@ -45,10 +45,15 @@ freOffEstAsm:
IMA0: ReadMR(L) -> IMA0.T0; // real IMA0: ReadMR(L) -> IMA0.T0; // real
IMA0: ReadMR(H) -> IMA1.T0; // imag IMA0: ReadMR(H) -> IMA1.T0; // imag
NOP;NOP;NOP;NOP; NOP;NOP;NOP;NOP;
IMA0: T0 >> 12(W) -> IMA0.T0 || IMA1: T0 >> 12(W) -> IMA1.T0; IMA0: T0 >> 12(W) -> IMA0.T0 || IMA1: T0 >> 12(W) -> IMA1.T0;
NOP;NOP; NOP;NOP;
IMA0: RAdd(T0)(W)(SlipMode1) -> SHU0.T2; IMA0: RAdd(T0)(W)(SlipMode1) -> SHU0.T2;
NOP;
NOP;
NOP;
NOP;
IMA1: RAdd(T0)(W)(SlipMode1) -> SHU1.T2; IMA1: RAdd(T0)(W)(SlipMode1) -> SHU1.T2;
SHU1: VImm(0) -> SHU1.T0; SHU1: VImm(0) -> SHU1.T0;
IMA0: V(0) -> IMA0.T1; IMA0: V(0) -> IMA0.T1;
@ -56,7 +61,8 @@ freOffEstAsm:
SHU0: Index(T2,T6) -> IMA3.T1; SHU0: Index(T2,T6) -> IMA3.T1;
SHU1: Index(T2,T6) -> IMA3.T0; SHU1: Index(T2,T6) -> IMA3.T0;
NOP;NOP; NOP;NOP;NOP;NOP;
IMA3: RAdd(T0)(W)(SlipMode1) -> IMA3.T0; IMA3: RAdd(T0)(W)(SlipMode1) -> IMA3.T0;
IMA3: RAdd(T1)(W)(SlipMode1) -> IMA3.T1; IMA3: RAdd(T1)(W)(SlipMode1) -> IMA3.T1;
@ -66,8 +72,8 @@ freOffEstAsm:
IMA3: T1 -> IMA2.T1; IMA3: T1 -> IMA2.T1;
MFetch: REPEAT @(5); MFetch: REPEAT @(5);
//CORDIC ATAN2
//CORDIC ATAN2
Mfetch: Lpto %ENDCORDIC @(KI1); Mfetch: Lpto %ENDCORDIC @(KI1);
IMA3: T0>>8(W) -> M[19]; IMA3: T0>>8(W) -> M[19];
@ -78,10 +84,11 @@ freOffEstAsm:
NOP;NOP;NOP;NOP; NOP;NOP;NOP;NOP;
IMA3: T1 >> T4(W) -> IMA3.T2; IMA3: T1 >> T4(W) -> IMA3.T2;
IMA3: T0 >> T4(W) -> IMA3.T3; IMA3: T0 >> T4(W) -> IMA3.T3;
NOP; NOP;NOP;NOP;NOP;NOP;NOP;NOP;
MFetch: IF(KI3>=KI11) JUMP %IFFI; MFetch: IF(KI3>=KI11) JUMP %IFFI;
//IMA1: 0 -> T0;
IMA3: 0 - T2(W) -> IMA3.T2; IMA3: 0 - T2(W) -> IMA3.T2;
IMA0: 0 - T0(W) -> IMA0.T0; IMA0: 0 - T0(W) -> IMA0.T0;
IMA3: 0 - T3(W) -> IMA3.T3; IMA3: 0 - T3(W) -> IMA3.T3;
@ -96,13 +103,11 @@ freOffEstAsm:
ENDCORDIC: ENDCORDIC:
MFetch: REPEAT @(10); MFetch: REPEAT @(10);
IMA0: T1 -> BIU2.T0(Mode0); IMA0: T1 -> BIU2.T0(Mode0);
NOP;NOP;NOP;NOP; NOP;NOP;NOP;NOP;
BIU2: Store(T0,T1)(A++); BIU2: Store(T0,T1)(A++);
MFetch: REPEAT @(15);
MFetch:MPU.STOP; MFetch:MPU.STOP;