请教一下 HDLC前导码的问题 很奇怪
请问: 我们在用STR7 的HDLC做接收和发射 用示波器看到HDLC发送出来的数据帧,前导码有很多个1 也就是说 按协议正常的数据帧应该是16个0 ,接着是帧标识...而现在16个0前面有多个1. 有什么办法可以解决?
程序如下:
void HDLC_TX_Init(void) { hdlc_pres=0x0000; // hdlc pres hdlc_poss=0x0000; // hdlc poss hdlc_tctl=0x0bff; // hdlc tctl //hdlc_rctl=0x0000; // hdlc rctl #ifdef Down_500K hdlc_BRR=0x1007; // hdlc BRR ,TX 7 #else hdlc_BRR=0x0003; // hdlc BRR ,TX 3 #endif hdlc_ISR=0x0000; // hdlc ISR hdlc_IMR=0x0000; // hdlc IMR }
unsigned char HDLC_TX(unsigned char *txdata, unsigned char txlen) { unsigned int TxStatus; unsigned long *baseP=(unsigned long *)0xC000E880; unsigned char i; if(txlen>200) // return 1;
#ifdef PLL if(g_setpll==0) { g_setpll=0xff; if(g_RSU_Profile&0x01) SetPllFreq(0x01); //5.80GHz else SetPllFreq(0x00); //5.79GHz } #endif //--------------open transmitter------------------------ #ifdef frequence_exchange if(g_RSU_Profile&0x01) GPIO1_PD|=0X0004; //GPIO1->PD OPEN TXVDD1 else GPIO1_PD|=0X0008; //GPIO1->PD OPEN TXVDD2 #else if(g_RSU_Profile&0x01) GPIO1_PD|=0X0008; //GPIO1->PD OPEN TXVDD2 else GPIO1_PD|=0X0004; //GPIO1->PD OPEN TXVDD1 #endif //---------------------------------------------------------
HDLC_TX_Init(); delay(20); // for(i=0;i<txlen;i+=4) { *baseP=(txdata[i+3]<<24)|(txdata[i+2]<<16)|(txdata[i+1]<<8)|txdata; baseP++; } hdlc_TFBCR=txlen; // hdlc TFBCR hdlc_PCR=0x0002; // hdlc PCR while(1) { TxStatus= hdlc_ISR; if(TxStatus&0x0040) break; } hdlc_tctl=0x0000; // hdlc tctl hdlc_PCR=0x0000; // hdlc PCR GPIO1_PD&=0XFFF7; //GPIO1->PD STOP TXVDD2 GPIO1_PD&=0XFFFB; //GPIO1->PD STOP TXVDD1 return 0; }
|