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

📄 get_interrupt2.c

📁 universeII驱动
💻 C
字号:
#include <vme/vme.h>#include <vme/vme_api.h>#include <signal.h>#include <stdio.h>#define LEVEL             VME_INTERRUPT_VIRQ3#define VECTOR            0x10int done = 0;void handler(int sig, siginfo_t * siginfo, void *extra){	/* For VMEbus interrupts, the returned data is (level << 8) & vector */	printf("VMEbus interrupt occured on level %d, vector 0x%x\n",	       siginfo->si_value.sival_int >> 8,	       siginfo->si_value.sival_int & 0xff);	done = 1;}int main(){	vme_bus_handle_t bus_handle;	vme_interrupt_handle_t interrupt_handle;	struct sigevent event;	struct sigaction action;	if (vme_init(&bus_handle)) {		perror("Error initializing the VMEbus");		return -1;	}	/* Set up sigevent struct */	event.sigev_signo = SIGIO;	event.sigev_notify = SIGEV_SIGNAL;	event.sigev_value.sival_int = 0;	/* Install the signal handler */	sigemptyset(&action.sa_mask);	action.sa_sigaction = handler;	action.sa_flags = SA_SIGINFO;	if (sigaction(SIGIO, &action, NULL)) {		perror("Error installing signal handler");		vme_term(bus_handle);		return -1;	}	if (vme_interrupt_attach(bus_handle, &interrupt_handle, LEVEL,				 VECTOR, VME_INTERRUPT_SIGEVENT, &event)) {		perror("Error attaching to the interrupt");		vme_term(bus_handle);		return -1;	}	/* Loop here until we get the signal */	while (!done) ;	if (vme_interrupt_release(bus_handle, interrupt_handle)) {		perror("Error releasing the interrupt");		vme_term(bus_handle);		return -1;	}	if (vme_term(bus_handle)) {		perror("Error terminating");		return -1;	}	return 0;}

⌨️ 快捷键说明

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