|
小第最近在做LINUX串口驱动编程。平台是S3C2410。我有个外设,是个串口设备。我运用了LINUX系统自带的SERIAL_8250.C文件,其实就是一个16C550兼容的设备驱动。寻址16C550设备这些都没有问题了。串口设备驱动也加载并且注册了。看来一切都很顺利。但是在LINUX下编写了一个串口测试程序,主代码大致如下:
int main(int argc, char **argv)
{
int fd;
int nread;
char buff[512];
char *dev ="/dev/ttySA0";
fd = OpenDev(dev);
if (fd>0)
{
printf("set speed\n");
set_speed(fd,115200);
}
else
{
printf("Can't Open Serial Port!\n");
exit(0);
}
if (set_Parity(fd,8,1,'N')== FALSE)
{
printf("Set Parity Error\n");
exit(1);
}
while(1)
{
while((nread = read(fd,buff,512))>0)
{
printf("\nLen %d\n",nread);
buff[nread+1]='\0';
printf("\n%s",buff);
}
}
//close(fd);
//exit(0);
}
其中 set_Parity()函数实现如下:
int set_Parity(int fd,int databits,int stopbits,int parity)
{
struct termios options;
if ( tcgetattr( fd,&options) != 0)
{
perror("SetupSerial 1");
return(FALSE);
}
...................
}
运行起来后,串口设备打开成功,但是调用 tcgetattr( fd,&options) ,系统却老是报告 SetupSerial 1 :Input/output error
真不知道是什么原因。我使用2410自己的串口驱动设备,是正常的。
请知道原因的朋友们帮我分析分析。不胜感激啊!! |
|