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

📄 interrupt.c

📁 基于mcx314的运动控制
💻 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 + -