/******************************************************************************* 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(timebf.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 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(timebf.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 }