当前位置:网站首页>I.MX6U-ALPHA开发板(定时器按键消抖)
I.MX6U-ALPHA开发板(定时器按键消抖)
2022-08-02 07:20:00 【*﹏ℳ๓无情*】
文章目录
定时器按键消抖简介
当按键按下以后,进入到中断服务函数中,开始一个定时器,定时周期位10ms,只有最后一个抖动信号开启的定时器才能完成的执行完一个周期。当定时器产生周期中断以后就在中断服务函数里面做具体的处理,比如开关蜂鸣器。
//bsp_keyfilter.c
#ifndef _BSP_KEYFILTER_H
#define _BSP_KEYFILTER_H
/* 函数声明 */
void filterkey_init(void);
void filtertimer_init(unsigned int value);
void filtertimer_stop(void);
void filtertimer_restart(unsigned int value);
void filtertimer_irqhandler(void);
void gpio1_16_31_irqhandler(void);
#endif
//bsp_keyfilter.c
#include "bsp_key.h"
#include "bsp_gpio.h"
#include "bsp_int.h"
#include "bsp_beep.h"
#include "bsp_keyfilter.h"
//按键初始化
void filterkey_init(void)
{
gpio_pin_config_t key_config;
/* 1、初始化IO复用 */
IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18,0); /* 复用为GPIO1_IO18 */
/* 2、、配置GPIO1_IO18的IO属性 *bit 16:0 HYS关闭 *bit [15:14]: 11 默认22K上拉 *bit [13]: 1 pull功能 *bit [12]: 1 pull/keeper使能 *bit [11]: 0 关闭开路输出 *bit [7:6]: 10 速度100Mhz *bit [5:3]: 000 关闭输出 *bit [0]: 0 低转换率 */
IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18,0xF080);
/* 3、初始化GPIO为中断 */
key_config.direction = kGPIO_DigitalInput;
key_config.interruptMode = kGPIO_IntFallingEdge;
key_config.outputLogic = 1;
gpio_init(GPIO1, 18, &key_config);
GIC_EnableIRQ(GPIO1_Combined_16_31_IRQn); /* 使能GIC中对应的中断 */
/* 注册中断服务函数 */
system_register_irqhandler(GPIO1_Combined_16_31_IRQn,
(system_irq_handler_t)gpio1_16_31_irqhandler,
NULL);
gpio_enableint(GPIO1, 18); /* 使能GPIO1_IO18的中断功能 */
filtertimer_init(66000000/100); /* 初始化定时器,10ms */
}
//初始化用于消抖的定时器,默认关闭定时器
void filtertimer_init(unsigned int value)
{
EPIT1->CR = 0; //先清零
/* * CR寄存器: * bit25:24 01 时钟源选择Peripheral clock=66MHz * bit15:4 0 1分频 * bit3: 1 当计数器到0的话从LR重新加载数值 * bit2: 1 比较中断使能 * bit1: 1 初始计数值来源于LR寄存器值 * bit0: 0 先关闭EPIT1 */
EPIT1->CR = (1<<24 | 1<<3 | 1<<2 | 1<<1);
/* 计数值 */
EPIT1->LR = value;
/* 比较寄存器,当计数器值和此寄存器值相等的话就会产生中断 */
EPIT1->CMPR = 0;
GIC_EnableIRQ(EPIT1_IRQn); /* 使能GIC中对应的中断 */
/* 注册中断服务函数 */
system_register_irqhandler(EPIT1_IRQn, (system_irq_handler_t)filtertimer_irqhandler, NULL);
}
//关闭定时器
void filtertimer_stop(void)
{
EPIT1->CR &= ~(1<<0); /* 关闭定时器 */
}
// 重启定时器
void filtertimer_restart(unsigned int value)
{
EPIT1->CR &= ~(1<<0); /* 先关闭定时器 */
EPIT1->LR = value; /* 计数值 */
EPIT1->CR |= (1<<0); /* 打开定时器 */
}
//定时器中断处理函数
void filtertimer_irqhandler(void)
{
static unsigned char state = OFF;
if(EPIT1->SR & (1<<0)) /* 判断比较事件是否发生 */
{
filtertimer_stop(); /* 关闭定时器 */
if(gpio_pinread(GPIO1, 18) == 0) /* KEY0 */
{
state = !state;
beep_switch(state); /* 反转蜂鸣器 */
}
}
EPIT1->SR |= 1<<0; /* 清除中断标志位 */
}
// GPIO中断处理函数
void gpio1_16_31_irqhandler(void)
{
/* 开启定时器 */
filtertimer_restart(66000000/100);
/* 清除中断标志位 */
gpio_clearintflags(GPIO1, 18);
}
边栏推荐
- Comprehensive experiment of MPLS and BGP
- MySQL-慢查询日志
- mysql操作入门(四)-----数据排序(升序、降序、多字段排序)
- Introduction to mysql operation (4) ----- data sorting (ascending, descending, multi-field sorting)
- OC-Category
- DeadLock的可视化分析
- Data Middle Office: Started in Ali, Prosperous in DaaS
- flutter 自己写一个组件
- Splunk Field Caculated Calculated Field
- postgres groupby 合并字符串
猜你喜欢

MySQL-数据库事务详解

HCIP第二天

OSPF 综合实验

mysql操作入门(四)-----数据排序(升序、降序、多字段排序)

MySQL - index explanation
![MySQL error 1055 solution: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains](/img/aa/ab58ec47bb96df803dbc6a8ff6dde3.png)
MySQL error 1055 solution: [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains

HCIP 第十三天

UG NX二次开发(C#)-外部模式-导出dwg格式的文件

HCIP第三天

Mysql报错2003 解决办法 Can‘t connect to MySQL server on ‘localhost‘ (10061)
随机推荐
postgres groupby 合并字符串
Transimpedance amplifier
用户身份标识与账号体系实践
gdalinfo: error while loading shared libraries: libgdal.so.30: cannot open shared object file: No su
Appium 滑动问题
HCIP第一天
flutter 自己写一个组件
HCIP第七天
(2022 Nioke Duo School 5) C-Bit Transmission (Thinking)
MySQL-数据库事务详解
OSPF 综合实验
How to export multiple query results at once in SQL server 2014?
有关 sql中的 concat()函数问题,如何拼接
From cloud computing to function computing
Metasploit(MSF)基础超级详细版
PanGu-Coder:函数级的代码生成模型
PLSQL Developer安装和配置
Neural network
Xilinx Constraint Study Notes - Timing Constraints
mysql操作入门(四)-----数据排序(升序、降序、多字段排序)