首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

串口读取有关问题

2012-02-23 
串口读取问题PowerPC的板子,现成的评估板,内核是MPC8260。板子上没有标准的串口,只有一个2X5(10针)的接口,

串口读取问题
PowerPC的板子,现成的评估板,内核是MPC8260。板子上没有标准的串口,只有一个2X5(10针)的接口,集成了两个SMC(串行管理控制器),针脚定义跟普通串口差不多,使用时只用一个。硬件就是这样,嵌入式系统是VxWorks。
编了一个读串口的小程序,用Select阻塞在板子的串口处,一旦接收到数据就读取并显示出来,主机这边用串口调试助手向串口发数据。按说点了发送之后数据就到板子的串口了,select函数应该有反应,然后触发读取和显示。但是目前的状况是,发送时必须在数据后附一个回车,否则程序没反应。如果连续发送数据都不带回车,那么直到附带回车后之前发送的数据才会被程序读取和显示。
这是什么情况,怎么感觉跟字符串读取似的呢?

PS:板子上的SMC口在手册里是按Monitor Port定义的,也就是对外显示的通道。我需要它只是一个纯粹的数据传输串口,有这方面的影响么?

读取部分的程序如下:

C/C++ code
    ioctl(fd,FIOFLUSH,0);    FD_ZERO(&saveFds);                  /* 初始化Set,所以位置零 */    FD_SET(fd,&saveFds);                /* 设置fd对应的位 */    while(GoOn)    {        readFds = saveFds;        if ((Fdsnum = select(fd+1,&readFds,NULL,NULL,&tv)) == ERROR)            printf("Error in select.\n");         else            printf("Number of file descriptors ready for reading = %d\n",Fdsnum);        if (FD_ISSET(fd,&readFds))       /* fd读数据就绪 */        {            bzero(Rbuff,512);            /*ioctl(fd,FIONREAD,(int) &readCnt);         /* 判断接收数据缓冲区是否有数据到来 */            if ((readCnt = read(fd,Rbuff,512)) > 0)                printf("Read : %s .\n",(char *)Rbuff);            if (strcmp(Rbuff,QUIT) == 0)                GoOn = FALSE;        }    }



[解决办法]
PowerPC本来就是SMC(串行管理控制器),实现UART功能,

帮顶下。
MARK.
[解决办法]
SMC\SCC都是串行控制器,根据不同的配置方式可以用来实现HDLC、UART、以太等功能。
不过大多数的BSP给出的方式都是用SMC来实现UART的。
[解决办法]
scc是高速接口,支持的协议多一些,
smc是低速接口,通常用作uart,但是速率也够用的,
[解决办法]
如果只是看UART的话,指考虑SMC就可以了。
SCC比较典型的是HDLC之类的高速通信信号,感兴趣可以看看。
实际上860、8260这些通信模型都是BD表为核心的,从低速的学起比较利于对其通信方式的理解,I2C之类的总线也可以比较好的促进理解。

热点排行