0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何通过GPIO驱动配置实现控制i.MX8芯片引脚电平变化

CHANBAEK 来源:飞车侠 作者:Pual Lin 2023-12-04 11:41 次阅读

本文我们要讲的是如何通过 GPIO 驱动配置实现控制 i.MX8 芯片引脚电平变化。

硬件平台:i.MX8QMMEK EVM Board

软件环境:i.MX-P9.0.0_2.1.0-AUTO-GA

我们这里使用的是通过 DTS 文件来进行设备硬件资源的申请及分配,用户可以在 fsl-imx8qm-mek.dtsi 文件下操作 DTS,文件所在目录:kernel_imxarcharm64bootdtsfreescale,定义 myled节点 设备如下:

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 配置,接下来需要编写驱动代码 myled.c ,首先建立好驱动代码框架:

  1. 构建 platform_driver 结构体及定义 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. 注册平台驱动
static int __init myled_init(void)  
{  
    /*2. 注册平台驱动*/  
    platform_driver_register(&myled_driver);  
    return 0;  
}
  1. 注销平台驱动
static void __exit myled_exit(void)  
{  
    /*3. 注销平台驱动*/  
    platform_driver_unregister(&myled_driver);    
}
  1. 定义 probe 函数
static  int myled_probe(struct platform_device *pdev)  
{  
    int ret;  
    ret = gpio_request(USER_LED, "LED");//第一个参数,为要申请的引脚,第二个为你要定义的名字  
    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);  


    //创建设备信息,执行后会出现 /sys/class/myled  
    myled_class = class_create(THIS_MODULE, "myled");  


    //创建设备节点,就是根据上面的设备信息来的  
    myled_class_devs = device_create(myled_class, NULL, MKDEV(major, 0), NULL, "myled"); /* /dev/myled */  


    return 0;     
}
  1. 定义 ioctl 函数
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. 设定引脚编号
#define USER_LED      374       /*GPIO LED  GPIO4_22*/

以上便完成 GPIO 驱动代码,通过应用程序便可以调用 ioctl 函数控制引脚电平变换。

注意:

i.MX8 GPIO 引脚编号设定与其他芯片会有所不同,总共有八组 GPIO,GPIO0~GPIO6,如下图所示:

图片

它们所对应的编号分别为:

图片

前面完成了对 i.MX8 GPIO 设备驱动的介绍,后续将会分享更多关于 i.MX8 系列的开发内容。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 芯片
    +关注

    关注

    455

    文章

    50714

    浏览量

    423136
  • 电平
    +关注

    关注

    5

    文章

    360

    浏览量

    39883
  • 引脚
    +关注

    关注

    16

    文章

    1193

    浏览量

    50409
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52051
收藏 人收藏

    评论

    相关推荐

    i.MX6ULL 驱动开发7—按键输入捕获与GPIO输入配置与高低电平读取

    本篇主要介绍了i.MX6ULL的按键检测的使用,主要的知识点是设备树的修改,以及GPIO的输入配置与高低电平的读取。
    的头像 发表于 05-24 09:11 6213次阅读
    <b class='flag-5'>i.MX</b>6ULL <b class='flag-5'>驱动</b>开发7—按键输入捕获与<b class='flag-5'>GPIO</b>输入<b class='flag-5'>配置</b>与高低<b class='flag-5'>电平</b>读取

    imx8 gpio 上拉下拉配置

    imx8 gpio 上拉下拉配置,目的:通过 GPIO 驱动
    发表于 07-22 08:02

    怎样通过GPIO驱动配置实现控制imx8芯片引脚电平变化

    imx8GPIO引脚编号设定与其他芯片有哪些不同?怎样通过GPIO驱动
    发表于 08-04 06:16

    如何将对i.MX8芯片的支持添加到rustBoot?

    我想为rustBoot添加对 i.MX8 芯片的支持,我希望你能在以下问题中为我指出正确的方向。关于i.MX8 容器格式的文档很少。我在哪里可以找到有关“容器布局”的详细信息,即哪些字节表示什么以及
    发表于 03-30 07:48

    i.MX8以太网无法配置静态IP如何解决?

    我在 i.MX8 pluse evk 上用 android 13 测试以太网功能。我发现了一个关于静态ip的问题。更改以太网配置对话框后,我无法配置静态 IP。你能解决这个问题吗?
    发表于 03-30 06:51

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

    我在 Variscite i.MX8 迷你 SoM 上运行 Debian。我已经用逻辑分析仪验证了除 CS 之外的所有 SPI 信号都在工作。无论我做什么,CS 总是很低。我尝试通过命令行写入
    发表于 03-31 06:38

    i.MX8 Mini的参考手册框图中为什么找不到SCU?

    对应的i.MX8设备。所以我认为这是 i.MX8 系列的一般特征。在 i.MX8 Mini 的参考手册框图中,我找不到 SCU。我假设此设备没有 SCU 是否正确?我如何设置设备以实现
    发表于 04-19 10:39

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

    i.mx8 EVK 中使用 LIN 通信
    发表于 04-20 07:20

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

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

    无法在i.MX8文档中找到有关DP引脚的任何信息,求分享

    我正在使用 MCIMX8M-EVK,我需要使用显示端口 (DP)。i.MX8 处理器通过接口 HDMI 显示接口支持 DP。 我的第一个问题是关于这个界面。我无法在 i.MX8 文档
    发表于 05-30 06:18

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

    我没有看到 i.mx8 处理器的原产国。据我了解,恩智浦在全球拥有一系列FAB。因此想知道是否有人可以分享 i.mx8 处理器的制造地点?
    发表于 06-01 07:22

    NXP i.MX8系列性能比较

    的、极高的可扩展性。多个应用可利用一个系统设计,从而显着节省系统成本。 i.MX 8Xi.MX 8X系列扩展了i.MX 8系列的可伸缩性,包
    的头像 发表于 07-01 18:52 3.5w次阅读
    NXP <b class='flag-5'>i.MX8</b>系列性能比较

    浅谈NXP i.MX8系列应用处理器

    NXP i.MX系列应用处理器是基于32和64位ARM技术,提供多核解决方案,适用于多媒体和显示应用,具有高性能和低功耗、可扩展、安全可靠等特点。i.MX系列家族成员包括i.MX28系列、i.
    发表于 04-02 09:59 5666次阅读
    浅谈NXP <b class='flag-5'>i.MX8</b>系列应用处理器

    i.MX8 Android Automotive12 修改开机 logo

    i.MX8 的 Android Automotive12 BSP 版本中,默认的是 NXP 的开机 LOGO 显示,如果我们想要更改显示自己的 logo,该如何配置?本篇文件给大家介绍如何更改 i.MX8 Android A
    的头像 发表于 09-04 16:42 1559次阅读
    <b class='flag-5'>i.MX8</b> Android Automotive12 修改开机 logo

    恩智浦i.MX8处理器的集成电源设计

    电子发烧友网站提供《恩智浦i.MX8处理器的集成电源设计.pdf》资料免费下载
    发表于 09-18 14:25 0次下载
    恩智浦<b class='flag-5'>i.MX8</b>处理器的集成电源设计