linux 应用层gpio中断_如何在嵌入式Linux中检测GPIO线路上的中断?
在pandaboard OMAP4中,GPIO_39上每隔10ms產生一次中斷.我已在Linux驅動程序代碼中為此注冊了處理程序,但由于未檢測到中斷,因此未處理該處理程序.
我確保在硬件級別(通過探測gpio引腳)確實正在生成中斷.只是軟件無法檢測到它.
我在驅動程序代碼中有以下內容.
#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屬于存儲體GPIO2,相應的中斷號為32.但是,gpio_to_irq()的返回值為199.這是另一個引起關注的原因.
如果代碼中有問題或錯過了某些內容,請告訴我.
總結
以上是生活随笔為你收集整理的linux 应用层gpio中断_如何在嵌入式Linux中检测GPIO线路上的中断?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美丽的窗花java分形_美丽的窗花教案
- 下一篇: 手动添加linux用户,Linux入门教