|
关于S3C2440串口的稳定收发问题:
根据之前的eeworld的相关帖子,在串口驱动上设置了UCON和UFCON寄存器:
OUTREG(pHWHead,rUCON,0x3c5); //Clock selection=PCLK, tx=level,rx=level,enable timeout int.
OUTREG(pHWHead,rUFCON,0x51); //FIFO enable : tx-16bytes, rx-8bytes
同时CE系统用到是5.0,2440的BSP是从4.2升级上来的,
应用软件上的串口读写时间:
COMMTIMEOUTS CommTimeOuts;
GetCommTimeouts (m_hComm, &CommTimeOuts);
//读线程1ms超时--change by Rn//不管是否有数据要读取,ReadFile立刻返回
CommTimeOuts.ReadIntervalTimeout = 1; //change by Rn //MAXDWORD
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
//读超时=1000+(10*要写的字节数)
CommTimeOuts.WriteTotalTimeoutMultiplier = 10;
CommTimeOuts.WriteTotalTimeoutConstant = 1000;
接收发送缓冲区为:
SetupComm(m_hComm,1024*1024,1024); //In:1MByte;Out:1KByte
用在PC这边用串口调试助手向2440串口发送数据,然后2440用TCP服务(硬件使用DM9000网卡)直接转发回PC机。这个流程已经走通,问题就是串口不能稳定的接收数据,而且数据转发给网口的不影响串口的接收,问题就是不知道如何配置串口的参数。
通过实验,
串口一次发送1125字节的数据,不论是使用
OUTREG(pHWHead,rUFCON,0x61); //FIFO enable : tx-16bytes, rx-16bytes
还是
OUTREG(pHWHead,rUFCON,0x51); //FIFO enable : tx-16bytes, rx-8bytes
不论是在串口调试助手用手动点击发送还是使用500ms间隔自动发送,2440串口接收后直接转发回PC机的效果都比较好;
但是如果串口一次发送2250字节的数据,
不论是使用
OUTREG(pHWHead,rUFCON,0x61); //FIFO enable : tx-16bytes, rx-16bytes
还是
OUTREG(pHWHead,rUFCON,0x51); //FIFO enable : tx-16bytes, rx-8bytes
还是
OUTREG(pHWHead,rUFCON,0x41); //FIFO enable : tx-16bytes, rx-1bytes
在串口调试助手用手动点击发送还是使用500ms间隔自动发送,2440串口接收后直接转发回PC机,都不能完整的接收到串口的数据;
现在就是困惑:像2440这样的arm芯片,串口能不能像PC上那样,可以很稳定的读写?
|
|