本文我們要講的是如何通過(guò) GPIO 驅(qū)動(dòng)配置實(shí)現(xiàn)控制 i.MX8 芯片引腳電平變化。
硬件平臺(tái):i.MX8QMMEK EVM Board
軟件環(huán)境:i.MX-P9.0.0_2.1.0-AUTO-GA
我們這里使用的是通過(guò) DTS 文件來(lái)進(jìn)行設(shè)備硬件資源的申請(qǐng)及分配,用戶可以在 fsl-imx8qm-mek.dtsi 文件下操作 DTS,文件所在目錄:kernel_imxarcharm64bootdtsfreescale,定義 myled節(jié)點(diǎn) 設(shè)備如下:
myled {
compatible = "fsl,myled";
pinctrl-names = "default";
pinctrl-0 = < &pinctrl_gpio_keys >;
};
使用的引腳編號(hào)為 GPIO4_22,引腳功能定義 pinctrl_gpio_keys 如下:
pinctrl_gpio_keys: myled{
fsl,pins = <
SC_P_QSPI1A_DQS_LSIO_GPIO4_IO22 0x00000021
>;
};
以上便完成 DTS 配置,接下來(lái)需要編寫(xiě)驅(qū)動(dòng)代碼 myled.c ,首先建立好驅(qū)動(dòng)代碼框架:
- 構(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,
}
};
- 注冊(cè)平臺(tái)驅(qū)動(dòng)
static int __init myled_init(void)
{
/*2. 注冊(cè)平臺(tái)驅(qū)動(dòng)*/
platform_driver_register(&myled_driver);
return 0;
}
- 注銷(xiāo)平臺(tái)驅(qū)動(dòng)
static void __exit myled_exit(void)
{
/*3. 注銷(xiāo)平臺(tái)驅(qū)動(dòng)*/
platform_driver_unregister(&myled_driver);
}
- 定義 probe 函數(shù)
static int myled_probe(struct platform_device *pdev)
{
int ret;
ret = gpio_request(USER_LED, "LED");//第一個(gè)參數(shù),為要申請(qǐng)的引腳,第二個(gè)為你要定義的名字
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í)行后會(huì)出現(xiàn) /sys/class/myled
myled_class = class_create(THIS_MODULE, "myled");
//創(chuàng)建設(shè)備節(jié)點(diǎn),就是根據(jù)上面的設(shè)備信息來(lái)的
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è)定引腳編號(hào)
#define USER_LED 374 /*GPIO LED GPIO4_22*/
以上便完成 GPIO 驅(qū)動(dòng)代碼,通過(guò)應(yīng)用程序便可以調(diào)用 ioctl 函數(shù)控制引腳電平變換。
注意:
i.MX8 GPIO 引腳編號(hào)設(shè)定與其他芯片會(huì)有所不同,總共有八組 GPIO,GPIO0~GPIO6,如下圖所示:
它們所對(duì)應(yīng)的編號(hào)分別為:
前面完成了對(duì) i.MX8 GPIO 設(shè)備驅(qū)動(dòng)的介紹,后續(xù)將會(huì)分享更多關(guān)于 i.MX8 系列的開(kāi)發(fā)內(nèi)容。
-
芯片
+關(guān)注
關(guān)注
456文章
51272瀏覽量
427760 -
電平
+關(guān)注
關(guān)注
5文章
361瀏覽量
40026 -
引腳
+關(guān)注
關(guān)注
16文章
1220瀏覽量
50952 -
GPIO
+關(guān)注
關(guān)注
16文章
1217瀏覽量
52434
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
i.MX6ULL 驅(qū)動(dòng)開(kāi)發(fā)7—按鍵輸入捕獲與GPIO輸入配置與高低電平讀取
![<b class='flag-5'>i.MX</b>6ULL <b class='flag-5'>驅(qū)動(dòng)</b>開(kāi)發(fā)7—按鍵輸入捕獲與<b class='flag-5'>GPIO</b>輸入<b class='flag-5'>配置</b>與高低<b class='flag-5'>電平</b>讀取](https://file.elecfans.com//web2/M00/45/54/poYBAGKLpr6AdGfGAADTB0hubAU186.png)
怎樣通過(guò)GPIO驅(qū)動(dòng)配置去實(shí)現(xiàn)控制imx8芯片引腳電平變化
如何將對(duì)i.MX8芯片的支持添加到rustBoot?
i.MX8以太網(wǎng)無(wú)法配置靜態(tài)IP如何解決?
i.MX8 SPI CS引腳不工作是怎么回事?
在i.MX8 Mini的參考手冊(cè)框圖中為什么找不到SCU?
無(wú)法在i.MX8文檔中找到有關(guān)DP引腳的任何信息,求分享
i.mx8系列是在哪里制造的?
NXP i.MX8系列性能比較
![NXP <b class='flag-5'>i.MX8</b>系列性能比較](https://file.elecfans.com/web1/M00/97/94/pIYBAF0MQ9KAakSGAAD7n1p3eTY356.jpg)
淺談NXP i.MX8系列應(yīng)用處理器
![淺談NXP <b class='flag-5'>i.MX8</b>系列應(yīng)用處理器](https://file.elecfans.com/web1/M00/E9/2E/pIYBAGBmejqAPxtdAAG3zbxxg3s434.png)
i.MX8 Android Automotive12 修改開(kāi)機(jī) logo
![<b class='flag-5'>i.MX8</b> Android Automotive12 修改開(kāi)機(jī) logo](https://file1.elecfans.com/web2/M00/A1/D3/wKgZomT4JaqAV512AABbq3NvQKs823.png)
恩智浦i.MX8處理器的集成電源設(shè)計(jì)
![恩智浦<b class='flag-5'>i.MX8</b>處理器的集成電源設(shè)計(jì)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
面向NXP i.MX8處理器的電源解決方案
![面向NXP <b class='flag-5'>i.MX8</b>處理器的電源解決方案](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論