冥王生活

您现在的位置是:首页 > 科技生活 > 正文

科技生活

gpio中断有什么作用(gpio外部中断)

admin2023-02-13科技生活82

电脑主板上的GPIO是做什么用的?

GPIO是通用I/O的缩写,其功能类似于8051的p0-p3。通过程序控制,用户可以自由使用插针。Pin可根据实际情况用作一般输入(GPI)或一般输出(GPO)或一般输入输出(GPIO)

既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。

扩展资料:

GPxDAT用于读写引脚,当引脚被设为输入时候,读此寄存器可知道相应引脚的电平状态高还是低,当引脚被设为输出时候,写此寄存器的位,可令引脚输出高电平还是低电平。

GPxUP寄存器某位为1时,相应管脚没有内部上拉电阻;为 0 时候 相应管脚有内部上拉电阻。

上拉电阻作用在于,当GPIO 引脚处于第三种状态时候,既不是输出高电平,也不是输出低电平。而是呈现高阻态,相当于没有接芯片。它的电平状态由上下拉电阻决定。

第十七章 GPIO 中断试验(原理)

1、 GIC接收众多的外部中断,最终只有4个信号报给ARM内核。

VFIQ:虚拟快速 FIQ。

VIRQ:虚拟快速 IRQ

FIQ:快速中断 IRQ。

IRQ:外部中断 IR

2、GICV2 总体框图

主要是使能或者禁止MMU、I/D Cache等

IRQ和FIQ总中断使能

ID0~ID1019中断使能和禁止

GIC寄存器GICD_ISENABLERn和GICD_ICENABLERn用来完成外部中断的使能和禁止,对于Cortex-A7内核来说中断ID只能使用512个。一个bit控制一个中断ID的使能,那么就需要512/32=16个GICD_ISENABLERn寄存器来完成中断的使能。同理,也需要16个GICD_ICENABLERn寄存器来完成中断的禁止。其中GICD_ISENABLERn的bit[15:0]对应ID15~0de SGI中断,GICD_ISENABLERn的bit[31:16]对应ID31~16的PPI中断。剩下的GICD_ISENABLERn就是控制SPI中断的。

优先级数配置

GICC_PMR寄存器只有低8位有效,这个8位最多可以设置256个优先级,其他优先级数设置如下表

抢占优先级和子优先级位数设置

抢占优先级和子优先级各占多少位是由寄存器GICC_BPPR来决定的,GICC_BPR寄存器结构如下:

GICC_BPR只有低3位有效,其值不同,抢占优先级和子优先级占用的位数也不同,配置如下:

为了简单起见,一般将所有的中断优先级位都配置为抢占优先级,比如6U的优先级位数为5(32个优先级),所以可以设置Binary poin为2,表示5个优先级位全部为抢占优先级。

优先级设置

Cortex-A7使用了512个中断ID,每个中断ID配有一个优先级寄存器,所以一共有512个D_IPRIORITYR寄存器。如果优先级个数为32的话,使用寄存器D_IPRIORITYR的bit7:4来设置优先级。

优先级设置主要有三部分:

①设置寄存器GICC_PMR,配置优先级个数,比如I.MX6U支持32级优先级

②设置抢占优先级和子优先级位数,一般为了简单起见,会将所有的位数都设置为抢占优先级

③设置指定中断的ID的优先级,也就是设置外设优先级

简单总结:

1、 6U有8中中断类型

2、 GIC控制器有三类中断源,SPI、PPI、SGI;能设置中断优先级,抢占优先级和子优先级。

3、 CP15协处理器是开关I/D cache、MMU、获取GIC寄存器

单片机GPIO中断

_pfGPCDECallback 是个函数指针

下面判断指针是否为0,如果不为0就表示指针有指向一个函数,便调用这个函数。

这种函数叫回调函数,另外编写,函数名自定,但要把函数地址赋给那个函数指针。

中断产生会调用 GPCDE_IRQHandler,做一些属于中断的底层处理,再把一些状态作为参数再调用回调函数。

这样写程序修改程序不用再关心中断的底层处理,把它封装好,只要注重实际处理部分,即回调函数的编写。

gpio是什么意思

gpio是通用型之输入输出的意思,是General-purpose input/output的缩写。

GPIO功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。

对于输入,可以通过读取某个寄存器来确定引脚电位的高低;对于输出,可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。

扩展资料

GPIO的优点:

快速上市:不需要编写额外的代码、文档,不需要任何维护工作。

灵活的灯光控制:内置多路高分辨率的PWM输出。

可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。

更好的灯光效果:匹配的电流输出确保均匀的显示亮度。

布线简单:仅需使用2条就可以组成IIC总线或3条组成SPI总线。

gpio接口怎么用

一、gpio用途

General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。

每个GPIO端口可通过软件分别配置成输入或输出。Maxim的GPIO产品线包括8端口至28端口的GPIO,提供推挽式输出或漏极开路输出。提供微型3mm x 3mm QFN封装。

不同系统间的GPIO的确切作用不同。通用常有下面几种:

1.输出值可写(高=1,低=0)。一些芯片也可以选择驱动这些值的方式,以便支持“线-或”或类似方案(开漏信号线)。

2.输入值可读(1,0)。一些芯片支持输出管脚回读,这在线或的情况下非常有用(以支持双向信号线)。GPIO控制器可能具有一个输入防故障/防反跳逻辑,有时还会有软件控制。

3.输入经常被用作中断信号,通常是边沿触发,但也有可能是电平触发。这些中断可以配置为系统唤醒事件,从而将系统从低功耗模式唤醒。

4.一个GPIO经常被配置为输入/输出双向,根据不同的产品单板需求,但也存在单向的情况。

5.大多是GPIO可以在获取到spinlock自旋锁时访问,但那些通过串行总线访问的通常不能如此操作(休眠的原因)。一些系统中会同时存在这两种形式的GPIO。

6.在一个给定单板上,每个GPIO用于一个特定的目的,如监控MMC/SD卡的插入/移除,检查卡写保护状态,驱动LED,配置发送器,串行总线位拆,触发一个硬件看门狗,触发一个开关之类的。

二、GPIO使用方法

 

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

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

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

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

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

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

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

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~