⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 isr.c

📁 嵌入式VxWorks开发所需典型例程源代码
💻 C
字号:
/* includes */
#include "vxWorks.h"
#include "intLib.h"
#include "taskLib.h"
#include "logLib.h"
#include "sysLib.h"
#include "iv.h"
#include "arch\i86\ivi86.h"
/*#include "intArchLib.h"*/


/* function prototypes */
void interruptHandler(int);
void interruptCatcher(void);
 
/* globals */
#define INTERRUPT_NUM 2
#define INTERRUPT_LEVEL 65
#define ITER1 40
#define LONG_TIME 1000000
#define PRIORITY 100
#define ONE_SECOND 100

void interruptGenerator(void) /* task to generate the SIGINT signal */
{
	int i,taskId;
	STATUS taskAlive;

	if((taskId = taskSpawn("interruptCatcher",PRIORITY,0x100,20000,(FUNCPTR)interruptCatcher,0,0,0,0,0,0,0,
				0,0,0)) == ERROR)
		logMsg("taskSpawn interruptCatcher failed\n",0,0,0,0,0,0);

	for (i=0; i < ITER1; i++)
	{
		taskDelay(ONE_SECOND);/* suspend interruptGenerator for one second */
		/* check to see if interruptCatcher task is alive! */
		if ((taskAlive = taskIdVerify(taskId)) == OK)
    		{ 		
    			logMsg("++++++++++++++++++++++++++Interrupt generated\n",0,0,0,0,0,0);   	
    			/* generate hardware interrupt 2 */
    			if((sysBusIntGen(INTERRUPT_NUM,INTERRUPT_LEVEL)) == ERROR)	 
    				logMsg("Interrupt not generated\n",0,0,0,0,0,0);   			
    		}
    		else  /* interruptCatcher is dead */
    		{
    			logMsg("Sorry , the interruptCatcher is dead\n",0,0,0,0,0,0);
    			break;
    		}
	}  
	logMsg("\n***************interruptGenerator Exited***************\n\n\n\n",0,0,0,0,0,0);
}

void interruptCatcher(void) /* task to handle the interrupt */
{
	int i, j;
	STATUS connected;

	/* connect the interrupt vector, INTERRUPT_LEVEL, to a specific interrupt 
	handler routine ,interruptHandler,  and pass an argument, i */ 
	if((connected = intConnect(INUM_TO_IVEC(INTERRUPT_LEVEL),(VOIDFUNCPTR)interruptHandler,i)) == ERROR)
		logMsg("intConnect failed\n",0,0,0,0,0,0);

	for (i=0; i < ITER1; i++)
  	{
    		for (j=0; j < LONG_TIME; j++);
    		logMsg("Normal processing in interruptCatcher\n",0,0,0,0,0,0);
    		taskDelay(10);
    	}	 	
	logMsg("\n+++++++++interruptCatcher Exited+++++\n",0,0,0,0,0,0);
}

void interruptHandler(int arg)  /* signal handler code */
{
	int i;

	logMsg("---------------interrupt caught\n",0,0,0,0,0,0);
	for (i=0; i < 5; i++)
		logMsg("interrupt processing\n",0,0,0,0,0,0);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -