## GPIO子系统
### 驱动使用
定义设备树
~~~
gpioled {
#address-cells = <1>;
#size-cells = <1>;
compatible = "atkalpha-gpioled";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_led>;
led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
status = "okay";
};
~~~
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)
驱动使用
~~~
of_get_named_gpio(leddev.node, "led-gpio", 0);
gpio_request(leddev.led0, "led0");
gpio_direction_output(leddev.led0, 1);
gpio_set_value(leddev.led0, 0);
~~~
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)
## pinctrl子系统
### 驱动使用
定义设备树
~~~
&pinctrl@11000000 {
led_demo: led{
samsung,pins = "gpm4-0", "gpm4-1" ,"gpm4-2", "gpm4-3";
samsung,pin-function = <0x1>; //1为输出
samsung,pin-pud = <0x0>; //没有上拉
samsung,pin-drv = <0x0>; //驱动强度?
};
};
led_pin {
compatible = "tiny4412,led_demo";
pinctrl-names = "led_demo";
pinctrl-0 = <&led_demo>;
tiny4412,int_gpio1 = <&gpm4 0 GPIO_ACTIVE_HIGH>;
tiny4412,int_gpio2 = <&gpm4 1 GPIO_ACTIVE_HIGH>;
tiny4412,int_gpio3 = <&gpm4 2 GPIO_ACTIVE_HIGH>;
tiny4412,int_gpio4 = <&gpm4 3 GPIO_ACTIVE_HIGH>;
};
~~~
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)
驱动使用
如果 pinctrl-names 为 “default”,那么这种功能状态将设置为默认的引脚状态,代码中无需处理。
~~~
pctrl = devm_pinctrl_get(dev);
pstate = pinctrl_lookup_state(pctrl, "led_demo");
pinctrl_select_state(pctrl, pstate);//设置为输出模式
printk("enter %s\n",__func__);
led1 = of_get_named_gpio(dev->of_node, "tiny4412,int_gpio1", 0);;
led2 = of_get_named_gpio(dev->of_node, "tiny4412,int_gpio2", 0);;
led3 = of_get_named_gpio(dev->of_node, "tiny4412,int_gpio3", 0);;
led4 = of_get_named_gpio(dev->of_node, "tiny4412,int_gpio4", 0);;
devm_gpio_request_one(dev, led1, GPIOF_OUT_INIT_HIGH, "LED1");
devm_gpio_request_one(dev, led2, GPIOF_OUT_INIT_HIGH, "LED2");
devm_gpio_request_one(dev, led3, GPIOF_OUT_INIT_HIGH, "LED3");
devm_gpio_request_one(dev, led4, GPIOF_OUT_INIT_HIGH, "LED4");
~~~
![](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)
- stm32单片机
- arm体系结构和汇编
- arm交叉编译器安装
- gcc和cmake优化等级
- u-boot
- uboot简介
- uboot基础使用和命令操作
- uboot-spl编译和启动流程
- uboot-编译和启动流程
- uboot fdt设备树
- uboot驱动模型
- dm-gpio
- 内核移植
- linux patch
- 内核编译
- 驱动开发
- uboot传参到内核
- gpio pinctrl子系统
- 常用头文件和功能
- linux内核和内核编程
- 设备树教程
- 字符设备驱动
- 并发与竞争
- 阻塞和非阻塞
- Vpu/视频编解码
- I2C
- USB
- debugfs
- linux ethernet over usb
- 根文件系统构建
- buildroot
- ubuntu
- debia
- 嵌入式应用开发
- 热插拔事件管理
- hostapd创建热点
- netlink usb插拔
- mdev
- gpio使用
- 路由 功能配置 dhcp server nat
- linux获取cpu温度
- Qt编程
- 第三方库
- Jeston
- nano编译烧写
- jtop
- 数据库
- mysql
- 安装
- 常用sql操作
- mysql常用语句
- mysql常用命令