用户 GPIO 中断实现

用户 GPIO 中断实现

Q:用户 GPIO 中断实现应用
1. 应用场景
经常有用户会提到这样的使用方式:定义一个周期性的 GPIO 中断,应用层收到该中断信号后做出相应的动作,按照目前的情况来看,这种使用方式不外乎两种,一是直接使用片内或者外扩的具备中断功能的 GPIO 去实现该项功能,二是 GPIO 这一侧的功能使用 FPGA 来实现,定期的去发送某个电平或者上升沿/下降沿,某些用户更习惯将这种方式称之为“秒脉冲”或者“同步中断”。
2. 问题
对于应用开发者,我们是不会将中断注册、中断服务接口暴露给其直接使用的,所以对于用户而言,想完成上述使用场景的功能似乎是无解的。
3. 解决方式
(1)系统接口
          SylixOS 为 GPIO 的操作定义了标准的接口,分别是:gpiofd、gpiofd_read、gpiofd_write、close函数,用户可以像操作普通的字符设备一样,open/read/write/close即可完成大部分功能。
(2)实现方式
          gpiofd_read 可返回指定 GPIO 的状态,但是此接口会立即返回,并不会发生阻塞,所以在 SylixOS 下读取具备中断功能的 GPIO 的方式是使用具备阻塞功能的 select 接口来实现。
(3)原因
          至于为什么能够实现上述的操作,阅读 gpioDev.c 源代码即可,其中 ioctl 函数中实现了 select/unselect 接口,使得 GPIO 设备本身具备了 select 的功能,代码片段如下:

(4)举例
          详见 《SylixOS 应用开发手册》程序清单 13.26 GPIO 设备操作示例(GPIO_Device_Operation)。

      

      
    • Related Articles

    • SylixOS下的GIC中断实现(基于T3)

      GIC常用寄存器介绍 GICD_CTLR GICv2控制器将中断分为两组。配置对应寄存器可以控制这两组中断的使能与禁能。 GICD_ISENABLERn 中断向量使能寄存器,写入1使能对应的中断向量号,写0没有影响。读取数据表示对应中断向量号的使能状态。每32个中断向量使用一个寄存器位,后续中断向量放在接下来的寄存器地址上。 GICD_ICENABLERn ...
    • SylixOS 系统调用原理和调用过程在哪里查看?还分用户态和内核态么?

      问:SylixOS 系统调用原理和调用过程在哪里查看?还分用户态和内核态么? 答:标准版 SylixOS 不支持系统调用, 直接通过函数的方式直接访问的。系统调用是会影响系统实时性的,尤其切换页表,很耗时间。         SylixOS 不区分用户态和内核态,内核安全问题我们有容器的解决方案,容器是涉及到系统调用的!
    • SylixOS 中的 syslog 怎么提取系统记录的用户信息

      Q:SylixOS 中的 syslog 怎么读取像 Linux 系统中/var/log/message和secure文件中的信息,提取系统记录用户登录退出信息? 系统中/var/log/message 和 secure 文件中的信息是 Linux 系统下的文件,SylixOS 的 syslog 是符合 POSIX 标准的日志格式, 系统提供了相应的功能接口, 需要应用通过接口实现 syslog 服务器和对应的 syslog ...
    • 安装 5.0.x 版本 RealEVO-IDE 后电脑为什么会多一个 Virbox 用户工具软件?

      Q:安装 5.0.x 版本 RealEVO-IDE 后电脑为什么会多一个 Virbox 用户工具软件? A:RealEvo 5.0.x版本默认会安装深思数盾的加密狗驱动,用于IDE加密。系统图标及打开界面如下图所示:
    • SylixOS 中是否支持中断底半部,如何使用?

      1. 适用范围       本文档适用于对中断底半部有了解需求的开发人员。  2. 原理概述       在发生中断时,内核会记录哪个中断产生并把中断相应的处理函数加入一个处理队列里, 直到把所有同一时间发生的中断全部记录好后, 处理队列里的函数才会逐一得到调用。所以当一个中断处理函数处理过久时,就有可能影响它后面的中断处函数的执行时机。我们用的中断处 理函数是可以被中断信号打断的。   ...