0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

CHANBAEK ? 來源:飛車俠 ? 作者:Pual Lin ? 2023-12-04 11:41 ? 次閱讀

本文我們要講的是如何通過 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

我們這里使用的是通過 DTS 文件來進(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 配置,接下來需要編寫驅(qū)動(dòng)代碼 myled.c ,首先建立好驅(qū)動(dòng)代碼框架:

  1. 構(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,  
    }  
};
  1. 注冊(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;  
}
  1. 注銷平臺(tái)驅(qū)動(dòng)
static void __exit myled_exit(void)  
{  
    /*3. 注銷平臺(tái)驅(qū)動(dòng)*/  
    platform_driver_unregister(&myled_driver);    
}
  1. 定義 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è)備信息來的  
    myled_class_devs = device_create(myled_class, NULL, MKDEV(major, 0), NULL, "myled"); /* /dev/myled */  


    return 0;     
}
  1. 定義 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;  
}
  1. 設(shè)定引腳編號(hào)
#define USER_LED      374       /*GPIO LED  GPIO4_22*/

以上便完成 GPIO 驅(qū)動(dòng)代碼,通過應(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 系列的開發(fā)內(nèi)容。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    452

    文章

    49938

    瀏覽量

    419621
  • 電平
    +關(guān)注

    關(guān)注

    5

    文章

    356

    瀏覽量

    39773
  • 引腳
    +關(guān)注

    關(guān)注

    16

    文章

    1162

    瀏覽量

    50018
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1182

    瀏覽量

    51738
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    i.MX6ULL 驅(qū)動(dòng)開發(fā)7—按鍵輸入捕獲與GPIO輸入配置與高低電平讀取

    本篇主要介紹了i.MX6ULL的按鍵檢測(cè)的使用,主要的知識(shí)點(diǎn)是設(shè)備樹的修改,以及GPIO的輸入配置與高低電平的讀取。
    的頭像 發(fā)表于 05-24 09:11 ?6023次閱讀
    <b class='flag-5'>i.MX</b>6ULL <b class='flag-5'>驅(qū)動(dòng)</b>開發(fā)7—按鍵輸入捕獲與<b class='flag-5'>GPIO</b>輸入<b class='flag-5'>配置</b>與高低<b class='flag-5'>電平</b>讀取

    imx8 gpio 上拉下拉配置

    imx8 gpio 上拉下拉配置,目的:通過 GPIO 驅(qū)動(dòng)
    發(fā)表于 07-22 08:02

    怎樣通過GPIO驅(qū)動(dòng)配置實(shí)現(xiàn)控制imx8芯片引腳電平變化

    imx8GPIO引腳編號(hào)設(shè)定與其他芯片有哪些不同?怎樣通過GPIO驅(qū)動(dòng)
    發(fā)表于 08-04 06:16

    如何將對(duì)i.MX8芯片的支持添加到rustBoot?

    我想為rustBoot添加對(duì) i.MX8 芯片的支持,我希望你能在以下問題中為我指出正確的方向。關(guān)于i.MX8 容器格式的文檔很少。我在哪里可以找到有關(guān)“容器布局”的詳細(xì)信息,即哪些字節(jié)表示什么以及
    發(fā)表于 03-30 07:48

    i.MX8以太網(wǎng)無法配置靜態(tài)IP如何解決?

    我在 i.MX8 pluse evk 上用 android 13 測(cè)試以太網(wǎng)功能。我發(fā)現(xiàn)了一個(gè)關(guān)于靜態(tài)ip的問題。更改以太網(wǎng)配置對(duì)話框后,我無法配置靜態(tài) IP。你能解決這個(gè)問題嗎?
    發(fā)表于 03-30 06:51

    i.MX8 SPI CS引腳不工作是怎么回事?

    我在 Variscite i.MX8 迷你 SoM 上運(yùn)行 Debian。我已經(jīng)用邏輯分析儀驗(yàn)證了除 CS 之外的所有 SPI 信號(hào)都在工作。無論我做什么,CS 總是很低。我嘗試通過命令行寫入
    發(fā)表于 03-31 06:38

    i.MX8 Mini的參考手冊(cè)框圖中為什么找不到SCU?

    對(duì)應(yīng)的i.MX8設(shè)備。所以我認(rèn)為這是 i.MX8 系列的一般特征。在 i.MX8 Mini 的參考手冊(cè)框圖中,我找不到 SCU。我假設(shè)此設(shè)備沒有 SCU 是否正確?我如何設(shè)置設(shè)備以實(shí)現(xiàn)
    發(fā)表于 04-19 10:39

    如何在i.mx8 EVK中使用LIN通信?

    i.mx8 EVK 中使用 LIN 通信
    發(fā)表于 04-20 07:20

    是否有任何文檔提供i.MX8的MTBF值?

    我正在搜索 i.Mx8 的 MTBF 值,但只找到 i.MX6 的 MTBF 值。 是否有任何文檔提供 i.MX8 的 MTBF 值? (例如 AN4724 - i.MX 6Dual/
    發(fā)表于 05-22 09:12

    無法在i.MX8文檔中找到有關(guān)DP引腳的任何信息,求分享

    我正在使用 MCIMX8M-EVK,我需要使用顯示端口 (DP)。i.MX8 處理器通過接口 HDMI 顯示接口支持 DP。 我的第一個(gè)問題是關(guān)于這個(gè)界面。我無法在 i.MX8 文檔
    發(fā)表于 05-30 06:18

    i.mx8系列是在哪里制造的?

    我沒有看到 i.mx8 處理器的原產(chǎn)國。據(jù)我了解,恩智浦在全球擁有一系列FAB。因此想知道是否有人可以分享 i.mx8 處理器的制造地點(diǎn)?
    發(fā)表于 06-01 07:22

    NXP i.MX8系列性能比較

    的、極高的可擴(kuò)展性。多個(gè)應(yīng)用可利用一個(gè)系統(tǒng)設(shè)計(jì),從而顯著節(jié)省系統(tǒng)成本。?i.MX 8Xi.MX 8X系列擴(kuò)展了i.MX 8系列的可伸縮性,包
    的頭像 發(fā)表于 07-01 18:52 ?3.5w次閱讀
    NXP <b class='flag-5'>i.MX8</b>系列性能比較

    淺談NXP i.MX8系列應(yīng)用處理器

    NXP i.MX系列應(yīng)用處理器是基于32和64位ARM技術(shù),提供多核解決方案,適用于多媒體和顯示應(yīng)用,具有高性能和低功耗、可擴(kuò)展、安全可靠等特點(diǎn)。i.MX系列家族成員包括i.MX28系列、i.
    發(fā)表于 04-02 09:59 ?5574次閱讀
    淺談NXP <b class='flag-5'>i.MX8</b>系列應(yīng)用處理器

    i.MX8 Android Automotive12 修改開機(jī) logo

    i.MX8 的 Android Automotive12 BSP 版本中,默認(rèn)的是 NXP 的開機(jī) LOGO 顯示,如果我們想要更改顯示自己的 logo,該如何配置?本篇文件給大家介紹如何更改 i.MX8 Android A
    的頭像 發(fā)表于 09-04 16:42 ?1455次閱讀
    <b class='flag-5'>i.MX8</b> Android Automotive12 修改開機(jī) logo

    恩智浦i.MX8處理器的集成電源設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《恩智浦i.MX8處理器的集成電源設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 09-18 14:25 ?0次下載
    恩智浦<b class='flag-5'>i.MX8</b>處理器的集成電源設(shè)計(jì)