全国服务热线: 18601085302
企业新闻

GPIO信号完整性测试,时序测试

发布时间:2023-12-17        浏览次数:4        返回列表
前言:GPIO信号完整性测试,时序测试
GPIO信号完整性测试,时序测试

GPIO使用方法

  要使用GPIO,系统首先要分配一个GPIO,使用gpio_request() 为系统分配一个GPIO。

  接下来要做的一件事是标示GPIO的方向,通常在使用GPIO建立一个platform_device时(位于单板的setup代码中):

  

  int gpio_direction_input(unsigned gpio);

  int gpio_direction_output(unsigned gpio, int value);

  返回0标示成功,或是一个负的errno错误码。它应该被检查,因为get/set调用没有错误返回,且可能会有错误配置。你通常应该在线程上下文中使用这些调用。虽然如此,对于spinlock-safe的GPIO,在tasking使能之前使用也是可以的,作为一个早期的单板建立。

  对于输出GPIO,value参数提供了初始输出值。这有助于避免系统启动过程中的信号干扰。

  为了与GPIO早期的接口兼容,设置一个GPIO的方向,隐性要求申请GPIO。这个兼容性从可选的gpiolib架构中移除了。

  如果GPIO号码无效或是指定的GPIO不能使用对应模式操作的话,设置方向会失败。依靠boot固件设置好GPIO的方向通常不是一个好主意,因为boot的功能可能没有通过验证(除了boot linux)。(类似的,单板setup代码可能需要将管脚复用为一个GPIO,和配置为合适的上拉/下拉。)

  Spinlock-Safe GPIO访问

  -------------------------

  大多数GPIO控制器可以使用内存读写指令访问。它们不需要休眠,且可以从内部硬件中断处理(非线程)和类似的上下文环境安全完成。

  使用下列调用访问这些GPIO,此时gpio_cansleep将总是返回错误

  

  int gpio_get_value(unsigned gpio);

  

  void gpio_set_value(unsigned gpio, int value);

  其中,value是一个布尔型参数,零表示低,非零表示高。当读一个输出管脚的值时,返回的值应该是在管脚上看到的值。。。这并不总是与指定输出值相匹配的,因为存在开漏信号和输出延迟问题。

  get/set调用没有错误返回,因为“无效GPIO”应该已经由gpio_direction_*()提早报告了。虽然如此,并非所有的平台都可以读取输出管脚的值,那些不能读的应该总是返回零。同时,对那些可能导致睡眠的GPIO使用这些接口是一个错误。

  平台的特定实现被鼓励优化这两个调用以获取GPIO值。在那些GPIO号码是常量的情况下,它们通常只需一对指令(读或写一个硬件寄存器)访问,且不需要spinlock。这样的优化可以使位拆分应用更有效率

D0BB1430-7FF6-49FA-B873-29F085FC493D.pngE047D8E8-197E-458A-92A4-D896607BE9F1.png

推荐产品
信息搜索
 
北京淼森波信息技术有限公司
  • 地址:北京市海淀区永泰庄北路1号天地邻枫2号楼A座B101
  • 手机:18601085302
  • 联系人:邓经理