1. fix UCP4008-SL feature enhancement #1854;

2. delete tx/rx slot int on ecs_rfm1 for jesd version;
3. modify sfn updating algorithm for jesd version;
4. optimize jesd gpio on/off code;
5. test case: case24/34/44/45/41/42.
This commit is contained in:
xinxin.li 2024-04-20 17:09:54 +08:00
parent 5a8c48bf7a
commit 9cc9b0b094
6 changed files with 138 additions and 50 deletions

View File

@ -40,8 +40,18 @@ typedef struct _tagGpioInfo
uint8_t vaFlag; // 0: low as valid; 1: high as valid uint8_t vaFlag; // 0: low as valid; 1: high as valid
}stGpioInfo; }stGpioInfo;
typedef struct _tagRfGpioInfo
{
uint32_t pinInfo; // 1 bit 1 pin
uint32_t validInfo; // 0: low as valid; 1: high as valid
}stRfGpioInfo;
typedef struct _tagGpioJesd typedef struct _tagGpioJesd
{ {
stRfGpioInfo txRfGpioInfo[JESD_RF_CH_NUM];
stRfGpioInfo rxRfGpioInfo[JESD_RF_CH_NUM];
stRfGpioInfo orxRfGpioInfo[JESD_RF_CH_NUM];
stGpioInfo txTransGpioInfo[JESD_RF_CH_NUM]; stGpioInfo txTransGpioInfo[JESD_RF_CH_NUM];
stGpioInfo txGpioInfo[JESD_RF_CH_NUM]; stGpioInfo txGpioInfo[JESD_RF_CH_NUM];
stGpioInfo txAntGpioInfo[JESD_RF_CH_NUM]; stGpioInfo txAntGpioInfo[JESD_RF_CH_NUM];
@ -63,6 +73,8 @@ int32_t hw_gpio_init();
int32_t set_jesd_rf_state(uint8_t nTRCh, uint8_t nState); int32_t set_jesd_rf_state(uint8_t nTRCh, uint8_t nState);
int32_t set_jesd_all_rf_state(uint8_t nTRCh, uint8_t nState); // tx, rx, orx
int32_t set_trigger_state(uint8_t nState); int32_t set_trigger_state(uint8_t nState);
#if 0 #if 0

View File

@ -144,9 +144,9 @@ void cpri_timer_reconfig(phy_timer_config_ind_t *my_cpritmr)
pCpriDelay->cpriTddOffset = pCpriDelay->cpri10msOffset + EDMA_OFFSET; pCpriDelay->cpriTddOffset = pCpriDelay->cpri10msOffset + EDMA_OFFSET;
do_write(CPRI_DELAY_ADDR, pCpriDelay->cpri10msRxOffset);
do_write(CPRI_ADVANCE_ADDR, pCpriDelay->cpri10msOffset); do_write(CPRI_ADVANCE_ADDR, pCpriDelay->cpri10msOffset);
do_write(CPRI_TDD_ADVANCE_ADDR, pCpriDelay->cpriTddOffset); do_write(CPRI_TDD_ADVANCE_ADDR, pCpriDelay->cpriTddOffset);
do_write(CPRI_DELAY_ADDR, pCpriDelay->cpri10msRxOffset);
uint32_t addr = (uint32_t)&(phyPara[my_cpritmr->scsId].gpsOffset); uint32_t addr = (uint32_t)&(phyPara[my_cpritmr->scsId].gpsOffset);
uint16_t gpsOffset = do_read_volatile_short(addr); uint16_t gpsOffset = do_read_volatile_short(addr);
@ -178,7 +178,7 @@ void cpri_timer_reconfig(phy_timer_config_ind_t *my_cpritmr)
do_write(CPRI_RX_ADVANCE_PP1S_ADDR, pCpriDelay->cpri10ms2PP1sRxOffset); do_write(CPRI_RX_ADVANCE_PP1S_ADDR, pCpriDelay->cpri10ms2PP1sRxOffset);
do_write(CPRI_TDD_ADVANCE_PP1S_ADDR, pCpriDelay->cpriTdd2PP1sOffset); do_write(CPRI_TDD_ADVANCE_PP1S_ADDR, pCpriDelay->cpriTdd2PP1sOffset);
enable_mtimer_cevent_int(MTIMER_CPRI_ID, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int //enable_mtimer_cevent_int(MTIMER_CPRI_ID, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int
#ifdef PALLADIUM_TEST #ifdef PALLADIUM_TEST
flag++; flag++;
debug_write((DBG_DDR_IDX_DRV_BASE+3+(apeId<<2)), flag); debug_write((DBG_DDR_IDX_DRV_BASE+3+(apeId<<2)), flag);
@ -339,6 +339,7 @@ void cpri_timer_rcfg_act()
} }
reCfgFlag = 5; reCfgFlag = 5;
disable_mtimer_cevent_int(MTIMER_CPRI_ID, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // disable 10ms int
debug_write((DBG_DDR_IDX_DRV_BASE+916), pMtimerSfn->txSfnNum); // 0xE50 debug_write((DBG_DDR_IDX_DRV_BASE+916), pMtimerSfn->txSfnNum); // 0xE50
debug_write((DBG_DDR_IDX_DRV_BASE+917), GET_STC_CNT()); // 0xE54 debug_write((DBG_DDR_IDX_DRV_BASE+917), GET_STC_CNT()); // 0xE54
} }
@ -551,15 +552,15 @@ int32_t set_cpri_ape_slot_offset(uint32_t apeCoreId)
volatile uint32_t h1Pos = 0; volatile uint32_t h1Pos = 0;
uint8_t apeId = 0; uint8_t apeId = 0;
int32_t tmrId = 0; int32_t tmrId = 0;
//#ifdef INTEGRATED_BS
//#else
EcsRfmDmLocalMgt_t* pEcsDmLocalMgt = get_ecs_rfm_dm_local_mgt(); EcsRfmDmLocalMgt_t* pEcsDmLocalMgt = get_ecs_rfm_dm_local_mgt();
stMtimerPara* pMtimerPara = pEcsDmLocalMgt->pMtimerPara[MTIMER_CPRI_ID]; stMtimerPara* pMtimerPara = pEcsDmLocalMgt->pMtimerPara[MTIMER_CPRI_ID];
stMtimerPhyPara* pMtimerSfn = &gMtimerSfnNum[MTIMER_CPRI_ID]; stMtimerPhyPara* pMtimerSfn = &gMtimerSfnNum[MTIMER_CPRI_ID];
pMtimerPara->runCoreId = apeCoreId; pMtimerPara->runCoreId = apeCoreId;
txOffset = pEcsDmLocalMgt->pCpriDelay->cpri10ms2PP1sTxOffset; // pEcsDmLocalMgt->pCpriDelay->cpri10msOffset; txOffset = pEcsDmLocalMgt->pCpriDelay->cpri10ms2PP1sTxOffset; // pEcsDmLocalMgt->pCpriDelay->cpri10msOffset;
rxOffset = pEcsDmLocalMgt->pCpriDelay->cpri10ms2PP1sRxOffset; // pEcsDmLocalMgt->pCpriDelay->cpri10msRxOffset; rxOffset = pEcsDmLocalMgt->pCpriDelay->cpri10ms2PP1sRxOffset; // pEcsDmLocalMgt->pCpriDelay->cpri10msRxOffset;
//#endif
enable_mtimer_cevent_int(MTIMER_CPRI_ID, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int
uint32_t tmr3Point = SFN_PERIOD*1000 - txOffset; // us uint32_t tmr3Point = SFN_PERIOD*1000 - txOffset; // us
uint32_t tmr4Point = 0; // offset; // us uint32_t tmr4Point = 0; // offset; // us
@ -574,7 +575,6 @@ int32_t set_cpri_ape_slot_offset(uint32_t apeCoreId)
// ape tmrpoints // ape tmrpoints
h1Pos = __builtin_clz(runCore); // 从高bit开始第一个1前面的0的个数 h1Pos = __builtin_clz(runCore); // 从高bit开始第一个1前面的0的个数
__ucps2_synch(0);
while (32 > h1Pos) while (32 > h1Pos)
{ {
apeId = 31 - h1Pos; apeId = 31 - h1Pos;
@ -593,7 +593,6 @@ int32_t set_cpri_ape_slot_offset(uint32_t apeCoreId)
runCore &= (~(1 << apeId)); runCore &= (~(1 << apeId));
h1Pos = __builtin_clz(runCore); h1Pos = __builtin_clz(runCore);
__ucps2_synch(0);
} }
reCfgFlag = 4; reCfgFlag = 4;
@ -612,7 +611,6 @@ int32_t clear_cpri_ape_slot_offset(uint32_t apeCoreId)
// ape tmrpoints // ape tmrpoints
h1Pos = __builtin_clz(runCore); // 从高bit开始第一个1前面的0的个数 h1Pos = __builtin_clz(runCore); // 从高bit开始第一个1前面的0的个数
__ucps2_synch(0);
while (32 > h1Pos) while (32 > h1Pos)
{ {
apeId = 31 - h1Pos; apeId = 31 - h1Pos;
@ -629,7 +627,6 @@ int32_t clear_cpri_ape_slot_offset(uint32_t apeCoreId)
runCore &= (~(1 << apeId)); runCore &= (~(1 << apeId));
h1Pos = __builtin_clz(runCore); h1Pos = __builtin_clz(runCore);
__ucps2_synch(0);
} }
return 0; return 0;

View File

@ -91,7 +91,7 @@ void ecpri_timer_reconfig(phy_timer_config_ind_t *my_ecpritmr)
//set_ecpri_tmr_period(); // set OVF value, every slot int and 10ms int, cevent0/2 for ape0, report link status //set_ecpri_tmr_period(); // set OVF value, every slot int and 10ms int, cevent0/2 for ape0, report link status
//set_ecpri_tdd_offset(); // 5ms int, tevent2 for all ape cores, dma //set_ecpri_tdd_offset(); // 5ms int, tevent2 for all ape cores, dma
enable_mtimer_cevent_int(MTIMER_ECPRI_ID, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int //enable_mtimer_cevent_int(MTIMER_ECPRI_ID, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int
set_ecpri_tx_slot_offset(); set_ecpri_tx_slot_offset();
set_ecpri_rx_slot_offset(); set_ecpri_rx_slot_offset();
@ -140,8 +140,9 @@ void ecpri_timer_rcfg_act()
if ((0 == pMtimerSfn->slotNumPP1s) && (runCore == cellCore)) // no frame header offset, and the first cell if ((0 == pMtimerSfn->slotNumPP1s) && (runCore == cellCore)) // no frame header offset, and the first cell
{ {
pMtimerSfn->txSfnNum++;
pMtimerSfn->txSfnNum &= 0x3FF;
pMtimerSfn->rxSfnNum = pMtimerSfn->txSfnNum; pMtimerSfn->rxSfnNum = pMtimerSfn->txSfnNum;
//pMtimerSfn->rxSlotNum = pMtimerSfn->slotMaxNum - 1;
} }
addr = (uint32_t)&(phyPara[nScsId].txSfnNum); addr = (uint32_t)&(phyPara[nScsId].txSfnNum);
do_write(addr, pMtimerSfn->txSfnNum); do_write(addr, pMtimerSfn->txSfnNum);
@ -180,6 +181,7 @@ void ecpri_timer_rcfg_act()
} }
reCfgFlag = 5; reCfgFlag = 5;
disable_mtimer_cevent_int(MTIMER_ECPRI_ID, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // disable 10ms int
} }
void ecpri_1pps_src_init(uint8_t srcId) void ecpri_1pps_src_init(uint8_t srcId)
@ -305,9 +307,10 @@ int32_t set_ecpri_ape_slot_offset(uint32_t apeCoreId)
EcsRfmDmLocalMgt_t* pEcsDmLocalMgt = get_ecs_rfm_dm_local_mgt(); EcsRfmDmLocalMgt_t* pEcsDmLocalMgt = get_ecs_rfm_dm_local_mgt();
txOffset = pEcsDmLocalMgt->pCpriDelay->cpri10ms2PP1sTxOffset; // pEcsDmLocalMgt->pCpriDelay->cpri10msOffset; txOffset = pEcsDmLocalMgt->pCpriDelay->cpri10ms2PP1sTxOffset; // pEcsDmLocalMgt->pCpriDelay->cpri10msOffset;
rxOffset = pEcsDmLocalMgt->pCpriDelay->cpri10ms2PP1sRxOffset; // pEcsDmLocalMgt->pCpriDelay->cpri10msRxOffset; rxOffset = pEcsDmLocalMgt->pCpriDelay->cpri10ms2PP1sRxOffset; // pEcsDmLocalMgt->pCpriDelay->cpri10msRxOffset;
enable_mtimer_cevent_int(MTIMER_ECPRI_ID, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int
} }
uint32_t tmr3Point = SFN_PERIOD - txOffset; // us uint32_t tmr3Point = SFN_PERIOD*1000 - txOffset; // us
uint32_t tmr4Point = 0; // offset; // us uint32_t tmr4Point = 0; // offset; // us
if (rxOffset < 0) if (rxOffset < 0)
{ {
@ -315,12 +318,11 @@ int32_t set_ecpri_ape_slot_offset(uint32_t apeCoreId)
} }
else else
{ {
tmr4Point = SFN_PERIOD - rxOffset; // us tmr4Point = SFN_PERIOD*1000 - rxOffset; // us
} }
// ape tmrpoints // ape tmrpoints
h1Pos = __builtin_clz(runCore); // 从高bit开始第一个1前面的0的个数 h1Pos = __builtin_clz(runCore); // 从高bit开始第一个1前面的0的个数
__ucps2_synch(0);
while (32 > h1Pos) while (32 > h1Pos)
{ {
apeId = 31 - h1Pos; apeId = 31 - h1Pos;
@ -330,16 +332,15 @@ int32_t set_ecpri_ape_slot_offset(uint32_t apeCoreId)
} }
// tx slot int // tx slot int
tmrId = MTMR_APE0_TXSLOT + (apeId<<1); tmrId = MTMR_APE0_TXSLOT + (apeId<<1);
set_mtimer_tmrpoint(MTIMER_ECPRI_ID, tmrId, tmr3Point, MTIMER_MASK_32BIT); set_mtimer_tmrpoint_ns(MTIMER_ECPRI_ID, tmrId, tmr3Point, MTIMER_MASK_32BIT);
enable_mtimer_tmrpoint_int(MTIMER_ECPRI_ID, tmrId, (MTMR_INT_APE0_SLOT+apeId)); enable_mtimer_tmrpoint_int(MTIMER_ECPRI_ID, tmrId, (MTMR_INT_APE0_SLOT+apeId));
// rx slot int // rx slot int
tmrId = MTMR_APE0_RXSLOT + (apeId<<1); tmrId = MTMR_APE0_RXSLOT + (apeId<<1);
set_mtimer_tmrpoint(MTIMER_ECPRI_ID, tmrId, tmr4Point, MTIMER_MASK_32BIT); set_mtimer_tmrpoint_ns(MTIMER_ECPRI_ID, tmrId, tmr4Point, MTIMER_MASK_32BIT);
enable_mtimer_tmrpoint_int(MTIMER_ECPRI_ID, tmrId, (MTMR_INT_APE0_SLOT+apeId)); enable_mtimer_tmrpoint_int(MTIMER_ECPRI_ID, tmrId, (MTMR_INT_APE0_SLOT+apeId));
runCore &= (~(1 << apeId)); runCore &= (~(1 << apeId));
h1Pos = __builtin_clz(runCore); h1Pos = __builtin_clz(runCore);
__ucps2_synch(0);
} }
reCfgFlag = 4; reCfgFlag = 4;
@ -356,7 +357,6 @@ int32_t clear_ecpri_ape_slot_offset(uint32_t apeCoreId)
// ape tmrpoints // ape tmrpoints
h1Pos = __builtin_clz(runCore); // 从高bit开始第一个1前面的0的个数 h1Pos = __builtin_clz(runCore); // 从高bit开始第一个1前面的0的个数
__ucps2_synch(0);
while (32 > h1Pos) while (32 > h1Pos)
{ {
apeId = 31 - h1Pos; apeId = 31 - h1Pos;
@ -373,7 +373,6 @@ int32_t clear_ecpri_ape_slot_offset(uint32_t apeCoreId)
runCore &= (~(1 << apeId)); runCore &= (~(1 << apeId));
h1Pos = __builtin_clz(runCore); h1Pos = __builtin_clz(runCore);
__ucps2_synch(0);
} }
return 0; return 0;
@ -386,8 +385,8 @@ int32_t set_ecpri_tx_symbol_offset(uint8_t symbolId)
return -1; return -1;
} }
uint32_t longCp = (uint32_t)4448*500000/(4448+4384); // ns uint32_t longCp = (uint32_t)4448*500000/(4448+13*4384); // ns
uint32_t shortCp = (uint32_t)4384*500000/(4448+4384); // ns uint32_t shortCp = (uint32_t)4384*500000/(4448+13*4384); // ns
uint32_t tmrPoint = SFN_PERIOD*1000 - CPRI_INT_DELAY; uint32_t tmrPoint = SFN_PERIOD*1000 - CPRI_INT_DELAY;
if (1 >= symbolId) if (1 >= symbolId)

