【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM   【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym   【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM   【嵌入式八股】四、嵌入式Linux篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0   GPIO子系统   硬件原理         GPIO名为"General Purpose Input/Output",通用目的输入/输出,就是常用的引脚。   芯片内部有很多引脚,这些引脚可以接到GPIO模块,也可以接到I2C等模块。   通过Pinctrl子系统来选择引脚的功能(mux function)、配置引脚:   当一个引脚被复用为GPIO功能时,我们可以去设置它的方向、设置/读取它的值。   一般的寄存器有pin模式选择   使能、时钟   方向,输入输出   电平高低   设置、清除寄存器   应用编程   导出/设置方向/读写值   在sysfs中访问GPIO,实际上用的就是引脚号,老的方法。   a. 先确定某个GPIO Controller的基准引脚号(base number),再计算出某个引脚的号码。   方法如下:   ① 先在开发板的/sys/class/gpio目录下,找到各个gpiochipXXX目录:   ② 然后进入某个gpiochip目录,查看文件label的内容   ③ 根据label的内容对比设备树   label内容来自设备树,比如它的寄存器基地址。用来跟设备树(dtsi文件)比较,就可以知道这对应哪一个GPIO Controller。   内核驱动   具体应用时的驱动   a. 引脚配置为GPIO功能,使用Pinctrl子系统   b. 在设备树里指定GPIO引脚(某一组GPIO 哪一个引脚 属性) gpios=<&gpio1 2 GPIO_ACTIVE_LOW>   c. 在驱动代码中:驱动代码中要注册一个platform_driver,在probe函数中:获得引脚、注册file_operations。   在file_operations中:使用GPIO子系统的标准函数获得GPIO、设置GPIO方向、读取/设置GPIO值。                 descriptor-based legacy 引脚号,老的方法                获得GPIO                      gpiod_get      gpio_request                gpiod_get_index                      gpiod_get_arra                                                
点赞 0
评论 0
全部评论

相关推荐

WhiteAlbum...:学院本2中大厂垂直实习➕acm比赛 秋招0面试
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务