gpio 开发文档

文章目录

  • gpio 开发文档
    • 简述
    • centec gpio功能选择
    • gpio模式配置为开漏方向配置为输出模式
    • gpio的数据的读写
    • gpio操作上层应用程序的调用

简述

对于gpio的操作,一定要如下几部分满足条件才能正常的操作gpio。

  • 引脚功能选择,例如 引脚TSEC1_RX_CLK/DMA_DACK_B0/GPIO14上不只有gpio的功能,需要将其选在为gpio后才能当gpio一样使用。

  • gpio模式 例如 开漏 推挽等等,不同的应用需要配成不同的模式。

  • gpio的方向,是input还是output,从cpu往外发数据去配置器件叫output,器件的数据返回给cpu叫input。

  • 往gpio里写高低电平。

centec gpio功能选择

首先是查手册,在手册P1010RM.pdf的1723页,有如下的做功能选择的寄存器。

E_0060寄存器的4 5位为1 0,gpio14被选为gpio模式;6 7位被填写1 0引脚被选为GPIO15。

需要通过如下驱动做功能选择:

\cnos\platform\linux\arch\powerpc\platforms\85xx\p1010_ctc_gb.c
p1010_ctc_setup_arch

 //fpga片选引脚功能选择alter_fun_addr = ioremap(0xffee0060, 0x1000);if(alter_fun_addr == NULL) {printk(KERN_EMERG "alter_fun_addr can not map.\r\n");}guts_pmuxcr1 = in_be32(alter_fun_addr);//gpio14 gpio15 功能选择为gpio模式,参考文档P1010RM.pdf 1723页。out_be32(alter_fun_addr, guts_pmuxcr1|0x0A000000); guts_pmuxcr1 = in_be32(alter_fun_addr);iounmap(alter_fun_addr);

地址0xffee0060是怎么找到的?

代码中看到 gpio_logic_addr = ioremap(0xffe0f000, 0x1000) ; 在和手册上的Memory Map的内存映射图进行比较,得出应该是这个地址。

相关系统函数的分析

ioremap 是将物理地址映射为虚拟地址,物理地址是不能直接访问的。

in_be32(alter_fun_addr)相当于将虚拟地址alter_fun_addr里的内容读出来。

out_be32(alter_fun_addr, guts_pmuxcr1|0x0A000000); 将第二个参数的内容,写到第二个参数的地址中。

上边代码流程

相当于将E0060寄存里的内容先读出来,按手册修改相应bit位后,在写回寄存器中,起到功能选择的作用。

gpio模式配置为开漏方向配置为输出模式

\cnos\system\drvs\drvio\ctc_gpio\ctc_gpio.c
ctc_gpio_init
加入如下代码

     /*fpga cs gpio config*/#define FPGA1_EN 14#define FPGA0_EN 15printk("config fpga chip select gpio mode.dir,%x,od:%x\r\n",gpio_virtual_addr,gpio_virtual_addr + 4);/*dir is output*/setbits32(gpio_virtual_addr,(0x1 << (31-FPGA0_EN)));setbits32(gpio_virtual_addr,(0x1 << (31-FPGA1_EN)));/*set them as open drain mode*/setbits32(gpio_virtual_addr + 4,(0x1 << (31-FPGA0_EN)));setbits32(gpio_virtual_addr + 4,(0x1 << (31-FPGA1_EN)));

代码原理讲解:
#define setbits32(_addr, _v) out_be32((_addr), in_be32(_addr) | (_v))
所调用的函数setbits32 相当于将寄存器里的内容读出来,改变相应的bit后再写回去。
gpio_virtual_addr 寄存器的基地址,第一个寄存器为GPIO_GPDIR,方向寄存器,寄存器里的bit位,每一位代表一个gpio的方向,写1位输出,写0位输入。
基地址+4 为GPIO_GPODR 寄存器,开漏寄存器,是否配成开漏输出模式。

具体参考P1010RM.pdf 第24章。

gpio的数据的读写

对gpio数据读写要操作寄存器GPIO_GPDAT,gpio基地址偏移8,具体操作参考文档P1010RM.pdf 第24章。

gpio操作上层应用程序的调用

gpio_fd = open("/dev/ctc_gpio", O_RDWR);  //openioctl(gpio_fd, CTC_GPIO_GPIO_INIT, 0);   //初始化ioctl(gpio_fd, CTC_GPIO_WRITE, (long) &gpio_value); //读写