View File

@ -52,6 +52,26 @@ int32_t hw_gpio_init()
} }
} }
stRfGpioInfo* pRfGpio = NULL;
uint32_t pinNum = 0;
uint32_t pinValid = 0;
for (i = 0; i < JESD_GPIOGROUP_NUM; i++) // tx, rx, orx, trans_tx, trans_rx, trans_orx
{
for (j = 0; j < JESD_RF_CH_NUM; j++)
{
pRfGpio = pGpioInfo->jesdGpioInfo.txRfGpioInfo + ((i/3)*JESD_RF_CH_NUM+j); //*sizeof(stRfGpioInfo);
pinNum = do_read_volatile(GPIO_JESD_RF_BIT + (i<<5) + (j<<2));
pRfGpio->pinInfo |= pinNum;
pinValid = do_read_volatile(GPIO_JESD_RF_VALID + (i<<5) + (j<<2));
pRfGpio->validInfo |= pinValid;
__ucps2_synch(0);
do_write((0x0A4F4000+((i*4+j)<<2)), (uint32_t)(&(pRfGpio->pinInfo)));
do_write((0x0A4F4100+((i*4+j)<<2)), (pRfGpio->pinInfo));
do_write((0x0A4F4200+((i*4+j)<<2)), (GPIO_JESD_RF_BIT + (i<<5) + (j<<2)));
do_write((0x0A4F4300+((i*4+j)<<2)), (pinNum));
}
}
k = 0; k = 0;
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
{ {
@ -136,6 +156,41 @@ int32_t set_jesd_rf_state(uint8_t nTRCh, uint8_t nState)
return 0; return 0;
} }
int32_t set_jesd_all_rf_state(uint8_t nTRCh, uint8_t nState) // tx, rx, orx
{
EcsRfmDmLocalMgt_t* pEcsDmLocalMgt = get_ecs_rfm_dm_local_mgt();
stGpioOnBoard* pGpioInfo = pEcsDmLocalMgt->pGpioInfo;
uint32_t regData = 0;
uint32_t tempData = 0;
uint32_t gpioVal = 0;
stRfGpioInfo* pRfGpio = pGpioInfo->jesdGpioInfo.txRfGpioInfo + nTRCh*JESD_RF_CH_NUM; //*sizeof(stRfGpioInfo);
for (uint8_t i = 0; i < JESD_RF_CH_NUM; i++) // 128pin, 4 group
{
regData = do_read_volatile(gGpioDataAddr[i]);
tempData = regData & (~pRfGpio[i].pinInfo);
if (GPIO_ON == nState)
{
gpioVal = pRfGpio[i].pinInfo & pRfGpio[i].validInfo;
}
else if (GPIO_OFF == nState)
{
gpioVal = pRfGpio[i].pinInfo ^ pRfGpio[i].validInfo;
}
else
{
return -1;
}
regData = tempData | gpioVal;
do_write(gGpioDataAddr[i], regData);
}
return 0;
}
int32_t set_trigger_state(uint8_t nState) int32_t set_trigger_state(uint8_t nState)
{ {
if ((GPIO_ON != nState) && (GPIO_OFF != nState)) if ((GPIO_ON != nState) && (GPIO_OFF != nState))

View File

@ -42,7 +42,7 @@ int32_t jesd_orx_timer_init(void)
jesd_orx_1pps_src_init(MTIMER_PP1S_SRC_TOD); jesd_orx_1pps_src_init(MTIMER_PP1S_SRC_TOD);
//mtimer_clear_all_event(MTIMER_JESD_RX1_ID); //mtimer_clear_all_event(MTIMER_JESD_RX1_ID);
set_jesd_orx_tmr_period(); set_jesd_orx_tmr_period();
set_jesd_orx_1pps_scratch(); //set_jesd_orx_1pps_scratch();
//set_jesd_orx_tmr_point(25000); // 25ms //set_jesd_orx_tmr_point(25000); // 25ms
jesd_orx_pin_ctrl(); jesd_orx_pin_ctrl();

View File

@ -27,7 +27,7 @@
#endif #endif
extern stPhyScsPara* phyPara; extern stPhyScsPara* phyPara;
extern stSfnPara gCellSfnPara[2]; //extern stSfnPara gCellSfnPara[2];
extern uint32_t gScsId; extern uint32_t gScsId;
uint32_t gJesdTestMode = 0; uint32_t gJesdTestMode = 0;
@ -401,8 +401,9 @@ int32_t jesd_timer_reconfig(int32_t nTmrId, phy_timer_config_ind_t *my_jesdtmr)
uint16_t gpsOffset = do_read_volatile_short(addr); uint16_t gpsOffset = do_read_volatile_short(addr);
pJesdDelay->gps_offset = gpsOffset; pJesdDelay->gps_offset = gpsOffset;
pJesdDelay->tx_offset = pMtimerInt->tmrPP1sCost * 2; pJesdDelay->tx_offset = pMtimerInt->tmrPP1sCost * 5;
pJesdDelay->rx_offset = pMtimerInt->tmrPP1sCost * 2; pJesdDelay->rx_offset = pMtimerInt->tmrPP1sCost * 5;
pJesdDelay->tdd_offset = pMtimerInt->tmrPP1sCost * 5 + EDMA_OFFSET;
do_write(CPRI_ADVANCE_ADDR, pJesdDelay->tx_offset); do_write(CPRI_ADVANCE_ADDR, pJesdDelay->tx_offset);
do_write(CPRI_DELAY_ADDR, pJesdDelay->rx_offset); do_write(CPRI_DELAY_ADDR, pJesdDelay->rx_offset);
@ -469,7 +470,7 @@ int32_t jesd_timer_reconfig(int32_t nTmrId, phy_timer_config_ind_t *my_jesdtmr)
pMtimerTxPara->tempM_max = pMtimerPara->tddSlotNum-1; pMtimerTxPara->tempM_max = pMtimerPara->tddSlotNum-1;
pMtimerTxPara->tempH_max = SFN_PERIOD / pMtimerPara->slotPeriod / pMtimerPara->tddSlotNum - 1; pMtimerTxPara->tempH_max = SFN_PERIOD / pMtimerPara->slotPeriod / pMtimerPara->tddSlotNum - 1;
enable_mtimer_cevent_int(nTmrId, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int //enable_mtimer_cevent_int(nTmrId, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int
#ifdef PALLADIUM_TEST #ifdef PALLADIUM_TEST
flag++; flag++;
debug_write((DBG_DDR_IDX_DRV_BASE+3+(apeId<<2)), flag); // 0xBC debug_write((DBG_DDR_IDX_DRV_BASE+3+(apeId<<2)), flag); // 0xBC
@ -481,8 +482,8 @@ int32_t jesd_timer_reconfig(int32_t nTmrId, phy_timer_config_ind_t *my_jesdtmr)
debug_write((DBG_DDR_IDX_DRV_BASE+3+(apeId<<2)), flag); // 0xBC debug_write((DBG_DDR_IDX_DRV_BASE+3+(apeId<<2)), flag); // 0xBC
#endif #endif
set_jesd_tx_slot_offset(nTmrId); //set_jesd_tx_slot_offset(nTmrId);
set_jesd_rx_slot_offset(nTmrId); //set_jesd_rx_slot_offset(nTmrId);
#ifdef PALLADIUM_TEST #ifdef PALLADIUM_TEST
flag++; flag++;
debug_write((DBG_DDR_IDX_DRV_BASE+3+(apeId<<2)), flag); // 0xBC debug_write((DBG_DDR_IDX_DRV_BASE+3+(apeId<<2)), flag); // 0xBC
@ -584,10 +585,11 @@ void jesd_timer_rcfg_act(int32_t nTmrId)
//pMtimerSfn->rxSfnNum = 0; // 1023; //pMtimerSfn->rxSfnNum = 0; // 1023;
pMtimerSfn->rxSlotNum = pMtimerSfn->slotNumPP1s; // 0 // pMtimerSfn->slotMaxNum - 1; pMtimerSfn->rxSlotNum = pMtimerSfn->slotNumPP1s; // 0 // pMtimerSfn->slotMaxNum - 1;
if ((0 == pMtimerSfn->slotNumPP1s) && (runCore == cellCore)) // no frame header offset, and the first cell //if ((0 == pMtimerSfn->slotNumPP1s) && (runCore == cellCore)) // no frame header offset, and the first cell
if (0 == pMtimerSfn->slotNumPP1s) // no frame header offset, and the first cell
{ {
pMtimerSfn->txSfnNum++; //pMtimerSfn->txSfnNum++;
pMtimerSfn->txSfnNum &= 0x3FF; //pMtimerSfn->txSfnNum &= 0x3FF;
pMtimerSfn->rxSfnNum = pMtimerSfn->txSfnNum; pMtimerSfn->rxSfnNum = pMtimerSfn->txSfnNum;
//pMtimerSfn->rxSlotNum = pMtimerSfn->slotMaxNum - 1; //pMtimerSfn->rxSlotNum = pMtimerSfn->slotMaxNum - 1;
} }
@ -625,7 +627,8 @@ void jesd_timer_rcfg_act(int32_t nTmrId)
__ucps2_synch(0); __ucps2_synch(0);
} }
reCfgFlag = 5; reCfgFlag = 0; // 5;
disable_mtimer_cevent_int(nTmrId, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // disable 10ms int
debug_write((DBG_DDR_IDX_DRV_BASE+916), pMtimerSfn->txSfnNum); // 0xE50 debug_write((DBG_DDR_IDX_DRV_BASE+916), pMtimerSfn->txSfnNum); // 0xE50
debug_write((DBG_DDR_IDX_DRV_BASE+917), GET_STC_CNT()); // 0xE54 debug_write((DBG_DDR_IDX_DRV_BASE+917), GET_STC_CNT()); // 0xE54
} }
@ -799,6 +802,8 @@ int32_t set_jesd_ape_slot_offset(int32_t nTmrId, uint32_t apeCoreId)
txOffset = pJesdDelay->jesd_10ms2pp1s_txoffset; txOffset = pJesdDelay->jesd_10ms2pp1s_txoffset;
rxOffset = pJesdDelay->jesd_10ms2pp1s_txoffset; rxOffset = pJesdDelay->jesd_10ms2pp1s_txoffset;
enable_mtimer_cevent_int(nTmrId, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // 10ms int
uint32_t tmr3Point = SFN_PERIOD*1000 - txOffset; // ns uint32_t tmr3Point = SFN_PERIOD*1000 - txOffset; // ns
uint32_t tmr4Point = SFN_PERIOD*1000 - txOffset; // ns uint32_t tmr4Point = SFN_PERIOD*1000 - txOffset; // ns
if (rxOffset < 0) if (rxOffset < 0)
@ -1220,7 +1225,7 @@ uint32_t gRxCsuOnCnt = 0;
uint32_t gRxCsuOffCnt = 0; uint32_t gRxCsuOffCnt = 0;
uint32_t gTxCsuOnCnt = 0; uint32_t gTxCsuOnCnt = 0;
uint32_t gTxCsuOffCnt = 0; uint32_t gTxCsuOffCnt = 0;
//extern int32_t gPP1sLockCnt; uint32_t gPP1sFlag = 0;
void jesd_10ms_callback(uint8_t nTmrId) void jesd_10ms_callback(uint8_t nTmrId)
{ {
uint32_t tmrBaseAddr = JS_RX0_TMR_BASE + nTmrId*0x1000; uint32_t tmrBaseAddr = JS_RX0_TMR_BASE + nTmrId*0x1000;
@ -1257,12 +1262,13 @@ void jesd_10ms_callback(uint8_t nTmrId)
if (MTIMER_JESD_RX0_ID == nTmrId) if (MTIMER_JESD_RX0_ID == nTmrId)
{ {
start_jesd_timer(MTIMER_JESD_TX0_ID); start_jesd_timer(MTIMER_JESD_TX0_ID);
debug_write((DBG_DDR_IDX_DRV_BASE+57), GET_STC_CNT()); //debug_write((DBG_DDR_IDX_DRV_BASE+57), GET_STC_CNT());
} }
pMtimerSfn->txSfnNum = 0; pMtimerSfn->txSfnNum = 0;
pMtimerInt->tmrPP1sCost = GET_STC_CNT(); pMtimerInt->tmrPP1sCost = JESD_INT_DELAY; // GET_STC_CNT();
} }
gPP1sFlag = 1;
debug_write((DBG_DDR_IDX_DRV_BASE+70), GET_STC_CNT()); // 0x118
//if (MTIMER_JESD_RX1_ID == nTmrId) //if (MTIMER_JESD_RX1_ID == nTmrId)
if (MTIMER_JESD_RX0_ID == nTmrId) if (MTIMER_JESD_RX0_ID == nTmrId)
{ {
@ -1280,7 +1286,7 @@ void jesd_10ms_callback(uint8_t nTmrId)
debug_write((DBG_DDR_IDX_DRV_BASE+64+1+(nTmrId<<2)), pMtimerInt->pp1sIntCnt); // 0x104, 0x114 debug_write((DBG_DDR_IDX_DRV_BASE+64+1+(nTmrId<<2)), pMtimerInt->pp1sIntCnt); // 0x104, 0x114
#if 0 //def PALLADIUM_TEST #ifdef PALLADIUM_TEST
uint32_t val = 0; uint32_t val = 0;
for (int32_t core = 0; core < 12; core++) for (int32_t core = 0; core < 12; core++)
{ {
@ -1313,6 +1319,11 @@ void jesd_10ms_callback(uint8_t nTmrId)
} }
#ifdef PALLADIUM_TEST #ifdef PALLADIUM_TEST
debug_write((DBG_DDR_IDX_DRV_BASE+64+3+(nTmrId<<2)), pMtimerInt->sfnOffsetIntCnt); // 0x10C debug_write((DBG_DDR_IDX_DRV_BASE+64+3+(nTmrId<<2)), pMtimerInt->sfnOffsetIntCnt); // 0x10C
if (6 > gPP1sFlag)
{
debug_write((DBG_DDR_IDX_DRV_BASE+51+gPP1sFlag), (GET_STC_CNT() | (1<<30))); // 0xD0
gPP1sFlag++;
}
#endif #endif
if ((MTIMER_JESD_RX0_ID == nTmrId) && (0 == (pMtimerInt->sfnOffsetIntCnt&0x3))) if ((MTIMER_JESD_RX0_ID == nTmrId) && (0 == (pMtimerInt->sfnOffsetIntCnt&0x3)))
{ {
@ -1446,9 +1457,10 @@ void jesd_tdd_callback(uint8_t nTmrId)
gRxOnCnt++; gRxOnCnt++;
debug_write((DBG_DDR_IDX_DRV_BASE+78), gRxOnCnt); // 0x138 debug_write((DBG_DDR_IDX_DRV_BASE+78), gRxOnCnt); // 0x138
set_jesd_rf_state(JESD_ANT_RX, GPIO_ON); set_jesd_all_rf_state(1, GPIO_ON);
set_jesd_rf_state(JESD_RF_RX, GPIO_ON); //set_jesd_rf_state(JESD_ANT_RX, GPIO_ON);
set_jesd_rf_state(JESD_TRANS_RX, GPIO_ON); //set_jesd_rf_state(JESD_RF_RX, GPIO_ON);
//set_jesd_rf_state(JESD_TRANS_RX, GPIO_ON);
uint8_t nListId = 0; uint8_t nListId = 0;
if ((TDD_2500US_DOUBLE == pMtimerPara->frameType) && (pMtimerInt->tddOffsetIntCnt&0x1)) if ((TDD_2500US_DOUBLE == pMtimerPara->frameType) && (pMtimerInt->tddOffsetIntCnt&0x1))
@ -1463,10 +1475,16 @@ void jesd_tdd_callback(uint8_t nTmrId)
do_write(tFlagAddr, (1<<MTMR_CSU_INSERT)); // clear int flag do_write(tFlagAddr, (1<<MTMR_CSU_INSERT)); // clear int flag
gRxOffCnt++; gRxOffCnt++;
debug_write((DBG_DDR_IDX_DRV_BASE+79), gRxOffCnt); // 0x13C debug_write((DBG_DDR_IDX_DRV_BASE+79), gRxOffCnt); // 0x13C
if (6 > gPP1sFlag)
{
debug_write((DBG_DDR_IDX_DRV_BASE+51+gPP1sFlag), (GET_STC_CNT() | (2<<30))); // 0xD0
gPP1sFlag++;
}
set_jesd_rf_state(JESD_ANT_RX, GPIO_OFF); set_jesd_all_rf_state(1, GPIO_OFF);
set_jesd_rf_state(JESD_RF_RX, GPIO_OFF); //set_jesd_rf_state(JESD_ANT_RX, GPIO_OFF);
set_jesd_rf_state(JESD_TRANS_RX, GPIO_OFF); //set_jesd_rf_state(JESD_RF_RX, GPIO_OFF);
//set_jesd_rf_state(JESD_TRANS_RX, GPIO_OFF);
} }
if (tEventFlag & (1<<MTMR_JESD_TXON)) // tx on int if (tEventFlag & (1<<MTMR_JESD_TXON)) // tx on int
{ {
@ -1474,13 +1492,19 @@ void jesd_tdd_callback(uint8_t nTmrId)
do_write(tFlagAddr, (1<<MTMR_JESD_TXON)); // clear int flag do_write(tFlagAddr, (1<<MTMR_JESD_TXON)); // clear int flag
gTxOnCnt++; gTxOnCnt++;
debug_write((DBG_DDR_IDX_DRV_BASE+76), gTxOnCnt); // 0x130 debug_write((DBG_DDR_IDX_DRV_BASE+76), gTxOnCnt); // 0x130
if (6 > gPP1sFlag)
{
debug_write((DBG_DDR_IDX_DRV_BASE+51+gPP1sFlag), (GET_STC_CNT() | (3<<30))); // 0xD0
gPP1sFlag++;
}
uint32_t startTick = 0; uint32_t startTick = 0;
uint32_t cost = 0; uint32_t cost = 0;
startTick = GET_STC_CNT(); startTick = GET_STC_CNT();
set_jesd_rf_state(JESD_TRANS_TX, GPIO_ON); set_jesd_all_rf_state(0, GPIO_ON);
set_jesd_rf_state(JESD_RF_TX, GPIO_ON); //set_jesd_rf_state(JESD_TRANS_TX, GPIO_ON);
set_jesd_rf_state(JESD_ANT_TX, GPIO_ON); //set_jesd_rf_state(JESD_RF_TX, GPIO_ON);
//set_jesd_rf_state(JESD_ANT_TX, GPIO_ON);
cost = GET_STC_CNT() - startTick; cost = GET_STC_CNT() - startTick;
debug_write((DBG_DDR_IDX_DRV_BASE+120), cost); // 0x1e0 debug_write((DBG_DDR_IDX_DRV_BASE+120), cost); // 0x1e0
//jesd_csu_start(); //jesd_csu_start();
@ -1530,9 +1554,10 @@ void jesd_tdd_callback(uint8_t nTmrId)
do_write(tFlagAddr, (1<<MTMR_JESD_TXOFF)); // clear int flag do_write(tFlagAddr, (1<<MTMR_JESD_TXOFF)); // clear int flag
gTxOffCnt++; gTxOffCnt++;
debug_write((DBG_DDR_IDX_DRV_BASE+77), gTxOffCnt); // 0x134 debug_write((DBG_DDR_IDX_DRV_BASE+77), gTxOffCnt); // 0x134
set_jesd_rf_state(JESD_TRANS_TX, GPIO_OFF); set_jesd_all_rf_state(0, GPIO_OFF);
set_jesd_rf_state(JESD_RF_TX, GPIO_OFF); //set_jesd_rf_state(JESD_TRANS_TX, GPIO_OFF);
set_jesd_rf_state(JESD_ANT_TX, GPIO_OFF); //set_jesd_rf_state(JESD_RF_TX, GPIO_OFF);
//set_jesd_rf_state(JESD_ANT_TX, GPIO_OFF);
} }
if (cEventFlag & (1<<MTMR_CEVENT_RXEN2CSU0)) if (cEventFlag & (1<<MTMR_CEVENT_RXEN2CSU0))
{ {
@ -1596,7 +1621,7 @@ void jesd_slot_callback(uint8_t nTmrId)
if (5 == reCfgFlag) if (5 == reCfgFlag)
{ {
reCfgFlag = 0; reCfgFlag = 0;
//disable_mtimer_cevent_int(nTmrId, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // disable 10ms int disable_mtimer_cevent_int(nTmrId, MTMR_CEVENT_CNT14H, MTMR_INT_10ms); // disable 10ms int
} }
pMtimerSfn->txSlotTiming = GET_STC_CNT(); pMtimerSfn->txSlotTiming = GET_STC_CNT();
pMtimerSfn->txSlotNum++; pMtimerSfn->txSlotNum++;