CN116610624A - 一种gpio防抖动控制方法、装置、设备及介质 - Google Patents
一种gpio防抖动控制方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN116610624A CN116610624A CN202310639349.9A CN202310639349A CN116610624A CN 116610624 A CN116610624 A CN 116610624A CN 202310639349 A CN202310639349 A CN 202310639349A CN 116610624 A CN116610624 A CN 116610624A
- Authority
- CN
- China
- Prior art keywords
- data
- writing
- shake
- rams
- preset
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 57
- 238000003708 edge detection Methods 0.000 claims abstract description 18
- 238000004590 computer program Methods 0.000 claims description 10
- 230000004044 response Effects 0.000 claims description 7
- 230000003139 buffering effect Effects 0.000 claims description 4
- 238000012986 modification Methods 0.000 claims description 4
- 230000004048 modification Effects 0.000 claims description 4
- 238000012545 processing Methods 0.000 abstract description 13
- 230000008569 process Effects 0.000 description 10
- 230000006870 function Effects 0.000 description 9
- 230000000630 rising effect Effects 0.000 description 6
- 238000001914 filtration Methods 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000002265 prevention Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- LHMQDVIHBXWNII-UHFFFAOYSA-N 3-amino-4-methoxy-n-phenylbenzamide Chemical compound C1=C(N)C(OC)=CC=C1C(=O)NC1=CC=CC=C1 LHMQDVIHBXWNII-UHFFFAOYSA-N 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000005070 sampling Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及信号处理领域,尤其涉及一种GPIO防抖动控制方法、装置、设备及介质。所述方法包括按照外部数据进入先后顺序进行边沿检测;基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,预设写入规则包括将首个边沿之前的一段数据写入一个RAM,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;基于持续时长和预设防抖值判断每段数据是否为抖动数据并进行恢复;将恢复数据和非抖动数据段按照先后顺序写入第一寄存器以得到去抖动外部数据。本发明的方案能准确滤波防抖,具有较高的处理效率。
Description
技术领域
本发明涉及信号处理领域,尤其涉及一种GPIO防抖动控制方法、装置、设备及介质。
背景技术
通用型之输入输出(General-purpose input/output,简称GPIO)作为芯片中的常见输入输出(Input Output,简称IO),使用非常广泛,具有高度的灵活性和通用性。而GPIO中的一项重要功能就是debounce功能,即防抖功能。数据由外部进入GPIO,然后经过debounce后才可以正常使用,否则容易采样到错误的数据,因此对于GPIO控制器的debounce功能设计就十分重要,需要做到实时、准确的滤波防抖,不能丢数据,也不能补数据。
目前,GPIO debounce功能的设计主要采用计数器的方法实现,当检测到上升沿或者下降沿时,计数器启动,当计数器的值大于设定的防抖值时,则认为这个信号为正常的数据信号,反之则认为是抖动毛刺,需要滤除。举例说明,当设定的防抖值设置为3时,当计数器计数大于3纳秒时,则认为是正常的信号,输出当前信号,而小于3纳秒的值,均认为是抖动,需要滤掉。虽然,该方法简单易实现,仅通过一个边沿检测器和一个计数器即可实现初步的debounce功能,但是同样存在缺点。当信号在传输过程中,如果突然改变设定的防抖值,则会因为数据处理不及时,往往在防抖值变化的地方出现丢失数据或者无法采样的问题。
发明内容
有鉴于此,有必要针对以上技术问题,提供一种GPIO防抖动控制方法、装置、设备及介质。
根据本发明的第一方面,提供了一种GPIO防抖动控制方法,所述方法包括:
响应于外部数据进入GPIO,则按照数据进入先后顺序对所述外部数据进行边沿检测;
基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,其中,所述预设写入规则包括将首个边沿之前的一段数据写入多个RAM中的一个,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;
按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;
基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,并对抖动数据段进行恢复以得到恢复数据;
将抖动数据段的恢复数据和非抖动数据段按照先后顺序写入第一寄存器,以得到去抖动外部数据。
在一些实施例中,所述方法还包括:
通过APB总线将所述预设防抖值写入第二寄存器。
在一些实施例中,所述方法还包括:
响应于需要调整所述预设防抖值时,则通过APB总线修改所述第二寄存器中的数值。
在一些实施例中,所述方法还包括:
响应于在某段数据进行边沿检测过程中检测到所述第二寄存器被修改,则在对某段数据执行所述基于所述持续时长和预设防抖值判断每段数据是否为抖动数据的步骤时,预设防抖值使用第二寄存器修改前的数值;以及
对某段数据之后的下段数据执行所述基于所述持续时长和预设防抖值判断每段数据是否为抖动数据的步骤时,预设防抖值使用第二寄存器修改后的数值。
在一些实施例中,所述基于所述持续时长和预设防抖值判断每段数据是否为抖动数据的步骤,包括:
将每段数据的持续时长与所述预设防抖值进行比较;
响应于某段数据对应的持续时长大于等于所述预设防抖值,则确认某段数据为非抖动数据;
响应于某段数据对应的持续时小于所述预设防抖值,则确认某段数据为抖动数据。
在一些实施例中,RAM的数量为两个,一个RAM用于缓存低电平的数据段,另一个RAM用于缓存高电平的数据段。
在一些实施例中,所述预设写入规则还包括:
响应于某个RAM在写满时仍未检测到下一边沿,则采用覆盖写入方式将数据写入某个RAM,并直接将最后一次检测的边沿以后的数据至下一边沿之前的数据均视为非抖动数据写入第一寄存器,以及下一边沿到来时清空某个RAM。
根据本发明的第二方面,提供了一种GPIO防抖动控制装置,所述装置包括:
边沿检测模块,配置用于响应于外部数据进入GPIO,则按照数据进入先后顺序对所述外部数据进行边沿检测;
缓存模块,配置用于基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,其中,所述预设写入规则包括将首个边沿之前的一段数据写入多个RAM中的一个,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;
计数模块,配置用于按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;
判断模块,配置用于基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,并对抖动数据段进行恢复以得到恢复数据;
写入模块,配置用于将抖动数据段的恢复数据和非抖动数据段按照先后顺序写入第一寄存器,以得到去抖动外部数据。
根据本发明的第三方面,还提供了一种计算机设备,该计算机设备包括:
至少一个处理器;以及
存储器,存储器存储有可在处理器上运行的计算机程序,处理器执行程序时执行前述的GPIO防抖动控制方法。
根据本发明的第四方面,还提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序被处理器执行时执行前述的GPIO防抖动控制方法。
上述一种GPIO防抖动控制方法,通过对进入到GPIO的外部数据进行边沿检测,基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,从而实现将数据分段缓存到不同的RAM,多个RAM读写独立不会造成数据堵塞,以及实现分段判断数据是否为抖动数据,达到缓存过程与判断过程可并行执行,不仅能够准确对外部数据进行滤波防抖,而且具有较高的处理效率。
此外,本发明还提供了一种GPIO防抖动控制装置、一种计算机设备和一种计算机可读存储介质,同样能实现上述技术效果,这里不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
图1为本发明一个实施例提供的一种GPIO防抖动控制方法的流程图;
图2为本发明另一个实施例提供的采用两个RAM实现GPIO防抖动控制方法的架构示意图;
图3为本发明一个实施例提供的采用本发明方法对某GPIO外部数据去抖的过程示意图;
图4为本发明另一个实施例提供的一种GPIO防抖动控制装置的结构示意图;
图5为本发明另一个实施例中计算机设备的内部结构图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明实施例进一步详细说明。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
在一个实施例中,请参照图1所示,本发明提供了一种GPIO防抖动控制方法100,具体来说,所述方法包括以下步骤:
步骤101,响应于外部数据进入GPIO,则按照数据进入先后顺序对所述外部数据进行边沿检测;
在本实施例中,GPIO可以是现有具有基本输入输出引脚的芯片的任意一个引脚,例如GPIO可以是STM32可控制的引脚,STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。STM32芯片的GPIO被分成很多组,每组有16个引脚,如型号为STM32F103VET6型号的芯片有GPIOA、GPIOB、GPIOC至GPIOE共5组GPIO,芯片一共100个引脚,其中GPIO就占了一大部分,所有的GPIO引脚都有基本的输入输出功能。
步骤102,基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,其中,所述预设写入规则包括将首个边沿之前的一段数据写入多个RAM中的一个,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;
步骤103,按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;
步骤104,基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,并对抖动数据段进行恢复以得到恢复数据;
在本实施例中,恢复数据是指将本段数据改变成与前一段数据或后一段数据相同的数据,比如某个GIPO中依次进入180纳秒的高电平信号、10纳秒的低电平信号、70纳秒的高电平信号,不妨假设预设防抖值为30纳秒,那么此时第一段和第三段都是非抖动信号,第二段10纳秒的低电平信号属于抖动信号,对其进行恢复时此段数据应当变成10纳秒的高电平信号
步骤105,将抖动数据段的恢复数据和非抖动数据段按照先后顺序写入第一寄存器,以得到去抖动外部数据。
需要说明的是,对于判断得到的某段数据属于抖动数据,则将该段数据按照其前一段数据的电平状态和时间写入到第一寄存器中,由此第一寄存器中记录的数据即为不存抖动的外部数据。
上述一种GPIO防抖动控制方法,通过对进入到GPIO的外部数据进行边沿检测,基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,从而实现将数据分段缓存到不同的RAM,多个RAM读写独立不会造成数据堵塞,以及实现分段判断数据是否为抖动数据,达到缓存过程与判断过程可并行执行,不仅能够准确对外部数据进行滤波防抖,而且具有较高的处理效率。
在一些实施例中,所述方法还包括:
通过APB总线将所述预设防抖值写入第二寄存器。
在本实施例中,APB(Advanced Peripheral Bus)是外围总线的意思。该总线协议是ARM公司提出的AMBA总线结构之一,APB总线已成为一种标准的片上总线结构。APB总线主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB桥。其特性包括:两个时钟周期传输;无需等待周期和回应信号;控制逻辑简单,只有四个控制信号。
在一些实施例中,所述方法还包括:
响应于需要调整所述预设防抖值时,则通过APB总线修改所述第二寄存器中的数值。
在一些实施例中,所述方法还包括:
响应于在某段数据进行边沿检测过程中检测到所述第二寄存器被修改,则在对某段数据执行所述基于所述持续时长和预设防抖值判断每段数据是否为抖动数据的步骤时,预设防抖值使用第二寄存器修改前的数值;以及
对某段数据之后的下段数据执行所述基于所述持续时长和预设防抖值判断每段数据是否为抖动数据的步骤时,预设防抖值使用第二寄存器修改后的数值。
在一些实施例中,前述步骤104,基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,包括:
将每段数据的持续时长与所述预设防抖值进行比较;
响应于某段数据对应的持续时长大于等于所述预设防抖值,则确认某段数据为非抖动数据;
响应于某段数据对应的持续时小于所述预设防抖值,则确认某段数据为抖动数据。
在一些实施例中,RAM的数量为两个,一个RAM用于缓存低电平的数据段,另一个RAM用于缓存高电平的数据段。
在一些实施例中,所述预设写入规则还包括:
响应于某个RAM在写满时仍未检测到下一边沿,则采用覆盖写入方式将数据写入某个RAM,并直接将最后一次检测的边沿以后的数据至下一边沿之前的数据均视为非抖动数据写入第一寄存器,以及下一边沿到来时清空某个RAM。
在又一个实施例中,为了便于理解本发明的方案,下面以两个双端口RAM为例进行举例说明,请结合图2所示,架构采用两个RAM、两个寄存器、一个Arbiter logic、一个Debounce logic搭建,本实施例提供了又一种GPIO防抖动控制方法,具体实施过程包括:
步骤一,外部数据Data由芯片焊盘(即Pad)进入GPIO,首先进入Arbiter logic,Arbiter logic中包括一个边沿检测器,当检测到第一个边沿时(上升沿或者是下降沿),此时认为有数据或者是有抖动进入,此时数据送入RAM_1中;当检测到第二个边沿时(上升沿或者是下降沿),此时同样认为有数据发生变化或者有抖动,此时数据送入RAM_2。
步骤二,两个RAM的写逻辑由Arbiter logic控制,读逻辑由Debounce logic控制。
步骤三,Debounce logic接收由两个RAM传送的数据和debounce timer value传送的防抖值。Debounce logic设置两个防抖计时器,一个用来处理来自RAM_1的数据,另外一个用来处理来自RAM_2的数据。当RAM_1的数据到来时,启动计时器1,进行计数,当计数大于设定的防抖值时,认为是正常的信号,输出给Data read register;当计数小于设定的防抖值时,认为是抖动,滤除。此时RAM_1中的数据处理完成,计数器1清零,等待RAM_2中的数据,当RAM_2中的数据到来时,启动计时器2,开始计数,同样进行上述的过程,两个RAM依次交替进行。
步骤四,两个RAM在时序上错开,总是一个在读一个在写,不会存在同时读写的情况。当RAM_1还没处理完成,而RAM_2的边沿已经到来时,Debounce logic会控制RAM_2进行缓存等待,等待RAM_1处理完成后再进入debounce logic;而当RAM_1已经处理完成,Debounce logic会控制RAM_2的中数据直接进入Debounce logic,不需要进行缓存。
步骤五,当debounce timer value改变时,即防抖值在数据传送过程中改变时,则当前数据依然按照原防抖值进行采样,而当检测到新的边沿时,再按照新的防抖值进行采样。
步骤六,两个RAM由debounce logic控制,当RAM满时,即出现长0或者长1写满了RAM还无边沿时,debounce logic默认该数据为正常数据,输出给Data read register。依次防止长0或者长1因RAM满且无边沿无法采样的问题。
步骤七,Debounce timer value寄存器直连APB总线,由APB总线通过此寄存器配置防抖值;Data read register直连APB总线,APB总线可以通过读此寄存器读取输入给GPIO且经过防抖后的值。
下面请结合图3所示,本实施例还提供了采用上述架构对某一外部数据的进行去抖动的过程:
步骤一,假设现GPIO需要接收外部数据,并且需要进行防抖,防抖值设置为60纳秒。
步骤二,通过APB总线,配置Debounce timer value为60纳秒。
步骤三,外部数据通过芯片管脚进入GPIO,首先经过Arbiter logic,当检测到第一个边沿时(假定为上升沿,且该数据为正常数据),则将该数据写入RAM_1。
步骤四,RAM_1将数据缓存后,进入debounce logic,计数器启动,当计数器值大于60纳秒后,则判定该值为非抖动值,输入给Data read register寄存器。
步骤五,当检测到第二个沿时(假定为下升沿,且该数据为抖动数据),则将该数据写入RAM_2进行缓存,数据缓存后,进入debounce logic,计数器启动,当计数器值小于60纳秒后,则判定该值为抖动值,不输入给Data read register寄存器。
步骤六,当检测到第三个沿时(假定为上升沿,且该数据为正常数据),则将该数据再次写入RAM_1进行缓存,数据缓存后,进入debounce logic,计数器启动,当计数器值大于60纳秒后,则判定该值为正常值,输入给Data read register寄存器。
步骤七,当改变防抖值时,如图3,将在检测到第四个边沿时(下降沿)生效,数据写入RAM_2进行缓存之后按照新的防抖值进行防抖,防抖后的数据写入ata read register寄存器。
步骤八,通过APB读取Data read register寄存器,即可得到防抖后的数据值,供后续使用。
本实施例的一种GPIO防抖动控制方法,至少具备以下有益技术效果:采用基于RAM的GPIO debounce设计,可以预防在防抖值改变时,因数据处理不及时,导致采样错误或者数据丢失,能够做到进行实时防抖功能,具有较高的准信行和较佳的实时性。
在一些实施例中,请参照图4所示,本发明还提供了一种GPIO防抖动控制装置200,所述装置包括:
边沿检测模块201,配置用于响应于外部数据进入GPIO,则按照数据进入先后顺序对所述外部数据进行边沿检测;
缓存模块202,配置用于基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,其中,所述预设写入规则包括将首个边沿之前的一段数据写入多个RAM中的一个,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;
计数模块203,配置用于按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;
判断模块204,配置用于基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,并对抖动数据段进行恢复以得到恢复数据;
写入模块205,配置用于将抖动数据段的恢复数据和非抖动数据段按照先后顺序写入第一寄存器,以得到去抖动外部数据。
上述一种GPIO防抖动控制装置,通过对进入到GPIO的外部数据进行边沿检测,基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,从而实现将数据分段缓存到不同的RAM,多个RAM读写独立不会造成数据堵塞,以及实现分段判断数据是否为抖动数据,达到缓存过程与判断过程可并行执行,不仅能够准确对外部数据进行滤波防抖,而且具有较高的处理效率。
需要说明的是,关于GPIO防抖动控制装置的具体限定可以参见上文中对GPIO防抖动控制方法的限定,在此不再赘述。上述GPIO防抖动控制装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
根据本发明的另一方面,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图请参照图5所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时实现以上所述的GPIO防抖动控制方法,具体来说,所述方法包括以下步骤:
响应于外部数据进入GPIO,则按照数据进入先后顺序对所述外部数据进行边沿检测;
基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,其中,所述预设写入规则包括将首个边沿之前的一段数据写入多个RAM中的一个,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;
按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;
基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,并对抖动数据段进行恢复以得到恢复数据;
将抖动数据段的恢复数据和非抖动数据段按照先后顺序写入第一寄存器,以得到去抖动外部数据。
根据本发明的又一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上所述的GPIO防抖动控制方法,具体来说,包括执行以下步骤:
响应于外部数据进入GPIO,则按照数据进入先后顺序对所述外部数据进行边沿检测;
基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,其中,所述预设写入规则包括将首个边沿之前的一段数据写入多个RAM中的一个,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;
按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;
基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,并对抖动数据段进行恢复以得到恢复数据;
将抖动数据段的恢复数据和非抖动数据段按照先后顺序写入第一寄存器,以得到去抖动外部数据。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种GPIO防抖动控制方法,其特征在于,所述方法包括:
响应于外部数据进入GPIO,则按照数据进入先后顺序对所述外部数据进行边沿检测;
基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,其中,所述预设写入规则包括将首个边沿之前的一段数据写入多个RAM中的一个,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;
按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;
基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,并对抖动数据段进行恢复以得到恢复数据;
将抖动数据段的恢复数据和非抖动数据段按照先后顺序写入第一寄存器,以得到去抖动外部数据。
2.根据权利要求1所述的GPIO防抖动控制方法,其特征在于,所述方法还包括:
通过APB总线将所述预设防抖值写入第二寄存器。
3.根据权利要求2所述的GPIO防抖动控制方法,其特征在于,所述方法还包括:
响应于需要调整所述预设防抖值时,则通过APB总线修改所述第二寄存器中的数值。
4.根据权利要求3所述的GPIO防抖动控制方法,其特征在于,所述方法还包括:
响应于在某段数据进行边沿检测过程中检测到所述第二寄存器被修改,则在对某段数据执行所述基于所述持续时长和预设防抖值判断每段数据是否为抖动数据的步骤时,预设防抖值使用第二寄存器修改前的数值;以及
对某段数据之后的下段数据执行所述基于所述持续时长和预设防抖值判断每段数据是否为抖动数据的步骤时,预设防抖值使用第二寄存器修改后的数值。
5.根据权利要求1所述的GPIO防抖动控制方法,其特征在于,所述基于所述持续时长和预设防抖值判断每段数据是否为抖动数据的步骤,包括:
将每段数据的持续时长与所述预设防抖值进行比较;
响应于某段数据对应的持续时长大于等于所述预设防抖值,则确认某段数据为非抖动数据;
响应于某段数据对应的持续时小于所述预设防抖值,则确认某段数据为抖动数据。
6.根据权利要求1所述的GPIO防抖动控制方法,其特征在于,RAM的数量为两个,一个RAM用于缓存低电平的数据段,另一个RAM用于缓存高电平的数据段。
7.根据权利要求1所述的GPIO防抖动控制方法,其特征在于,所述预设写入规则还包括:
响应于某个RAM在写满时仍未检测到下一边沿,则采用覆盖写入方式将数据写入某个RAM,并直接将最后一次检测的边沿以后的数据至下一边沿之前的数据均视为非抖动数据写入第一寄存器,以及下一边沿到来时清空某个RAM。
8.一种GPIO防抖动控制装置,其特征在于,所述装置包括:
边沿检测模块,配置用于响应于外部数据进入GPIO,则按照数据进入先后顺序对所述外部数据进行边沿检测;
缓存模块,配置用于基于检测到的边沿和预设写入规则将外部数据分段缓存到多个RAM,其中,所述预设写入规则包括将首个边沿之前的一段数据写入多个RAM中的一个,以及将任意三个相邻边沿之间的两段数据写入两个不同RAM;
计数模块,配置用于按照数据段写入多个RAM的先后顺序读出RAM中的数据,并依次对每段数据进行计数统计以得到持续时长;
判断模块,配置用于基于所述持续时长和预设防抖值判断每段数据是否为抖动数据,并对抖动数据段进行恢复以得到恢复数据;
写入模块,配置用于将抖动数据段的恢复数据和非抖动数据段按照先后顺序写入第一寄存器,以得到去抖动外部数据。
9.一种计算机设备,其特征在于,包括:
至少一个处理器;以及
存储器,所述存储器存储有可在所述处理器中运行的计算机程序,所述处理器执行所述程序时执行权利要求1-7任意一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时执行权利要求1-7任意一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310639349.9A CN116610624A (zh) | 2023-05-30 | 2023-05-30 | 一种gpio防抖动控制方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310639349.9A CN116610624A (zh) | 2023-05-30 | 2023-05-30 | 一种gpio防抖动控制方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116610624A true CN116610624A (zh) | 2023-08-18 |
Family
ID=87674486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310639349.9A Pending CN116610624A (zh) | 2023-05-30 | 2023-05-30 | 一种gpio防抖动控制方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116610624A (zh) |
-
2023
- 2023-05-30 CN CN202310639349.9A patent/CN116610624A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8880745B2 (en) | Efficient scheduling of transactions from multiple masters | |
US10762003B2 (en) | State change in systems having devices coupled in a chained configuration | |
CN105117360A (zh) | 基于fpga的接口信号重映射方法 | |
US20170090781A1 (en) | Method for providing read data flow control or error reporting using a read data strobe | |
US20140040680A1 (en) | Memory control device and control method | |
US6760864B2 (en) | Data processing system with on-chip FIFO for storing debug information and method therefor | |
CN108170571B (zh) | 一种芯片追踪调试装置及方法 | |
CN116610624A (zh) | 一种gpio防抖动控制方法、装置、设备及介质 | |
US8886844B2 (en) | Efficient scheduling of read and write transactions in dynamic memory controllers | |
CN103401743A (zh) | 一种i2c总线消除干扰信号的方法和装置 | |
CN108108149B (zh) | 一种基于分离统计高效收集的性能统计电路 | |
CN114527832B (zh) | 脉冲信号边沿测量方法及装置、存储介质及微控制单元 | |
CN115687012A (zh) | 一种总线监测模块、监测方法和相关设备 | |
CN115238642A (zh) | 一种基于FPGA的外设总线的crossbar设计系统和方法 | |
CN107977278A (zh) | 死机状态数据恢复处理的方法和装置 | |
CN109739565B (zh) | 一种保证Bootrom正常运行的方法、装置、计算机设备及存储介质 | |
CN112631526A (zh) | 嵌入式系统主循环与中断循环对同一存储器读写操作方法 | |
CN115794446B (zh) | 一种消息处理方法、装置、电子设备和存储介质 | |
CN115826731B (zh) | 休眠控制方法及装置、存储介质和计算设备 | |
CN115129653B (zh) | 一种基于hpi的fpga与dsp通信系统 | |
CN109359067B (zh) | 获取存储模块内部延时阶梯时间的方法及系统 | |
JP6869823B2 (ja) | 演算装置 | |
CN117289591A (zh) | 一种基于fpga的可信芯片冗余控制方法及系统 | |
CN105227839A (zh) | 一种高效图像采集硬件控制器 | |
CN110781118A (zh) | 实现并行总线从模式的方法及装置、计算机设备、介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |