linux 应用层gpio中断_如何在嵌入式Linux中检测GPIO线路上的中断?
在pandaboard OMAP4中,GPIO_39上每隔10ms產(chǎn)生一次中斷.我已在Linux驅(qū)動(dòng)程序代碼中為此注冊(cè)了處理程序,但由于未檢測(cè)到中斷,因此未處理該處理程序.
我確保在硬件級(jí)別(通過探測(cè)gpio引腳)確實(shí)正在生成中斷.只是軟件無法檢測(cè)到它.
我在驅(qū)動(dòng)程序代碼中有以下內(nèi)容.
#define GPIO_NO 39
iowrite16(0x3,gpio_39_address + 2); /* Configured the pin 22 to be used as gpio. */
ret = gpio_request(GPIO_NO,"Claiming GPIO");
if(ret < 0)
{
printk(KERN_ALERT "%s: Claiming GPIO_%d failed\n",__func__,GPIO_NO);
return -1;
}
else
{
printk(KERN_INFO "%s: Claiming GPIO_%d successful\n",GPIO_NO);
}
ret = gpio_direction_input(GPIO_NO);
if(ret < 0)
{
printk(KERN_INFO "%s: Setting GPIO direction to input failed\n",__func__);
return -1;
}
else
{
printk(KERN_INFO "%s: Direction of GPIO_%d set to input\n",GPIO_NO);
}
GPIO_IRQ = gpio_to_irq(GPIO_NO);
if(GPIO_IRQ < 0)
{
printk(KERN_INFO "%s: Mapping GPIO_%d to IRQ failed\n",GPIO_NO);
return -1;
}
else
{
printk(KERN_INFO "%s: Mapping GPIO_%d to IRQ_%d successful\n",GPIO_NO,GPIO_IRQ);
}
if((request_irq(GPIO_IRQ,ten_ms_int,IRQF_TRIGGER_FALLING,DEVICE_NAME,NULL)))
{
printk(KERN_ALERT "%s: requeseting GPIO_IRQ %d failed\n",GPIO_IRQ);
return -1;
}
else
{
printk(KERN_INFO "%s: requesting GPIO_IRQ %d successful\n",GPIO_IRQ);
}
irqreturn_t ten_ms_int(int irq,void *dev_id)
{
T_UINT32 l;
/* Enable spi channel */
l = ioread32(spi_base + SPI_CHCONF0);
l |= SPI_CHCONF0_FORCE;
iowrite32(l,(spi_base + SPI_CHCONF0));
l = ioread32(spi_base + SPI_CHCTRL0);
l |= SPI_CHCTRL_EN;
iowrite32(l,(spi_base + SPI_CHCTRL0));
/* Enable dma channel 0 */
l = ioread32(sdma_base + SDMA_CCR(CHANNEL0));
l |= SDMA_CCR_ENABLE;
iowrite32(l,sdma_base + SDMA_CCR(CHANNEL0));
/* Enable dma channel 1 */
l = ioread32(sdma_base + SDMA_CCR(CHANNEL1));
l |= SDMA_CCR_ENABLE;
iowrite32(l,sdma_base + SDMA_CCR(CHANNEL1));
//printk(KERN_INFO "%s: 10ms interrupt detected %d\n",irq); /* I know that I've to remove this printk statement */
return IRQ_HANDLED;
}
GPIO_39屬于存儲(chǔ)體GPIO2,相應(yīng)的中斷號(hào)為32.但是,gpio_to_irq()的返回值為199.這是另一個(gè)引起關(guān)注的原因.
如果代碼中有問題或錯(cuò)過了某些內(nèi)容,請(qǐng)告訴我.
總結(jié)
以上是生活随笔為你收集整理的linux 应用层gpio中断_如何在嵌入式Linux中检测GPIO线路上的中断?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美丽的窗花java分形_美丽的窗花教案
- 下一篇: 利用正则匹配数字后边的字符_图解正则——