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

📄 isr_handle.c.svn-base

📁 我们自己开发的一个OSEK操作系统!不知道可不可以?
💻 SVN-BASE
字号:
#include "API_interrupt.h"#include "global.h"
extern unsigned int  *mask;
static __inline__ void ISR(int ISR_name)
{      
	DisableAllInterrupts();
	OSIntNesting++;

	if(interrupt_routine[ISR_name].devISR==2)
	{	/*open high priority interrupt pin SIMASK=(~(0xFFFFFFFF>>ISR_name))*/
		unsigned int tmp1=0xFFFFFFFF, tmp2=0xFFFFFFFF;	   
        	__asm__  __volatile__( "srw %2, %1"
                       	"xor %0, %2, %3"
		      	:"=m"(*mask)
		      	:"r"(ISR_name),"r"(tmp1),"r"(tmp2));
				
	
	}
   	EnableAllInterrupts();

    	unsigned int *reg;
   	interrupt_source  *point;
    	point=interrupt_routine[ISR_name].next;
	while(point)//interrupt handle
	{	   
		point->action();
		point=point->next;		
	}

	switch(ISR_name)// interrupt reponse
	 {
       case 1:
	  	reg=(unsigned int *) SIPEND;
	  	*reg=((*reg)&0x4FFFFFFF);
	   	reg=(unsigned int *) UIPEND;
	  	*reg=((*reg)&0x4FFFFFFF);
	   	break;
	
	 case 2:
	    	reg=(unsigned int *) SIPEND;//debugger
	   	*reg=((*reg)&0x8FFFFFFF);
	   	reg=(unsigned int *) UIPEND;
	   	*reg=((*reg)&0x8FFFFFFF);
           // printf("IRQ1:%d\n",*reg);//debugger
	  // printf("SIPEND is:%x\n",SIPEND);
	   	break;
	case 3:
	   	reg=(unsigned int *) SIPEND;
	   	*reg=((*reg)&0x01FFFFFF);
	   	reg=(unsigned int *) UIPEND;
	   	*reg=((*reg)&0x01FFFFFF);
          // printf("Level 1:%d\n",*reg);
          // printf("SIPEND is:%x\n",SIPEND);
           	break;
   	case 4:
	   	reg=(unsigned int *) SIPEND;
	   	*reg=((*reg)&0x02FFFFFF);
	    	reg=(unsigned int *) UIPEND;
	   	*reg=((*reg)&0x02FFFFFF);
          // printf("IRQ2:%d\n",*reg);
          // printf("SIPEND is:%x\n",SIPEND);
	   	break;
       case 5:
	   	reg=(unsigned int *) SIPEND;
	   	*reg=((*reg)&0x04FFFFFF);
	    	reg=(unsigned int *) UIPEND;
	   	*reg=((*reg)&0x04FFFFFF);
           //printf("Level 2:%d\n",*reg);	
          // printf("SIPEND is:%x\n",SIPEND);
	   	break;
	case 6:
	   	reg=(unsigned int *) SIPEND;
	   	*reg=((*reg)&0x08FFFFFF);
	    	reg=(unsigned int *) UIPEND;
	   	*reg=((*reg)&0x08FFFFFF);
           //printf("IRQ3:%d\n",*reg);
           //printf("SIPEND is:%x\n",SIPEND);
	   	break;
      case 7:
		reg=(unsigned int *) SIPEND;
	  	*reg=((*reg)&0x001FFFFF);
	  	reg=(unsigned int *) UIPEND;
	  	*reg=((*reg)&0x001FFFFF);
         // printf("Level 3:%d\n",*reg);
	  	break;
    	case 8:
	  	reg=(unsigned int *) SIPEND;
	  	*reg=((*reg)&0x002FFFFF);
	  	reg=(unsigned int *) UIPEND;
	  	*reg=((*reg)&0x002FFFFF);
         // printf("IRQ4:%d\n",*reg);
	  	break;
	case 9:
	  	reg=(unsigned int *) SIPEND;
	  	*reg=((*reg)&0x004FFFFF);
	  	reg=(unsigned int *) UIPEND;
	  	*reg=((*reg)&0x004FFFFF);
         // printf("Level 4:%d\n",*reg);
	  	break;
	case 10:
	  	reg=(unsigned int *) SIPEND;
	  	*reg=((*reg)&0x008FFFFF);
	  	reg=(unsigned int *) UIPEND;
	 	*reg=((*reg)&0x008FFFFF);
         // printf("IRQ5:%d\n",*reg);
	  	break;
    	case 11:
		reg=(unsigned int *) SIPEND;//debugger
		*reg=((*reg)&0x0001FFFF);
 		reg=(unsigned int *) UIPEND;
		*reg=((*reg)&0x0001FFFF);
       // printf("Level 5:%d\n",*reg);
		break;
    	case 12:
		reg=(unsigned int *) SIPEND;
		*reg=((*reg)&0x0002FFFF);
		reg=(unsigned int *) UIPEND;
		*reg=((*reg)&0x0002FFFF);
       // printf("IRQ6:%d\n",*reg);		
		break;
    	case 13:
		reg=(unsigned int *) SIPEND;
		*reg=((*reg)&0x0004FFFF);
		reg=(unsigned int *) UIPEND;
		*reg=((*reg)&0x0004FFFF);
       // printf("Level 6:%d\n",*reg);		
		break;
    	case 14:
		reg=(unsigned int *) SIPEND;
		*reg=((*reg)&0x0008FFFF);
		reg=(unsigned int *) UIPEND;
		*reg=((*reg)&0x0008FFFF);
       // printf("IRQ7:%d\n",*reg);	
		break;
   	default:
       	reg=(unsigned int *) SIPEND;
       	*reg=((*reg)&0x0008FFFF);
       	reg=(unsigned int *) UIPEND;
       	*reg=((*reg)&0x2FFFFFFF);
      	// printf("Level7-31 :%d\n",*reg);	
      	 break;	
  	};

	if((interrupt_routine[ISR_name].devISR==2)/*&&(OSTCBCur->preempt) debugger*/)
	{  		OSIntExit(); 	}
						   
}

⌨️ 快捷键说明

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