设备树之GPIO和中断实例
概述
設備樹不僅僅描述常規硬件信息,還可以描述中斷,GPIO,DMA,PINCTRL,時鐘,電源管理等內核基礎設施信息及其使用情況,下面重點介紹中斷,GPIO等結點屬性
中斷控制器
對于中斷控制器結點,它提供如下屬性:
interrupt-controller 表明自己的身份為中斷控制器
interrupt-cells
該屬性與#address-cells屬性相似,它聲明了設備結點interrupt cells的個數。對于ARM GIC中斷控制器而言#interrupt-cells = <3>
具體含義如下:
第一個cell表示中斷類型,0代表SPI interrupts,1代表PPI interrupts
第二個cell表示中斷號碼,SPI interrupts的中斷號范圍是0 ~ 987,而PPI interrupts的中斷號范圍是0 ~ 15
第三個cell表示中斷觸發方式,它有4個值,分別為1,2,4,8
1表示上升沿觸發
2表示下降沿觸發
4表示高電平觸發
8表示低電平觸發
上圖為典型的中斷控制器結點
從上圖可知:
該中斷控制器包含4組寄存器,設備結點interrupt cells的個數為3
第一個cell表示中斷類型,第二個cell表示中斷號碼,第三個cell表示中斷觸發方式
irq_clr_reg = of_iomap(pdev->dev.of_node, 0);讀取設備樹中reg節點值對應地址值;
irq = platform_get_irq(pdev, 0);獲取中斷號;
status = devm_request_irq(&pdev->dev, irq, siglent_reg_handler, IRQF_TRIGGER_RISING,
?? ??? ??? ?"siglent_vnc", pdev);
當這個函數初始化中斷觸發方式強制為上升源中斷時,則設備樹中的配置無效;
設備結點與中斷相關的屬性?
interrupt-parent
指定設備結點所依附的中斷控制器,當結點沒有指定interrupt-parent時,則從父結點繼承
interrupts
指定設備結點的中斷號和觸發方式,該屬性cell個數,由它依附的中斷控制器#interrupt-cells決定,另外某些設備還可以使用多個中斷號
比如:某設備結點中斷類型為SPI interrupts,中斷號為168和169,高電平觸發,該設備結點的中斷屬性定義為
interrupts-parents = <&gic>;
interrupts = <0 168 4>, <0 169 4>;
上圖為watchdog結點信息,使用SPI interrupts方式,中斷號為75,高電平觸發
GPIO控制器
對于GPIO控制器結點,它提供如下屬性:
gpio-controller 表明自己的身份為gpio控制器
gpio-cells
該屬性與#address-cells相似,它聲明了設備結點gpio cells的個數。
一般gpio控制器#gpio-cells = <2>
第一個cell表示gpio號,第二個cell表示gpio有效電平
上圖為典型的gpio控制器結點
從上圖可知:
設備結點gpio cells的個數為2
第一個cell表示gpio號,第二個cell表示gpio有效電平
設備結點與gpio相關的屬性
上圖4為mmc1結點信息,該結點定義了cd-gpios屬性,該屬性表示使用219號gpio引腳(32*6+27)作為熱插拔探測引腳,有效電平為低電平。
在mmc控制器驅動中會通過如下方法獲取cd-gpios值
of_get_named_gpio(np, “cd-gpios”, 0);
?
?
總結
以上是生活随笔為你收集整理的设备树之GPIO和中断实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux设备支持ntfs类型U盘笔记
- 下一篇: SVN迁移历史日志记录笔记