完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1、内核中的GPIO使用(Gpio API in kernel)
1)调用 of_get_named_gpio 从 DTS 节点中获取映射后的 gpio 号 2)调用 gpio_request 向 kernel 申请 gpio 使用。 3)调用 gpio_direction_output / gpio_direction_input 设置输出/输入方向 4)调用 gpio_set_value / gpio_get_value 设置/获取 gpio 值 2、Pinctrl API in kernel 1)在 DTS 中定义 pin 的功能 2)调用 devm_pinctrl_get 函数获取 pinctrl 节点。 3)调用 pinctrl_lookup_state 函数获取 pinctrl 节点中定义的 pin 状态 pinctrl_state 4)调用 pinctrl_select_state 函数设置 pin 的状态 pinctrl_state。 3、内核中断管脚的使用(GPIO EINT API in kernel) 在 dts 中定义中断相关信息。 1)调用 of_property_read_u32_array 函数,获取 debounce(包含 gpio 号+debounce 时间(默认设 置为 0))。 2)调用 gpio_set_debounce 函数,设置获取到的 debounce 3)调用 irq_of_parse_and_map 函数,把 gpio 号映射为中断号 4) 调用 request_irq 函数,注册中断函数。 在 在 dts 里定义外部中断的传参表示如下: interrupt = <0 IRQ_TYPE_EDGE_FALLING 0 0>; 第一个参数表示外部中断的中断号。 第一个参数表示外部中断的中断号。 第二个参数表示中断触发方式。 第二个参数表示中断触发方式。 第二个参数表示 第二个参数表示 GPIO 引脚号。 第四个参数表示管脚复用功能。(用作外部中断时,必须指定成 第四个参数表示管脚复用功能。(用作外部中断时,必须指定成 GPIO mode) )。 在代码中调用: 4、GPIO在preloader/lk/arm2中使用(GPIO Interface in arm2/lk) Lk 中可通过 dws 配置。另外,lk 与 arm2 可通过接口设置,如下: 1)将 gpio 配置为普通 gpio,并配置其输入/输出方向 mt_set_gpio_mode(pinnum,0); //将 pinmum 对应的 pin 配置为普通 GPIO. mt_set_gpio_dir(pinnum,dir) //配置 pinnum 对应的 pin 输入/输出方向(dir :0(输入),1(输出)) 2)若 gpio 为输入,获得其输入电平状态 mt_get_gpio_in(pinnum);//配置 pinnum 对应的的输出高电平或低电平。 3)若 gpio 为输出,配置其输出电平 mt_set_gpio_out(pinnum, output);//配置 pinnum 对应的的输出高电平或低电平。 4)配置 gpio 内部上拉、下拉 mt_set_gpio_pull_enable(pinnum,enable); //使能 pinnum 对应 Pin 的 pullup/pulldown mt_set_gpio_pull_select(pinnum, select); //配置 pinnum 对应的 Pin 默认上拉/下拉 (0:pulldown,1:pullup) 5、使用 DWS 配置 GPIO 用户可以通过使用 DWS 工具配置 Preloader、LK 及 Kernel 的 GPIO 管脚默认功能: DWS 工具所在目录:vendormediatekproprietaryscriptsdctDrvGen.exe Preloader 配置文件所在路径: vendormediatekproprietarybootloaderpreloadercustomac8257_demo_1g_32dctdct codegen.dws Kernel 配置文件所在路径(以 8257 demo 1g 32bit 平台为例): kernel-4.9driversmiscmediatekdwsac8257ac8257_demo_1g_32.dws LK 使用 Kernel 的 DTB 文件对 GPIO 进行初始化。 步骤 步骤 1 :打开 DrvGen.exe 工具,如下图: 步骤 步骤 2 :加载对应的配置文件后如图 步骤 步骤 3 :用户根据需要,配置对应 GPIO 后保存:各属性含义如下: ID: GPIO 编号。 EintMode:是否用于外部中断。 Def.Mode:下拉选项,默认 GPIO 管脚功能。 InPull En: 输入上拉使能。 InPull SelHigh: 勾选表示设置上拉。 Def.Dir: 设置输入输出方向。 OutHigh:设置输出值 VarName1:一般不修改,使用默认。 SMT#:施密特触发器设置值。 SMT:施密特触发器使能。 IES:输入使能。 步骤 步骤 4 :保存后关闭 DrvGen.exe,全编代码。 如何通过节点方式进行 如何通过节点方式进行 GPIO 相关设置/ 测试/ 【 问题描述】 如何通过节点方式进行 GPIO 相关设置/测试/查看? 【 解决方案】 adb root adb shell cd /sys/devices/platform/1000b000.pinctrl echo mode pinnum 0 > pin 设置 mode 为 0 echo dir pinnum 1 > pin 设置方向为输出 echo out pinnum 1 > pin 设置输出电平为高 字段 1:PIN:gpio 号 字段 2:DIN:输入值 字段 3:DOUT:输出值 字段 4:DIN:输入值 字段 5:DRIVE:驱动能力 字段 6:SMT:设置滤波,让其缓慢变高或变低 字段 7:IES:设置输入使能 字段 8:PULLEN:上/下拉使能 字段 9:PULL_SEL:上拉/下拉设置 |
|
|
|
只有小组成员才能发言,加入小组>>
4535个成员聚集在这个小组
加入小组3343 浏览 0 评论
航顺(HK)联合电子发烧友推出“近距离体验高性能Cortex-M3,免费申请价值288元评估板
4270 浏览 1 评论
4296 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 14:19 , Processed in 0.825789 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号