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

📄 irq.c

📁 平台44B0开发板
💻 C
字号:
#include "irq.h"
/*
#define IRQBASE       _ISR_STARTADDRESS+4*8
#define IRQVECTOR(x)  (IRQBASE + ((unsigned int)x)*4)
void uhal_register_irq(NON_VECTOR_HANDLER IrqSrc, void* pIRQService)
{
  *(unsigned *)(IRQVECTOR(IrqSrc)) = (unsigned)pIRQService;
}
*/
#define _ISR_STARTADDRESS 0xc7fff00
#define pISR_IRQ	( *( (unsigned *)(_ISR_STARTADDRESS + 0x18) ) )

extern leds_run(void);
extern leds_on(void);
void enable_IRQ(void);
void disable_IRQ(void);

/*
void irq_init(void)
{
	pISR_IRQ = (unsigned) irq_ISR;
	disable_IRQ();
	rINTCON	= 0x1;	  								// Vectored mode, IRQ disable, FIQ disable    	
	rINTMOD	= 0x0;	  								// IRQ mode
    rINTMSK	= 0x07DFFFFF;	  						//other interrupt masked.
    rI_ISPC = 0xffffffff;							// Clear all interrupt pend
    rPCONG = 0xffff;
    rPUPG = 0x00;
    rEXTINT = 0x4000000;                  			// 上升沿,Level mode
	rEXTINTPND = 0x0;								// 置零,not actived。	
	rI_ISPC   |=  BIT_EINT6;				// clear pending_bit
}
*/
void irq_init(void)
{
	disable_IRQ();
	
	rI_ISPC = 0x3ffffff;	//清除中断状态寄存器,[21]为1的时候,清除extint4.5.6.7;
	rINTMOD = 0;			//中断模式选择,[21]值为0,EXTINT4.5.6.7为irq中断。		
	rINTCON = 0x5;			//中断控制寄存器,0101,非向量,且irq模式			
	rINTMSK = ~(0x200000 | 0x4000000);	//中断屏蔽位[21]为0,表示未屏蔽	
	pISR_IRQ = (unsigned) (irq_ISR);	//安装服务程序
	rPCONG = 0xffff;	//port g控制寄存器;
	rPUPG = 0x00;		//上升沿有效;
	rEXTINT = rEXTINT | 0x22220020;	//中断4567 全部下降沿触发
	rI_ISPC = rI_ISPC | 0x200000;	//EINT4567 clear the pending bit
	rEXTINTPND = 0xf;		//EXTINT4.5.6.7同时激活
	
	enable_IRQ();
}
void irq_ISR(void)
{
	disable_IRQ();
	
	leds_run();
	
	rEXTINTPND = 0xf;		//EXTINT4.5.6.7同时清除;
	rI_ISPC = 0x3ffffff;	//清除中断状态寄存器,[21]为1的时候,清除extint4.5.6.7;
	
	enable_IRQ();
}


//内联函数enable_IRQ,使能irq中断;
__inline void enable_IRQ(void)
	{
  	int tmp;
  	__asm
  	{
    	MRS tmp, CPSR
    	BIC tmp, tmp, #0x80
    	MSR CPSR_c, tmp
  	}
}

//内联函数enable_IRQ,关闭irq中断;
__inline void disable_IRQ(void)
{
	int tmp;
  	__asm
  	{
		MRS tmp, CPSR
		ORR tmp, tmp, #0x80
    	MSR CPSR_c, tmp
  	}
}

⌨️ 快捷键说明

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