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

📄 isr.c

📁 这是一个u/COS-II v2.80,三星44B0的移植的源码。
💻 C
字号:
#include "44b.h"
#include "44blib.h"
#include "ISR.h"
#include "def.h"

static int LedStatus=0;

extern void OS_CPU_IRQ_ISR(void);
extern OSTimeTick(void);


void (*InterruptHandlers[MAXHNDLRS])(void);
void (*ExInt4567Handlers[4])(void);

void ExInt4567()	//外部中断4567的共享函数
{
	int i,exinpnd=rEXTINTPND,tmp=1;//temp bit
	for(i=0;i<4;i++){
		if(exinpnd&tmp){
			rEXTINTPND=tmp;	//clear Extint bit
			rI_ISPC=(1<<4);	//clear i_ispc
			(*ExInt4567Handlers[i])();
			break;
		}
		tmp<<=1;
	}
}

int GetISROffsetClr()
{
	//计算中断的偏移地址,高位优先
	int i,ispr=rI_ISPR,tmp=1<<(MAXHNDLRS-1);//temp bit
	for(i=MAXHNDLRS;i>0;i--){
		if(ispr&tmp){
		   rI_ISPC=tmp;//清中断
			return i-1;
		}
		tmp>>=1;
	}
	return -1;
}

void SetISR_Interrupt(int vector, void (*handler)(), int ExInt)
{
	if(vector==EINT4567_OFFSET){
		InterruptHandlers[vector] = ExInt4567;
		ExInt4567Handlers[ExInt] = handler;
	}
	else	{
		InterruptHandlers[vector] = handler;
	}
}

void ISR_IrqHandler()
{ 
	//int intpnd=rINTPND;
//	while(intpnd!=0)
	{ 
	int IntOffset=GetISROffsetClr();	//得到中断向量的偏移地址
	//OSIntEnter();
	(*InterruptHandlers[IntOffset])(); // Call interrupt service routine
	//OSIntExit();
//	intpnd=rINTPND;
	}
}


void uHALr_InterruptRequestInit()
{
	pISR_UNDEF= (unsigned) DebugUNDEF;
	pISR_SWI= (unsigned) DebugSWI;
	pISR_PABORT= (unsigned) DebugABORT;
	pISR_DABORT= (unsigned) DebugABORT;
//	pISR_RESERVED
	pISR_IRQ= (unsigned) OS_CPU_IRQ_ISR;	//irq interrupt
	pISR_FIQ= (unsigned) DebugFIQ;

    SetISR_Interrupt(INT_TIMER1_OFFSET,OSTickISR,NULL);

///////////////////////No use////////////////////////
	pISR_ADC= (unsigned) BreakPoint;
	pISR_RTC= (unsigned) BreakPoint;
	pISR_UTXD1= (unsigned) BreakPoint;
	pISR_UTXD0= (unsigned) BreakPoint;
	pISR_SIO= (unsigned) BreakPoint;
	pISR_IIC= (unsigned) BreakPoint;
	pISR_URXD1= (unsigned) BreakPoint;
	pISR_URXD0= (unsigned) BreakPoint;
	//remove by eric rong//	pISR_EINT67= (unsigned) BreakPoint;
	pISR_WDT= (unsigned) BreakPoint;
	pISR_TIMER3= (unsigned) BreakPoint;
	pISR_TIMER2= (unsigned) BreakPoint;
	//pISR_TIMER1= (unsigned) OSTickISR;
	pISR_TIMER0= (unsigned) BreakPoint;
	//remove by eric rong//	pISR_UERR1= (unsigned) BreakPoint;
	//remove by eric rong//	pISR_UERR0= (unsigned) BreakPoint;
	pISR_BDMA1= (unsigned) BreakPoint;
	pISR_BDMA0= (unsigned) BreakPoint;
	pISR_ZDMA1= (unsigned) BreakPoint;
	pISR_ZDMA0= (unsigned) BreakPoint;
	//remove by eric rong//	pISR_EINT5= (unsigned) BreakPoint;
	//remove by eric rong//	pISR_EINT4= (unsigned) BreakPoint;
	pISR_EINT3= (unsigned) BreakPoint;
	pISR_EINT2= (unsigned) BreakPoint;
	pISR_EINT1= (unsigned) BreakPoint;
	pISR_EINT0= (unsigned) BreakPoint;
/////////////////////////////////////////////////////
}



 void OSTickISR(void)
{   
   // rTCON=(0x2<<8);	//update mode for TCNTB1 and TCMPB1.
   // rI_ISPC=BIT_TIMER1;	
	//rTCON=(0x9<<8);		//timer1 = auto reload, start
	OSTimeTick();
	Led_Display(LedStatus);
	LedStatus=(~(LedStatus)&0x7);
    Uart_Printf("\nTIMER interrupt... ");
}


⌨️ 快捷键说明

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