这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 串口中断接收问题急急救!!!

共7条 1/1 1 跳转至

串口中断接收问题急急救!!!

菜鸟
2005-10-25 23:52:20     打赏

copy论坛程序,简化目的希望每次中断后打印数据,验证中断的触发。代码如下:

/*includes*/
#include "vxworks.h"
#include "ioLib.h"
#include "stdio.h"
#include "selectLib.h"
#include "errnoLib.h"
#include "intLib.h"
#include "taskLib.h"
#include "logLib.h"
#include "string.h"
#include "arch/i86/ivI86.h"
#include "semLib.h"
#include "sysLib.h"
/*function status*/
void interruptHandler();
/* globals */
#define INT_NUM_IRQ0 0x20
#define COM2_INT_LVL 0x03
#define INT_NUM_COM2 (INT_NUM_IRQ0 + COM2_INT_LVL)
#define STACK_SIZE 1024*40
#define BUF_SIZE 1024

/*main function*/
int serialmain( )
{
/*open COM2*/
int SerialDevFd=open("/tyCo/1",O_RDWR,0644);
if(ERROR==SerialDevFd)
{
logMsg("open_com:Unable to open/tyCo/0",0,0,0,0,0,0);
return 0;
}

if(ERROR==ioctl(SerialDevFd,FIOSETOPTIONS,OPT_RAW))
{
logMsg("can not set tty options!\n",0,0,0,0,0,0);
return 0;
}

/*Set baudrate*/
if(ERROR==ioctl(SerialDevFd,FIOBAUDRATE,9600))
{
logMsg("can not set BAUDRATE!\n",0,0,0,0,0,0);
return 0;

}
/*flush the buffer*/
if(ERROR==ioctl(SerialDevFd,FIOFLUSH,0))
{
logMsg("can not flush the buffer!\n",0,0,0,0,0,0);
return 0;
}

sysIntDisablePIC(COM2_INT_LVL);

intConnect(INUM_TO_IVEC(INT_NUM_COM2),(VOIDFUNCPTR)interruptHandler,0);
sysIntEnablePIC(COM2_INT_LVL);
return 1;
}


/*interrupt service routine*/
void interruptHandler( )
{
int level=intLock();
logMsg("give Recv sem OK!\n",0,0,0,0,0,0);
intUnlock(level);
return;
}

结果只打印一次数据,即中断之响应一次。再次执行时,无响应。请问高手串口中断接受怎样处理!

在中断中添加sysOutByte(0xa0,0x20), sysOutByte(0x20,0x20),仍就响应一次.似乎串口仍旧没有释放


[align=right][color=#000066][此贴子已经被作者于2005-10-26 13:22:26编辑过][/color][/align]



关键词: 串口     中断     接收     问题     急救     #include    

菜鸟
2005-10-26 00:53:00     打赏
2楼

可能是中断资源没释放,怎样解决呢?

硬件:桑达pc104568sv

盼回复!

[align=right][color=#000066][此贴子已经被作者于2005-10-25 16:56:36编辑过][/color][/align]

菜鸟
2005-10-26 05:36:00     打赏
3楼

确定中断返回,即使去掉return仍旧只是收到一次。

求大虾们解决

[align=right][color=#000066][此贴子已经被作者于2005-10-26 13:12:27编辑过][/color][/align]

菜鸟
2005-10-26 18:30:00     打赏
4楼

我也是刚开始学,不太熟悉。

试一下在中断的最后加上 sysOutByte(0xa0,0x20); sysOutByte(0x20,0x20); 释放串口。


菜鸟
2005-10-27 06:09:00     打赏
5楼

感谢帮忙,试了程序,程序结果是一样的,只是打印interTime =0。

[align=right][color=#000066][此贴子已经被作者于2005-10-26 22:15:34编辑过][/color][/align]

菜鸟
2005-10-27 18:14:00     打赏
6楼

享受免费发布供求信息和产品信息,让更多的客户和采购商找到你!!

[url=http://china.53trade.com/?jhr1027]http://china.53trade.com[/url]


菜鸟
2005-11-03 15:47:00     打赏
7楼

错误原因分析如下:

串口响应1次中断,在read处阻塞,即每收到数据;

去掉read代码,串口中断不能重入,即使有read代码效果同前


共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]