📄 interrupt.c
字号:
#include "def.h"
#include "44b.h"
#include "44blib.h"
#include "option.h"
#include "Uart.h"
#include "sm5k_lib.h"
//#include "fifo.h"
//extern char BufStatus;
//volatile char which_int = 0 ; //哪一个中断ExINT4、ExINT5、ExINT6、ExINT7?
extern void SetPause(short);
long value;
void WatchDogTimer_Init(void)
{
rWTCON=((MCLK/1000000-1)<<8)|(3<<3);
rWTDAT=800; //100ms
rWTCNT=800;
rWTCON=((MCLK/1000000-1)<<8)|(3<<3)|(1<<5)|(1<<2);
}
/****************************************************************************
【功能说明】中断响应函数
****************************************************************************/
void __irq WatchDogTimerIsr(void)
{
rI_ISPC = BIT_WDT; //clear pending_bit
}
void __irq Timer0Isr(void)
{
// SerialPrintf("Timer0 interrupt !");
smp860_get_param( C_X, C_rLP, &value );
SerialPrintf("X%ld*",value);
smp860_get_param( C_Y, C_rLP, &value );
SerialPrintf("Y%ld*",value);
rI_ISPC=BIT_TIMER0; //clear pending_bit
}
void __irq Uart0_RxIsr(void)
{
//Uart_Printf( "Uart0 Rx Interrupt!,Key=%c\n",Uart_GetKey() ) ;
//Uart_SendByte(Uart_GetKey());
//PushUartRxFifo();
if('Q'==SerialGetChar(0))
{
SetPause(1);
}
if('P'==SerialGetChar(0))
{
SetPause(0);
}
rI_ISPC = BIT_URXD0; //clear pending_bit
}
void __irq Eint4567Isr(void)
{
char which_int; //哪一个中断ExINT4、ExINT5、ExINT6、ExINT7?
which_int = rEXTINTPND;
//rEXTINTPND = 0xf; //clear EXTINTPND reg.
//rI_ISPC = BIT_EINT4567; //clear pending_bit
switch(which_int)
{
case 1:
//Uart_Printf("\n\n外部中断4已经发生(低电平有效)!\n");
/*
smp860_send_inp_cmd(C_CMD_INP_INT_CLEAR);
if( BufStatus != BUF_EMPTY )
{
//Uart_SendByte('I');
ContinueCIPL();
}
*/
break;
case 2:
//Uart_Printf("\n\n外部中断5已经发生(低电平有效)!\n");
break;
case 4:
//Uart_Printf("\n\n外部中断6已经发生(低电平有效)!\n");
break;
case 8:
//Uart_Printf("\n\n外部中断7已经发生(低电平有效)!\n");
//ps2_interrupt();
break;
default :
break;
}
rEXTINTPND = 0xf; //clear EXTINTPND reg.
rI_ISPC = BIT_EINT4567; //clear pending_bit
}
//***************************************************************************
/****************************************************************************
【功能说明】中断初始化函数
****************************************************************************/
void Isr_Init(void)
{
//rINTCON = 0x1; // Vectored Int. IRQ enable,FIQ disable
rINTCON = 0x5; // Non-vectored,IRQ enable,FIQ disable
rINTMOD = 0x0; // All=IRQ mode
rINTMSK=BIT_GLOBAL; // All interrupt is masked.
pISR_EINT4567 = (int)Eint4567Isr;
pISR_WDT=(int)WatchDogTimerIsr;
pISR_URXD0=(int)Uart0_RxIsr;
pISR_TIMER0=(int)Timer0Isr;
//rPCONG = 0xc303; //Port_Init done
rPUPG = rPUPG & 0x0f; //GPG4、5、6、7上拉电阻有效
rEXTINT = (rEXTINT&(~(0x7<<28))) | (0x2<<28); // EINT7(PS2) negedge trigger
rTCFG0=0x00f;
rTCFG1=0x00;
rTCNTB0=0x0ffff;
// rTCMPB0=0x00ff;
rTCON=0x0a;
rTCON=0x09;
//rINTMSK=~(BIT_GLOBAL|BIT_EINT4567|BIT_WDT|BIT_URXD0); //中断有效
rINTMSK=~(BIT_GLOBAL|BIT_EINT4567); //中断有效
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -