You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

187 lines
4.3 KiB

/*******************************************************************************
Function :
Brief : pd common function
Input :
Return :
*******************************************************************************/
uint8_t rxreceive_flag = 0; //for crc_chk_int flag
uint8_t goodcrc_send_flag = 0; //for goodcrc_sent_int flag
uint8_t txsent_flag = 0; //for tx_sent_int flag
uint8_t hardrst_get = 0; //for receive a hardrst
//error cnt
int errcnt = 0;
//wait crc_chk interrupt:wait rx receive msg
static void receive_msg(void)
{
while(!rxreceive_flag){
printf("\n********rxreceive_flag is:%d.********\n",rxreceive_flag);
};
REG_DMA_DMA_DONE_CLR->bf.value=0x2;
//clear flag
rxreceive_flag = 0;
}
//wait goodcrc_sent interrupt:wait tx send goodcrc
static void send_goodcrc(int time_cnt)
{
int time=0; // timer:tTransmit max=195us
//wait tx send goodcrc
while(!goodcrc_send_flag){
printf("\n********goodcrc_send_flag is:%d.********\n",goodcrc_send_flag);
if(time<time_cnt){
time++;
}else{
printf("Rx received a bad msg,Tx can not send goodcrc.\n"); //no goocrc
errcnt++;
break;
}
};
REG_DMA_DMA_DONE_CLR->bf.value=0x2;
printf("\n********goodcrc_send_flag is:%d.********\n",goodcrc_send_flag);
//clear flag
goodcrc_send_flag = 0;
}
//wait hardrst msg:wait hardrst interrupt
void receive_hardrst(int time_cnt)
{
int time=0;
while(!hardrst_get){
printf("\n********hardrst_get is:%d.********\n",hardrst_get);
delay_50us(1);
if(time<time_cnt){
time++;
}else{
printf("Rx can not receive a hardrst msg.\n");
errcnt++;
break;
}
}
if(hardrst_get){
//check int_flag
//check PHY/MAC FSM value
if(REG_PD_FSM_MAC -> word!=0x00000500) errcnt++;
if(REG_PD_FSM_PHY -> word!=0x00000001) errcnt++;
}
//clear flag
hardrst_get = 0;
}
//wait tx_sent interrupt : tx send a msg,dut wait response goodcrc
static void tx_send (int time_cnt)
{
int time = 0; //timer: tReceive msg max
//tx has send a msg,wait goodcrc response
while(!txsent_flag){
printf("\n********txsent_flag is:%d.********\n",txsent_flag);
if(time<time_cnt){
time++;
}else{
printf("Tx sent a bad msg,Rx can not receive response goodcrc.\n");
errcnt++;
break;
}
};
printf("\n********txsent_flag is:%d.********\n",txsent_flag);
printf("\n********rxreceive_flag is:%d.********\n",rxreceive_flag);
//clear flag
txsent_flag=0;
rxreceive_flag = 0; //when receive a goodcrc,also trigger crc_check int and set this flag,should clr this flag.Oherwise,will jump over receive_msg().
}
//wait crc_chk interrupt:wait rx receive response msg,such as dut send request wait for response of accept.
static void receive_response(int time_cnt)
{
int time = 0;
while(!rxreceive_flag){
printf("\n********rxreceive_flag is:%d.********\n",rxreceive_flag);
if(time<time_cnt){
time++;
}else{
printf("Wait response timer time out,no response msg.\n");
errcnt++;
break;
}
};
REG_DMA_DMA_DONE_CLR->bf.value=0x2;
//clear flag
rxreceive_flag=0;
}
static void pd_init (void)
{
// enable pd clk
clk_cg_pdh_en(1);
clk_cg_pdl_en(1);
delay();
delay();
printf("--> PD TEST\n" );
//pd initial
REG_PD_SW2->bf.datarole=1; //data role :source
REG_PD_SW2->bf.powerrole=1;//pwoer role :source
REG_PD_SW2->bf.specrev=2; //set goodcrc spec revision:3.0
REG_PD_POWER->bf.cc_comp_en=1; //pd_power_pwr
}
void c_hdsk(void)
{
REG_CLKCTRL_SW1->word = 0xffff; //Tell vector c ready
REG_CLKCTRL_SW1->word = 0x0; //clear
}
void v_hdsk(void)
{
int reg_rdata = 0;
do{
reg_rdata = REG_CLKCTRL_SW1->word;
printf("reg_rdata is %x\n", reg_rdata); //for debug;
delay_50us(1);
}while(reg_rdata!= 0xffff0000); //Get vector ready
REG_CLKCTRL_SW1->word = 0x0; //clear
}