OMAP3开发系列—— 中断

 

 

OMAP3开发系列—— 中断

小狼@http://blog.csdn.net/xiaolangyangyang

 


内部中断定义

在/arch/arm/plat-omap/include/mach/irqs.h中,如:

#define INT_34XX_BENCH_MPU_EMUL 3
#define INT_34XX_ST_MCBSP2_IRQ 4
#define INT_34XX_ST_MCBSP3_IRQ 5
#define INT_34XX_SSM_ABORT_IRQ 6
#define INT_34XX_SYS_NIRQ 7
#define INT_34XX_D2D_FW_IRQ 8
#define INT_34XX_PRCM_MPU_IRQ 11
#define INT_34XX_MCBSP1_IRQ 16
#define INT_34XX_MCBSP2_IRQ 17
#define INT_34XX_MCBSP3_IRQ 22
#define INT_34XX_MCBSP4_IRQ 23
#define INT_34XX_CAM_IRQ 24
#define INT_34XX_MCBSP5_IRQ 27
#define INT_34XX_GPIO_BANK1 29
#define INT_34XX_GPIO_BANK2 30
#define INT_34XX_GPIO_BANK3 31
#define INT_34XX_GPIO_BANK4 32
#define INT_34XX_GPIO_BANK5 33
#define INT_34XX_GPIO_BANK6 34
#define INT_34XX_USIM_IRQ 35
#define INT_34XX_WDT3_IRQ 36
#define INT_34XX_SPI4_IRQ 48
#define INT_34XX_SHA1MD52_IRQ 49
#define INT_34XX_FPKA_READY_IRQ 50
#define INT_34XX_SHA1MD51_IRQ 51
#define INT_34XX_RNG_IRQ 52
#define INT_34XX_I2C3_IRQ 61
#define INT_34XX_FPKA_ERROR_IRQ 64

 

如果要用GPIO作为中断呢?

 

先看/arch/arm/plat-omap/include/mach/gpio.h文件:

 

#define OMAP_GPIO_IRQ(nr) (OMAP_GPIO_IS_MPUIO(nr) ? IH_MPUIO_BASE + ((nr) & 0x0f) : IH_GPIO_BASE + (nr))

 

 

用法举例:

 

假定使用GPIO14作为中断输入,则可以使用如下代码得到IRQ号:
OMAP_GPIO_IRQ(14);

同时,文件需要包含<mach/gpio.h>文件。

使用一个GPIO作为中断之前,需要进行请求,同时还需要设置方向,参考arch/arm/plat-omap/debug-devices.c文件中的使用范例:

 

smc91x_resources[1].start = gpio_to_irq(gpio);
smc91x_resources[1].end = gpio_to_irq(gpio);

status = gpio_request(gpio, "SMC91x irq");
        if(status < 0){
                printk(KERN_ERR "GPIO%d unavailable for smc91x IRQ\n", gpio)
                return status;
        }
        gpio_direction_input(gpio);

 

一个简单的能触发中断的范例:
先需要在mux.c和mux.h中设置GPIO156:

 

增加:
MUX_CFG_34XX("GPIO156", 0x18c, OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)/* for GPIO156 */
增加: GPIO156,

初始化:

//for test JP9 GP156 omap_cfg_reg(GPIO156);//
gpio_request(156,"JP156 Reset_Reg");
gpio_direction_input(156);
set_irq_type(OMAP_GPIO_IRQ(156),IRQ_TYPE_LEVEL_LOW);
enable_irq(gpio_to_irq(156));

申请中断:

request_irq(OMAP_GPIO_IRQ(156),&test_interrupt,0,"REG_REST",NULL);

中断处理函数:

static irqreturn_t test_interrupt(int irq,void *dev_id,struct pt_regs * regs)^M
{
        printk("#########ABING in INTR\n");
        return 0;
}

只要给GPIO156一个低电平,即可触发中断。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值