/**************************wk2168_rec_data*******************************************/
//函数功能:读取子串口fifo中的数据
// port:端口号
// recbuf:接收到的数据
// 返回值:接收数据的长度
/**************************wk2168_rec_data********************************************/
int wk2168_rec_data(u8 port,u8 *recbuf)
{
u8 fsr=0,rfcnt=0,rfcnt2=0,sifr=0;
int len=0;
sifr=wk2168_read_s_reg(port,WK2XXX_SIFR);
if((sifr&WK2XXX_RFTRIG_INT)||(sifr&WK2XXX_RXOVT_INT))//有接收中断和接收超时中断
{
fsr =wk2168_read_s_reg(port,WK2XXX_FSR);
rfcnt=wk2168_read_s_reg(port,WK2XXX_RFCNT);
rfcnt2=wk2168_read_s_reg(port,WK2XXX_RFCNT);
//printf("rfcnt=0x%x.\n",rfcnt);
/*判断fifo中数据个数*/
if(fsr& WK2XXX_RDAT)
{
if(!(rfcnt2>=rfcnt))
{
rfcnt=rfcnt2;
}
len=(rfcnt==0)?256:rfcnt;
}
#if 1
wk2168_read_s_fifo(port,recbuf,len);
#else
for(n=0;n<len;n++)
*(recbuf+n)=wk2168_read_s_reg(port,WK2XXX_FDAT);
#endif
return len;
}
else
{
len=0;
return len;
}
}
|