📄 isr.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 + -