飞思卡尔 p1010 gpio linux驱动开发相关推荐

  1. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之Pinctrl子系统和GPIO子系统的使用

    文章目录 前言 1.Pinctrl子系统 1.1.为什么有Pinctrl子系统 1.2.重要的概念 1.3.代码中怎么引用pinctrl 2.GPIO子系统 2.1.为什么有GPIO子系统 2.2.在 ...

  2. Linux GPIO键盘驱动开发记录_OMAPL138

    Linux GPIO键盘驱动开发记录_OMAPL138 Linux基本配置完毕了,这几天开始着手Linux驱动的开发,从一个最简单的键盘驱动开始,逐步的了解开发驱动的过程有哪些.看了一下Linux3. ...

  3. linux驱动开发(一)—GPIO驱动框架

    前言 GPIO驱动是Linux驱动开发中最基础.但却是很常用.很重要的驱动.比如你要点亮一个LED灯.键盘扫描.输出高低电平等等.而Linux内核的强大之处在于对最底层的GPIO硬件操作层的基础上封装 ...

  4. 如何学习Linux驱动开发?

    原文链接:https://blog.csdn.net/hwunion/article/details/41621655 Linux驱动开发,看起来是一份很高大上的职业,毕竟从事上层应用开发人员太多,而 ...

  5. 最全Linux驱动开发全流程详细解析(持续更新)

    Linux驱动开发详细解析 一.驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 具体任务 读写设备寄存器(实现控制的方式) 完成设备的轮询.中断处理.DMA通信(CPU与外设通信 ...

  6. 【正点原子Linux连载】第四十三章 Linux设备树 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  7. 【Linux驱动开发】设备树详解(二)设备树语法详解

    ​ 活动地址:CSDN21天学习挑战赛 [Linux驱动开发]设备树详解(一)设备树基础介绍 [Linux驱动开发]设备树详解(二)设备树语法详解 [Linux驱动开发]设备树详解(三)设备树Kern ...

  8. 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)

    这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...

  9. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之按键驱动框架

    文章目录 前言 1.APP怎么读取按键值 1.1.查询方式 1.2.休眠-唤醒方式 1.3.poll方式 1.3.异步通知方式 1.5. 驱动程序提供能力,不提供策略 2.按键驱动程序框架--查询方式 ...

最新文章

  1. Ubuntu 更新后 VirtualBox 无法启动
  2. GitHub Alibaba Group 下 Star 最多的开源项目是?
  3. Ubuntu循环登录
  4. 掌握 Kafka,看这篇就足够了
  5. vue中ref 的使用
  6. pom.xml中出现错误提示Failure to transfer org.jboss.weld.jar ...  maven2 was cached in the local repository.
  7. 【ManageEngine】如何利用好OpManager的报表功能
  8. win10没有realtek高清晰音频管理器_【微软】第49期分享:装完Win 10最新补丁数据没了!...
  9. 晶振波形不是正弦波_求助各位!有源晶振出来的波形是方波还是正弦波?
  10. 小蚂蚁学cURL笔记(1)
  11. BD-rate计算方法
  12. QEMU中的内存API(2)
  13. Houdini使用Mantra渲染景深通过Nuke合成
  14. 输出某个日期是该年的第几天
  15. 疫情只是催化剂 2020注定开启协同办公新纪元
  16. 如何去选取第一批要阅读的论文?_【手把手教你写论文】第二期:文献阅读进行时...
  17. (2.6w字)网络知识点灵魂拷问(下)——前端面试必问
  18. P2P网贷系统开发的软件测试
  19. 【iOS】动态更换图标
  20. Oracle数据库笔记

热门文章

  1. Focal loss 中两个加权参数的原理和产生的影响
  2. Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图、序列、索引等对象的导出,oracle完结,后续开启mysql的学习
  3. python打包exe之pyinstaller
  4. 汽车融资租赁详解及流程介绍
  5. 海信电视通过U盘安装应用
  6. oracle挑库发放次数,EBS OM发运状态 wsh_delivery_details.RELEASED_STATUS
  7. DSP28377S_程序从FLASH部分复制到RAM中运行详解
  8. Drupal 修改主题详解
  9. 四款 GTD 任务管理软件试用对比
  10. vue中如何引入指定字体并且使用