rk3588 pinctrl子系统的gpio控制(自用笔记)

本文详细描述了如何在Rockchip平台中配置GPIO驱动程序,包括找到设备树节点、获取命名GPIO、请求和设置GPIO方向,最后通过示波器验证操作结果。
摘要由CSDN通过智能技术生成

首先配置设备树

mytest {
		compatible = "rockchip,gpio_test";
		gpio_led = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>; 
		status = "okay";
	};

驱动程序

/* gpio init */
	gpio_dev.nd = of_find_node_by_path("/mytest");
	if(gpio_dev.nd == NULL) {
		printk(KERN_EMERG"can't find mytest\r\n");
		goto err3;
	}

	gpio_dev.gpio_test = of_get_named_gpio(gpio_dev.nd,"gpio_led", 0);
	if(gpio_dev.gpio_test < 0) {
		printk(KERN_EMERG"can't get gpio_led");
		goto err3;
	}
	printk(KERN_EMERG"gpio test number = %d /\r\n",gpio_dev.gpio_test);

	ret = gpio_request(gpio_dev.gpio_test,"gpio_led");
	if(ret) {
		printk(KERN_EMERG"can't request gpio_led\r\n");
		goto err3;
	}

	ret = gpio_direction_output(gpio_dev.gpio_test,1);
	if(ret) {
		goto err4;
	}

	gpio_set_value(gpio_dev.gpio_test,0);输出低电平

    //中断申请
    // irqnum = gpio_to_irq(gpio_dev.gpio_test);//gpio中断
    //irqnum = irq_of_parse_and_map(gpio_dev.nd,index);//普通中断获取 
    //request_irq(irqnum/*中断号*/, irq_handler/*中断处理函数*/, IRQF_TRIGGER_RISING/*触发方式*/, "irq_name", &gpio_dev/*传递给中断处理函数的参数*/);

    // struct irq{
    //     irqreturn_t (*handler) (int, void *);
    // };
    
    //定时器初始化
    init_timer(&gpio_dev.timer);
    
    // gpio_dev.timer.function = timer_func;
    // gpio_dev.timer.data = (unsigned long)&gpio_dev;
    

使用示波器验证结果成功

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值