本文我們要講的是如何通過 GPIO 驅(qū)動配置實現(xiàn)控制 i.MX8 芯片引腳電平變化。
硬件平臺:i.MX8QMMEK EVM Board
軟件環(huán)境:i.MX-P9.0.0_2.1.0-AUTO-GA
我們這里使用的是通過 DTS 文件來進行設(shè)備硬件資源的申請及分配,用戶可以在 fsl-imx8qm-mek.dtsi 文件下操作 DTS,文件所在目錄:kernel_imxarcharm64bootdtsfreescale,定義 myled節(jié)點 設(shè)備如下:
myled {
compatible = "fsl,myled";
pinctrl-names = "default";
pinctrl-0 = < &pinctrl_gpio_keys >;
};
使用的引腳編號為 GPIO4_22,引腳功能定義 pinctrl_gpio_keys 如下:
pinctrl_gpio_keys: myled{
fsl,pins = <
SC_P_QSPI1A_DQS_LSIO_GPIO4_IO22 0x00000021
>;
};
以上便完成 DTS 配置,接下來需要編寫驅(qū)動代碼 myled.c ,首先建立好驅(qū)動代碼框架:
- 構(gòu)建 platform_driver 結(jié)構(gòu)體及定義 compatible
static const struct of_device_id myled_ids[] = {
{ .compatible = "fsl,myled", },
{ },
};
static struct platform_driver myled_driver={
.probe = myled_probe,
.remove = myled_remove,
.driver = {
.name = "myled",
.of_match_table = myled_ids,
}
};
- 注冊平臺驅(qū)動
static int __init myled_init(void)
{
/*2. 注冊平臺驅(qū)動*/
platform_driver_register(&myled_driver);
return 0;
}
- 注銷平臺驅(qū)動
static void __exit myled_exit(void)
{
/*3. 注銷平臺驅(qū)動*/
platform_driver_unregister(&myled_driver);
}
- 定義 probe 函數(shù)
static int myled_probe(struct platform_device *pdev)
{
int ret;
ret = gpio_request(USER_LED, "LED");//第一個參數(shù),為要申請的引腳,第二個為你要定義的名字
if (ret)
{
printk("[pual] gpio_request error %s - %d -- n",__func__,__LINE__);
return ret;
}
gpio_direction_output(USER_LED, 1);
gpio_set_value(USER_LED, 1);
major = register_chrdev(0,"myled",&myled_drv_fops);
//創(chuàng)建設(shè)備信息,執(zhí)行后會出現(xiàn) /sys/class/myled
myled_class = class_create(THIS_MODULE, "myled");
//創(chuàng)建設(shè)備節(jié)點,就是根據(jù)上面的設(shè)備信息來的
myled_class_devs = device_create(myled_class, NULL, MKDEV(major, 0), NULL, "myled"); /* /dev/myled */
return 0;
}
- 定義 ioctl 函數(shù)
static long myled_drv_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
printk("gpio_ioctln");
switch(cmd) {
case 1:
if(arg == 0)
{
gpio_set_value(USER_LED, 0);
printk("led is offn");
break;
}else
{
gpio_set_value(USER_LED, 1);
printk("led is onn");
break;
}
default:
return -EINVAL;
}
return 0;
}
- 設(shè)定引腳編號
#define USER_LED 374 /*GPIO LED GPIO4_22*/
以上便完成 GPIO 驅(qū)動代碼,通過應(yīng)用程序便可以調(diào)用 ioctl 函數(shù)控制引腳電平變換。
注意:
i.MX8 GPIO 引腳編號設(shè)定與其他芯片會有所不同,總共有八組 GPIO,GPIO0~GPIO6,如下圖所示:

它們所對應(yīng)的編號分別為:

前面完成了對 i.MX8 GPIO 設(shè)備驅(qū)動的介紹,后續(xù)將會分享更多關(guān)于 i.MX8 系列的開發(fā)內(nèi)容。
-
芯片
+關(guān)注
關(guān)注
462文章
53310瀏覽量
456060 -
電平
+關(guān)注
關(guān)注
5文章
368瀏覽量
41090 -
引腳
+關(guān)注
關(guān)注
16文章
2025瀏覽量
54811 -
GPIO
+關(guān)注
關(guān)注
16文章
1308瀏覽量
55520
發(fā)布評論請先 登錄
i.MX6ULL 驅(qū)動開發(fā)7—按鍵輸入捕獲與GPIO輸入配置與高低電平讀取
怎樣通過GPIO驅(qū)動配置去實現(xiàn)控制imx8芯片引腳電平變化
如何將對i.MX8芯片的支持添加到rustBoot?
i.MX8以太網(wǎng)無法配置靜態(tài)IP如何解決?
i.MX8 SPI CS引腳不工作是怎么回事?
在i.MX8 Mini的參考手冊框圖中為什么找不到SCU?
是否有任何文檔提供i.MX8的MTBF值?
無法在i.MX8文檔中找到有關(guān)DP引腳的任何信息,求分享
i.mx8系列是在哪里制造的?
NXP i.MX8系列性能比較
淺談NXP i.MX8系列應(yīng)用處理器
i.MX8 Android Automotive12 修改開機 logo
恩智浦i.MX8處理器的集成電源設(shè)計
面向NXP i.MX8處理器的電源解決方案

如何通過GPIO驅(qū)動配置實現(xiàn)控制i.MX8芯片引腳電平變化
評論