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

📄 testirq.c

📁 arm s3c2410 中断处理 新手需要
💻 C
字号:
/* * File:		testirq.c  * Purpose:		test the external interrupt respond speed of MCF5249 * Developer:		wing.zhang (stanxerror@hotmail.com) * Copyright: 		HHTECH Co., Ltd (www.hhcn.com)  */ #include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/signal.h>#include <linux/sched.h>#include <linux/timer.h>#include <linux/interrupt.h>#include <asm/irq.h>/*use gpio5 as the input external irq*/#define EXTERNAL_IRQ     (128+37)#define MBAR_ADDR        0x10000000#define MBAR2_ADDR       0x80000000#define GPIO_FUNCTION    0x00C#define GPIO_EN          0x008#define GPIO_OUT         0x004#define GPIO_INT_CLEAR   0x0C0#define GPIO_INT_STAT    0x0C0#define GPIO_INT_EN      0x0C4#define GPIO1_FUNCTION   0x0BC#define GPIO1_EN         0x0B8#define GPIO1_OUT        0x0B4void testirq_interrupt(int,void *,struct pt_regs *);int testirq_init(void);void gpio_int_enable(void);/**********************************************************///Interrupt Functionvoid testirq_interrupt(int irq,void *d,struct pt_regs *regs){	/*clear interrupt register for INT 37*/	*(volatile unsigned long *)(MBAR2_ADDR+GPIO_INT_CLEAR) |= 0x00000020;	/*reverse gpio1 output*/	*(volatile unsigned long *)(MBAR2_ADDR+GPIO_OUT)^=0xFFFFFFFF;}void gpio_int_enable(void){	/*enable interrupt for gpio5*/	*(volatile unsigned long *)(MBAR2_ADDR+GPIO_INT_EN) |=0x00000020;	/*level assignment for gpio5 (mbar2+150)*/        *(volatile unsigned long *)0x80000150 |= 0x00400000;}void gpio_int_disable(void){	*(volatile unsigned long *)(MBAR2_ADDR+GPIO_INT_EN) &= 0xFFFFFFDF;}/****************************************************///Initialize Functionstatic int __init testirq_init(void){		static int result;	printk("test_irq : EXTERNAL_IRQ = %d\n",EXTERNAL_IRQ);	result=request_irq(EXTERNAL_IRQ,&testirq_interrupt,SA_INTERRUPT,"testirq",NULL);	if (result == -1)	{		printk("Can't get assigned irq %d\n",EXTERNAL_IRQ);		return result;	}	gpio_int_enable();	/*switch ddata1/gpio1 to gpio output*/	*(volatile unsigned long *)(MBAR2_ADDR+GPIO_EN) |=0x00000002;	*(volatile unsigned long *)(MBAR2_ADDR+GPIO_FUNCTION) |=0x00000002;	printk("Testirq interrupt registered ok!!!\n");#if 0 	*(volatile unsigned long *)(MBAR2_ADDR+GPIO_EN) |=0x00000002;	*(volatile unsigned long *)(MBAR2_ADDR+GPIO_FUNCTION) |=0x00000002;	for(result=0;result<1000;result++) {		printk("output -gpio0\n"); 		/*turn gpio0 output*/		*(volatile unsigned long *)(MBAR2_ADDR+GPIO_OUT)^=0xFFFFFFFF;	}#endif	return 0;}static void __exit testirq_exit(void){	gpio_int_disable();	free_irq(EXTERNAL_IRQ, testirq_interrupt);}module_init(testirq_init);module_exit(testirq_exit);

⌨️ 快捷键说明

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