目前小弟我遇到一個問題,
請問GPIO1_12中斷在Uboot底下,
GPIO有變化就會進入中斷,
但是A53開始跑Boot與Kernel之後,
GPIO有變化,
但GPIO中斷就不能夠進入,
查過A53都沒有人使用這隻GPIO腳位,
不清楚是不是A53開始跑Boot與Kernel要加入什麼指令才可以繼續使用?
hi
hi weidong , i want to port GPIO_LED into L5.10.35 for imx 8 qxp mek b0 , how to do , please help me , please private me or post reply me please///
Hi Lin,
1、如果在M4中使用这GPIO,那么你不能再u-boot/linux中再次使用它。
2、在fsl-imx8mq-evk.dts中,有很多节点使用了GPIO中断配置,你是可以借鉴的。
(1)你首先需要把GPIO1_12复用好
这取决于你要把它从哪个CPU引脚复用出来。你可以打开linux/include/dt-bindings/pinctrl/pins-imx8mq.h文件,GPIO1_IO12可以从这些引脚复用出来:
MX8MQ_IOMUXC_GPIO1_IO12_GPIO1_IO12
MX8MQ_IOMUXC_GPIO1_IO12_USB1_OTG_PWR
MX8MQ_IOMUXC_GPIO1_IO12_SDMA2_EXT_EVENT1
MX8MQ_IOMUXC_GPIO1_IO12_CCMSRCGPCMIX_OUT1
MX8MQ_IOMUXC_GPIO1_IO12_CSU_CSU_ALARM_AUT0
那么,你需要用哪个,要看你的原理图中使用的引脚。加在fsl-imx8mq-evk.dts中的这里,就可以了。
imx8mq-evk {
pinctrl_hog: hoggrp {
fsl,pins = <
MX8MQ_IOMUXC_NAND_READY_B_GPIO3_IO16 0x19
MX8MQ_IOMUXC_NAND_WE_B_GPIO3_IO17 0x19
MX8MQ_IOMUXC_NAND_WP_B_GPIO3_IO18 0x19
/* 加在这里,复用它,比如用GPIO1_IO12引脚复用 */
MX8MQ_IOMUXC_GPIO1_IO12_GPIO1_IO12 0x19
>;
};
(2)把GPIO1_IO12配置为中断响应引脚
这个GPIO连接的设备,会有一个driver,在dts里加载driver的时候,节点中配置这个GPIO中断,比如,下面是imx8mq device tree中的一个配置,你可以参考它:
typec_ptn5100: ptn5110@50 {
compatible = "usb,tcpci";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_typec>;
reg = <0x50>;
interrupt-parent = <&gpio3>;
interrupts = <3 8>;
ss-sel-gpios = <&gpio3 15 GPIO_ACTIVE_HIGH>;
src-pdos = <0x380190c8>;
snk-pdos = <0x380190c8 0x3802d0c8>;
max-snk-mv = <9000>;
max-snk-ma = <2000>;
op-snk-mw = <9000>;
max-snk-mw = <18000>;
port-type = "drp";
default-role = "sink";
};
interrupt-parent = <&gpio3>; 你的要修改为&gpio1
interrupts = <3 8>;
这里的3,是指GPIO3_IO03,那么你的需要把它修改为12, 而后面的8,见下面解释:
1 = low-to-high edge triggered
2 = high-to-low edge triggered
4 = active high level-sensitive
8 = active low level-sensitive
因此interrupts第二个数字,是指中断的触发方式,你可以根据你的情况选择一个(1/2/4/8)
(3)在driver中获得节点GPIO信息,并申请中断
driver加载时,probe的时候,要得到dts配置信息,得到这个GPIO的配置,并且使用request_irq( ) function向系统申请中断。
(4)中断响应interrupt service routine
有中断,就必须要这个interrupt service routine,也可以把它理解为中断发生时,要执行的一个函数,在request_irq( )参数中,必须要给出interrupt service routine的函数名字(即它的地址)
在linux中,使用一个中断,上面的步骤是必须要有的,你可以根据i.mx8mq的bsp中,节点配置找到对应的driver,然后找到driver中GPIO中断处理做为学习的例子,这样的例子非常多。
Hope above information is helpf for you.
Have a nice day!
BR,
Weidong
Hi weidong_sun 你好
我的平台是 imx8mm 想要使用 GPIO4_14 當作中斷引腳 (圖 PA / PB), 當我執行
err = request_threaded_irq(spi->irq, NULL, mcp251xfd_irq, IRQF_ONESHOT, dev_name(&spi->dev),
priv);
中斷 PIN 腳在高準位, 卻發生中斷, 導致 call trace. 請問這可以協
PA :
PB:
PC :
Hi weidong_sun 你好
我的平台是 imx8mm 想要使用 GPIO4_14 當作中斷引腳 (圖 PA / PB), 當我執行
err = request_threaded_irq(spi->irq, NULL, mcp251xfd_irq, IRQF_ONESHOT, dev_name(&spi->dev),
priv);
中斷 PIN 腳在高準位, 卻發生中斷, 導致 call trace. 請問這可以協
PA :
PB:
PC :