Uname: Linux rpi-ptz 5.15.0-1026-raspi #28-Ubuntu aarch64 GNU/Linux.
我正在使用 libserial 和 tcdrain 通过我构建的驱动程序以 2MHz 的波特率发送串行。它需要在写入时将 TX 使能引脚设置为高电平,并在 TX 之后立即设置为低电平。问题是有时 tcdrain 会在写入位后保持 8-16 毫秒。 这是我的代码:
int EmbeddedSerialPort::writePort(uint8_t *packet, int length)
{
int ret = -1;
m_pSerial->FlushIOBuffers();
m_pTxEnPin->SetActive(true);
try
{
for (int i = 0; i < length; i++)
{
// m_dataBuffer = LibSerial::DataBuffer(packet, packet + length);
m_pSerial->WriteByte(packet[i]);
// tcdrain(m_pSerial->GetFileDescriptor());
}
// m_pSerial->DrainWriteBuffer();
tcdrain(m_pSerial->GetFileDescriptor());
m_pTxEnPin->SetActive(false);
ret = length;
}
SERIAL_EXCEPTION_RET_NONE("Writing Command Buffer")
m_pSerial->FlushOutputBuffer();
// OnWriteComplete();
return ret;
}