Remove the debouncing interrupt
This commit is contained in:
@@ -12,7 +12,6 @@
|
|||||||
#include "init_peripherals.h"
|
#include "init_peripherals.h"
|
||||||
#include "eeprom.h"
|
#include "eeprom.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "key_debouncer.h"
|
|
||||||
#include "usb_api.h"
|
#include "usb_api.h"
|
||||||
#include "slave_scheduler.h"
|
#include "slave_scheduler.h"
|
||||||
#include "bootloader/wormhole.h"
|
#include "bootloader/wormhole.h"
|
||||||
@@ -67,7 +66,6 @@ static void initInterruptPriorities(void)
|
|||||||
NVIC_SetPriority(I2C_EEPROM_BUS_IRQ_ID, 0);
|
NVIC_SetPriority(I2C_EEPROM_BUS_IRQ_ID, 0);
|
||||||
NVIC_SetPriority(PIT_TIMER_IRQ_ID, 3);
|
NVIC_SetPriority(PIT_TIMER_IRQ_ID, 3);
|
||||||
NVIC_SetPriority(PIT_KEY_SCANNER_IRQ_ID, 4);
|
NVIC_SetPriority(PIT_KEY_SCANNER_IRQ_ID, 4);
|
||||||
NVIC_SetPriority(PIT_KEY_DEBOUNCER_IRQ_ID, 4);
|
|
||||||
NVIC_SetPriority(I2C_MAIN_BUS_IRQ_ID, 4);
|
NVIC_SetPriority(I2C_MAIN_BUS_IRQ_ID, 4);
|
||||||
NVIC_SetPriority(USB_IRQ_ID, 4);
|
NVIC_SetPriority(USB_IRQ_ID, 4);
|
||||||
}
|
}
|
||||||
@@ -159,6 +157,5 @@ void InitPeripherals(void)
|
|||||||
TestLed_Init();
|
TestLed_Init();
|
||||||
LedPwm_Init();
|
LedPwm_Init();
|
||||||
InitI2cWatchdog();
|
InitI2cWatchdog();
|
||||||
InitKeyDebouncer();
|
|
||||||
EEPROM_Init();
|
EEPROM_Init();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
#include "key_debouncer.h"
|
|
||||||
#include "fsl_pit.h"
|
|
||||||
#include "slot.h"
|
|
||||||
#include "module.h"
|
|
||||||
#include "key_states.h"
|
|
||||||
#include "peripherals/test_led.h"
|
|
||||||
|
|
||||||
void PIT_KEY_DEBOUNCER_HANDLER(void)
|
|
||||||
{
|
|
||||||
TestLed_Toggle();
|
|
||||||
for (uint8_t slotId=0; slotId<SLOT_COUNT; slotId++) {
|
|
||||||
for (uint8_t keyId=0; keyId<MAX_KEY_COUNT_PER_MODULE; keyId++) {
|
|
||||||
uint8_t *debounceCounter = &KeyStates[slotId][keyId].debounceCounter;
|
|
||||||
if (*debounceCounter) {
|
|
||||||
--(*debounceCounter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
PIT_ClearStatusFlags(PIT, PIT_KEY_DEBOUNCER_CHANNEL, PIT_TFLG_TIF_MASK);
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitKeyDebouncer(void)
|
|
||||||
{
|
|
||||||
pit_config_t pitConfig;
|
|
||||||
PIT_GetDefaultConfig(&pitConfig);
|
|
||||||
PIT_Init(PIT, &pitConfig);
|
|
||||||
PIT_SetTimerPeriod(PIT, PIT_KEY_DEBOUNCER_CHANNEL, MSEC_TO_COUNT(KEY_DEBOUNCER_INTERVAL_MSEC, PIT_SOURCE_CLOCK));
|
|
||||||
PIT_EnableInterrupts(PIT, PIT_KEY_DEBOUNCER_CHANNEL, kPIT_TimerInterruptEnable);
|
|
||||||
EnableIRQ(PIT_KEY_DEBOUNCER_IRQ_ID);
|
|
||||||
PIT_StartTimer(PIT, PIT_KEY_DEBOUNCER_CHANNEL);
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
#ifndef __KEY_DEBOUNCER_H__
|
|
||||||
#define __KEY_DEBOUNCER_H__
|
|
||||||
|
|
||||||
// Includes:
|
|
||||||
|
|
||||||
#include "peripherals/pit.h"
|
|
||||||
#include "fsl_common.h"
|
|
||||||
|
|
||||||
// Macros:
|
|
||||||
|
|
||||||
#define KEY_DEBOUNCER_INTERVAL_MSEC 1
|
|
||||||
#define KEY_DEBOUNCER_TIMEOUT_MSEC 100
|
|
||||||
|
|
||||||
// Functions:
|
|
||||||
|
|
||||||
void InitKeyDebouncer(void);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -10,10 +10,11 @@
|
|||||||
// Typedefs:
|
// Typedefs:
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t debounceCounter;
|
uint8_t timestamp;
|
||||||
bool previous : 1;
|
bool previous : 1;
|
||||||
bool current : 1;
|
bool current : 1;
|
||||||
bool suppressed : 1;
|
bool suppressed : 1;
|
||||||
|
bool debouncing : 1;
|
||||||
} key_state_t;
|
} key_state_t;
|
||||||
|
|
||||||
// Variables:
|
// Variables:
|
||||||
|
|||||||
@@ -21,8 +21,4 @@
|
|||||||
#define PIT_KEY_SCANNER_IRQ_ID PIT2_IRQn
|
#define PIT_KEY_SCANNER_IRQ_ID PIT2_IRQn
|
||||||
#define PIT_KEY_SCANNER_CHANNEL kPIT_Chnl_2
|
#define PIT_KEY_SCANNER_CHANNEL kPIT_Chnl_2
|
||||||
|
|
||||||
#define PIT_KEY_DEBOUNCER_HANDLER PIT3_IRQHandler
|
|
||||||
#define PIT_KEY_DEBOUNCER_IRQ_ID PIT3_IRQn
|
|
||||||
#define PIT_KEY_DEBOUNCER_CHANNEL kPIT_Chnl_3
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -13,7 +13,6 @@
|
|||||||
#include "layer.h"
|
#include "layer.h"
|
||||||
#include "usb_report_updater.h"
|
#include "usb_report_updater.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "key_debouncer.h"
|
|
||||||
#include "config_parser/parse_keymap.h"
|
#include "config_parser/parse_keymap.h"
|
||||||
#include "usb_commands/usb_command_get_debug_buffer.h"
|
#include "usb_commands/usb_command_get_debug_buffer.h"
|
||||||
#include "arduino_hid/ConsumerAPI.h"
|
#include "arduino_hid/ConsumerAPI.h"
|
||||||
@@ -350,10 +349,15 @@ static void updateActiveUsbReports(void)
|
|||||||
key_state_t *keyState = &KeyStates[slotId][keyId];
|
key_state_t *keyState = &KeyStates[slotId][keyId];
|
||||||
key_action_t *action = &CurrentKeymap[activeLayer][slotId][keyId];
|
key_action_t *action = &CurrentKeymap[activeLayer][slotId][keyId];
|
||||||
|
|
||||||
if (keyState->debounceCounter) {
|
if (keyState->debouncing) {
|
||||||
|
if ((uint8_t)(Timer_GetCurrentTime() - keyState->timestamp) > KEY_BOUNCE_TIME_MSEC) {
|
||||||
|
keyState->debouncing = false;
|
||||||
|
} else {
|
||||||
keyState->current = keyState->previous;
|
keyState->current = keyState->previous;
|
||||||
|
}
|
||||||
} else if (!keyState->previous && keyState->current) {
|
} else if (!keyState->previous && keyState->current) {
|
||||||
keyState->debounceCounter = KEY_DEBOUNCER_TIMEOUT_MSEC + 1;
|
keyState->timestamp = Timer_GetCurrentTime();
|
||||||
|
keyState->debouncing = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyState->current) {
|
if (keyState->current) {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
// Macros:
|
// Macros:
|
||||||
|
|
||||||
#define MAX_KEYS_IN_MATRIX 100
|
#define MAX_KEYS_IN_MATRIX 100
|
||||||
|
#define KEY_BOUNCE_TIME_MSEC 100
|
||||||
|
|
||||||
// Typedefs:
|
// Typedefs:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user