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
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
|
|
}
|
|
|
|
|
|
|
|
|
|
|