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

📄 isr.c

📁 一个类似于shell的程序
💻 C
字号:
#include "..\inc\include.h"
#include "..\inc\isr.h"
#include "..\inc\cmdexc.h"
#include <string.h>



U8 bufINDEX=0; //BUF write point
char BUF[255]="";
extern char prompt;
	


void __irq EINT4567Isr(void)
{
	U8 EXTINTPND=rEXTINTPND;
	rEXTINTPND=0xf;//clear pend stat
	rI_ISPC|=BIT_EINT4567;

	switch (EXTINTPND)
	{
		case 8:
			Uart_Printf("EINT7\r\n");
					
			break;
		case 4:
			Uart_Printf("EINT6\r\n");
					
					break;
		case 2:
			Uart_Printf("EINT5\r\n");
					
					break;
		case 1:
			Uart_Printf("EINT4\r\n");
					
					break;	
		default:Uart_Printf("other\r\n");
	}
	
	Uart_Printf("EINT happen\r\nINTPEND=%x\r\nr_ISPR=%x\r\nrINTMSK=%x\r\n\r\n",rINTPND,rI_ISPR,rINTMSK);
}

void __irq INPUT(void)
{
	U8 i;
	rI_ISPC|=BIT_URXD0;
	if (bufINDEX<254)
	{
		BUF[bufINDEX]=Uart_Getch();
		
		if (BUF[bufINDEX]=='\r')
		{
			Uart_Printf("\r\n");

			//add command execute
			BUF[bufINDEX]='\0';
			if (BUF[0])
			{			
				while (!cmdEXEC(BUF));
				for (i=0;i<255;i++) BUF[i]='\0';
				bufINDEX=0;
			}
			else
			{
				Uart_Printf("%c",prompt);
				bufINDEX=0;
			}
		}
		else
		{
			
			Uart_SendByte((int)BUF[bufINDEX]);
			bufINDEX++;
		}
	}
	else
	{
		BUF[bufINDEX]=Uart_Getch();
		if (BUF[bufINDEX]=='\r')
		{
			Uart_Printf("\r\n");

			//add command execute

			BUF[bufINDEX]='\0';
			while (!cmdEXEC(BUF));
			for (i=0;i<255;i++) BUF[i]='\0';
			bufINDEX=0;
		}
		else
		{
			//do nothing but waiting '\r'
		}
	}

}

void  __irq TIMER1Isr(void)
{
	rI_ISPC|=BIT_TIMER1;
	Uart_Printf("Timer1 happen\r\nINTPEND=%x\r\nr_ISPR=%x\r\nrEXTINTPND=%x\r\n\r\n",rINTPND,rI_ISPR,rEXTINTPND);
}



void Isr_Init(void)
{
    /*
    ///////////////vectored INT init test code////////////////
    U32 i;
  	i=0x00000030;
  	*((volatile unsigned *)i)=0xea000000+((_ISR_STARTADDRESS+0x74-0x00000030-0x8)>>2);
    rINTCON=0x1;	  // Vectored Int. IRQ enable,FIQ disable  
   /////////////////////
   */
   
   
    rINTMSK|=~BIT_GLOBAL;		//disabled int
    pISR_EINT4567=(unsigned)EINT4567Isr;
    pISR_URXD0 = (unsigned)INPUT;
    pISR_TIMER1=(unsigned)TIMER1Isr;    
    
    rINTCON=0x5;	  // Unvectored Int. IRQ enable,FIQ disable  
    rINTMOD =0;  
 
   //以下针对特定的中断口做初始化   
    rPCONG = rPCONG | 0xff00; //set GPG[7:4] interrupt 
    rPUPG = rPUPG & 0x00;//pull up resistor disable
    setLLInt(4);
    setLLInt(5);
    setLLInt(6);
    setLLInt(7);
	
	rINTPND=0;

    rINTMSK &=~(BIT_GLOBAL|BIT_URXD0|BIT_EINT4567);	  // 4567 interrupt available. others masked
	Uart_Printf("INT init ok\r\nINTPEND=%x\r\nr_ISPR=%x\r\nr_INTMSK=%x\r\n\r\n",rINTPND,rI_ISPR,rINTMSK);


}


⌨️ 快捷键说明

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