我写了下面的代码,但似乎不能很好地工作。
//Send buffer data to UART
void SendToSerial(streaming chanend DataFromFIFO, streaming chanend DataFromHostPC, streaming chanend DataToHostPC) {
unsigned int rx;
unsigned char XON = 1;
unsigned char RxFlow;
while(1){
select {
// xon/xoff char received from PC
case DataFromHostPC:> RxFlow:
if ( RxFlow == XOFF_CHAR){
XON = 0;
}
if ( RxFlow == XON_CHAR ){
XON = 1;
}
break;
// data from fifo to be sent over uart to the host pc
case DataFromFIFO :> rx:
// Checking if the transmission must be stopped
while( XON == 0 ){
DataFromHostPC:> RxFlow; // wait PC command
if ( RxFlow == XON_CHAR ){
XON = 1;
}
} // wating xon char ok
DataToHostPC <: rx;
break;
}
}
}
In main, i have:
par {
GetFromFIFO(DataFromFIFO); // Get data from fifo
HandleUart(DataFromFIFO,DataFromHostPC,DataToHostPC); // Send data to UART
ReceiveXOFF(DataFromHostPC); // Get data received from PC via UART
SendToHost(DataToHostPC); // Send data to UART
}
检查用示波器,当XOFF字符是由主机PC发送的串行线,数据不会停止。问题出在哪里?
如何正确实施XON / XOFF软件流控制?是否有任何示例代码?
提前致谢。
回答:
讨论: