裝置樹不僅僅描述常規硬體資訊,還可以描述中斷,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,高電平觸發,該裝置結點的中斷屬性定義為
上圖為watchdog結點資訊,使用spi interrupts方式,中斷號為75,高電平觸發
對於gpio控制器結點,它提供如下屬性:
gpio-controller 表明自己的身份為gpio控制器
該屬性與#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和中斷操作
中斷部分 1.關於gpio的操作 1 gpio request gpio num,null 註冊 gpio 2 設定gpio方向 對於輸入 gpio direction input gpio num 對於輸出 gpio direction output gpio num,gpio out val 3...
Linux裝置驅動之《玩轉GPIO》
在linux裝置驅動之 點亮一盞led 中,編寫了ioctl c.h這樣的標頭檔案,在本文中將繼續使用這一頭檔案,如下 然後則是驅動模組程式,如下所示 這裡只說明與前面模組程式的區別,首先是ioctl test函式 static int ioctl test struct inode inode,s...
裝置樹之I2C和SPI例項
clock frequency i2c匯流排頻率,常用值有100000,400000 i2c具體例項如下圖所示 圖1圖2上圖1描述i2c控制器屬性,比如暫存器屬性,中斷屬性 從中斷屬性可知 i2c控制器使用spi interrupts方式,中斷號為51,高電平觸發 上圖2描述i2c控制器子結點屬性 ...