欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

linux 中断处理串口通讯解决方案

更新时间: 2014-05-15 08:16:02 责任编辑: Author_N4

 

linux 中断处理串口通讯
诸位大侠好,第一次发帖,多多帮助。

 想用上位机串口连接S3C2440,上位机发送命令给S3C2440。 我想利用中断实现S3C2440的串口接受数据部分,不知道怎么实现。在linux下的编程。
  我的想法是, S3C2440 处理其他事情,当有数据传送过来的时候,再进行处理数据。不知道怎么实现? 请诸位帮忙,最好有代码给我模仿一下。谢谢。谢谢。

--参考方法--
呵呵,很简单啊,只要把select函数好好看看就行了,祝你成功,首先得心静下来
--参考方法--
使用异步io

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <termio.h>

int tty_mode(int how)
{
static struct termios original_mode;
if(how==0)
 tcgetattr(0,&original_mode);
else return tcsetattr(0,TCSANOW,&original_mode);
}
void set_crmode()
{
struct termios ttystate;
tcgetattr(0,&ttystate);
ttystate.c_lflag &= ~ICANON;
ttystate.c_lflag &=~ECHO;
ttystate.c_cc[VMIN]=1;
tcsetattr(0,TCSANOW,&ttystate);
}

int signal_io(int sig)
{
static char buf[128],ch=0;
static int len=0;
//memset(buf,0,sizeof(buf));
//printf("aaaa\n");
if(read(0,&ch,1)==1)
{
if(ch!=127)
{
printf("%c",ch);
buf[len++]=ch;
}
else {
if(len>0)
buf[--len]=0;
printf("\b \b");
}
}
//perror(NULL);
//printf("%d\n",ch);
fflush(stdout);
}
int main()
{
int flag=0;
tty_mode(0);
set_crmode();
signal(SIGIO,signal_io);
fcntl(0,F_SETOWN,getpid());
flag=fcntl(0,F_GETFL);
fcntl(0,F_SETFL,flag|O_ASYNC);
while(1)
pause();
tty_mode(1);
}
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-05-15 08:16:02
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/426601/
本文WWW.DOC100.NET DOC100.NET版权所有。