• gpio dts


    一、gpio把写reg的一大堆变成简单的

        /* 2、 获取设备树中的gpio属性,得到LED所使用的LED编号 */
        gpioled.led_gpio = of_get_named_gpio(gpioled.nd, "led-gpio", 0);
        if(gpioled.led_gpio < 0) {
            printk("can't get led-gpio");
            return -EINVAL;
        }
        printk("led-gpio num = %d\r\n", gpioled.led_gpio);
       
    /* 3、设置GPIO1_IO03为输出,并且输出高电平,默认关闭LED灯 */ ret = gpio_direction_output(gpioled.led_gpio, 1); if(ret < 0) { printk("can't set gpio!\r\n"); }


    写的时候
    if(ledstat == LEDON) { gpio_set_value(dev->led_gpio, 0); /* 打开LED灯 */ } else if(ledstat == LEDOFF) { gpio_set_value(dev->led_gpio, 1); /* 关闭LED灯 */ }

    而原来

        /* 初始化LED */
    #if 0
        /* 1、寄存器地址映射 */
        IMX6U_CCM_CCGR1 = ioremap(regdata[0], regdata[1]);
        SW_MUX_GPIO1_IO03 = ioremap(regdata[2], regdata[3]);
          SW_PAD_GPIO1_IO03 = ioremap(regdata[4], regdata[5]);
        GPIO1_DR = ioremap(regdata[6], regdata[7]);
        GPIO1_GDIR = ioremap(regdata[8], regdata[9]);
    #else
        IMX6U_CCM_CCGR1 = of_iomap(dtsled.nd, 0);
        SW_MUX_GPIO1_IO03 = of_iomap(dtsled.nd, 1);
          SW_PAD_GPIO1_IO03 = of_iomap(dtsled.nd, 2);
        GPIO1_DR = of_iomap(dtsled.nd, 3);
        GPIO1_GDIR = of_iomap(dtsled.nd, 4);
    #endif
    
        /* 2、使能GPIO1时钟 */
        val = readl(IMX6U_CCM_CCGR1);
        val &= ~(3 << 26);    /* 清楚以前的设置 */
        val |= (3 << 26);    /* 设置新值 */
        writel(val, IMX6U_CCM_CCGR1);
    
        /* 3、设置GPIO1_IO03的复用功能,将其复用为
         *    GPIO1_IO03,最后设置IO属性。
         */
        writel(5, SW_MUX_GPIO1_IO03);
        
        /*寄存器SW_PAD_GPIO1_IO03设置IO属性
         *bit 16:0 HYS关闭
         *bit [15:14]: 00 默认下拉
         *bit [13]: 0 kepper功能
         *bit [12]: 1 pull/keeper使能
         *bit [11]: 0 关闭开路输出
         *bit [7:6]: 10 速度100Mhz
         *bit [5:3]: 110 R0/6驱动能力
         *bit [0]: 0 低转换率
         */
        writel(0x10B0, SW_PAD_GPIO1_IO03);
    
        /* 4、设置GPIO1_IO03为输出功能 */
        val = readl(GPIO1_GDIR);
        val &= ~(1 << 3);    /* 清除以前的设置 */
        val |= (1 << 3);    /* 设置为输出 */
        writel(val, GPIO1_GDIR);
    
        /* 5、默认关闭LED */
        val = readl(GPIO1_DR);
        val |= (1 << 3);    
        writel(val, GPIO1_DR);

    二、 dts和直接的区别

  • 相关阅读:
    JavaScript Location对象
    JavaScript History 对象
    JavaScript Navigator 对象
    C#实现windows系统重启、关机
    JavaScript ObjectURL | URL.createObjectURL和URL.revokeObjectURL
    依赖注入在 dotnet core 中实现与使用:4. 集成 Autofac
    Raid5的搭建、测试、取消
    Linux磁盘阵列(RAID)概述与实战
    Zookeeper超级用户使用案例:How to remove ACL protected ZK Node
    Kafka 权限管理实战(最全整理)
  • 原文地址:https://www.cnblogs.com/cnchengv/p/16562352.html
Copyright © 2020-2023  润新知