Double timer interval that wasn't right for an unknown reason. Adjust mouse kinetic values accordingly. Reprioritize interrupts to make mouse pointer movement as smooth as possible.

This commit is contained in:
László Monda
2017-11-28 18:52:39 +01:00
parent 46126e1e78
commit 712b87182a
6 changed files with 26 additions and 18 deletions

View File

@@ -11,8 +11,9 @@
// Main bus
#define I2C_MAIN_BUS_BASEADDR I2C0
#define I2C_MASTER_BUS_CLK_SRC I2C0_CLK_SRC
#define I2C_MAIN_BUS_BAUD_RATE 100000 // 100 kHz works even with a 20 meter long bridge cable.
#define I2C_MAIN_BUS_IRQ_ID I2C0_IRQn
#define I2C_MAIN_BUS_CLK_SRC I2C0_CLK_SRC
#define I2C_MAIN_BUS_BAUD_RATE 100000 // 100 kHz works even with a 20 meter long bridge cable.
#define I2C_MAIN_BUS_MUX kPORT_MuxAlt7
#define I2C_MAIN_BUS_SDA_GPIO GPIOD
@@ -28,8 +29,9 @@
// EEPROM bus
#define I2C_EEPROM_BUS_BASEADDR I2C1
#define I2C_EEPROM_BUS_IRQ_ID I2C1_IRQn
#define I2C_EEPROM_BUS_CLK_SRC I2C1_CLK_SRC
#define I2C_EEPROM_BUS_BAUD_RATE 1000000 // 1 Mhz is the maximum speed of the EEPROM.
#define I2C_EEPROM_BUS_BAUD_RATE 1000000 // 1 Mhz is the maximum speed of the EEPROM.
#define I2C_EEPROM_BUS_MUX kPORT_MuxAlt2
#define I2C_EEPROM_BUS_SDA_PORT PORTC

View File

@@ -8,20 +8,22 @@
#include "peripherals/led_driver.h"
#include "peripherals/merge_sensor.h"
#include "led_pwm.h"
#include "slave_scheduler.h"
#include "peripherals/adc.h"
#include "init_peripherals.h"
#include "eeprom.h"
#include "microseconds/microseconds_pit.c"
#include "timer.h"
#include "key_debouncer.h"
#include "usb_api.h"
void InitInterruptPriorities(void)
{
NVIC_SetPriority(I2C0_IRQn, 1);
NVIC_SetPriority(I2C1_IRQn, 1);
NVIC_SetPriority(USB0_IRQn, 1);
NVIC_SetPriority(PIT1_IRQn, 6);
NVIC_SetPriority(PIT_I2C_WATCHDOG_IRQ_ID, 1);
NVIC_SetPriority(PIT_TIMER_IRQ_ID, 2);
NVIC_SetPriority(PIT_KEY_SCANNER_IRQ_ID, 3);
NVIC_SetPriority(PIT_KEY_DEBOUNCER_IRQ_ID, 3);
NVIC_SetPriority(I2C_MAIN_BUS_IRQ_ID, 3);
NVIC_SetPriority(I2C_EEPROM_BUS_IRQ_ID, 3);
NVIC_SetPriority(USB_IRQ_ID, 3);
}
void delay(void)
@@ -77,7 +79,7 @@ void InitI2cMainBus(void)
i2c_master_config_t masterConfig;
I2C_MasterGetDefaultConfig(&masterConfig);
masterConfig.baudRate_Bps = I2C_MAIN_BUS_BAUD_RATE;
uint32_t sourceClock = CLOCK_GetFreq(I2C_MASTER_BUS_CLK_SRC);
uint32_t sourceClock = CLOCK_GetFreq(I2C_MAIN_BUS_CLK_SRC);
I2C_MasterInit(I2C_MAIN_BUS_BASEADDR, &masterConfig, sourceClock);
}

View File

@@ -14,7 +14,11 @@ void Timer_Init(void)
pit_config_t pitConfig;
PIT_GetDefaultConfig(&pitConfig);
PIT_Init(PIT, &pitConfig);
PIT_SetTimerPeriod(PIT, PIT_TIMER_CHANNEL, MSEC_TO_COUNT(TIMER_INTERVAL_MSEC, PIT_SOURCE_CLOCK));
// TODO: Why the interval needs to be multiplied by two to arrive to the correct timing?
// Figure it out and clean this up.
PIT_SetTimerPeriod(PIT, PIT_TIMER_CHANNEL, MSEC_TO_COUNT(TIMER_INTERVAL_MSEC*2, PIT_SOURCE_CLOCK));
PIT_EnableInterrupts(PIT, PIT_TIMER_CHANNEL, kPIT_TimerInterruptEnable);
EnableIRQ(PIT_TIMER_IRQ_ID);
PIT_StartTimer(PIT, PIT_TIMER_CHANNEL);

View File

@@ -18,6 +18,7 @@
#define USB_DEVICE_CLASS 0x00
#define USB_DEVICE_SUBCLASS 0x00
#define USB_DEVICE_PROTOCOL 0x00
#define USB_IRQ_ID USB0_IRQn
#define USB_INTERFACE_ALTERNATE_SETTING_NONE 0x00
#define USB_STRING_DESCRIPTOR_NONE 0x00

View File

@@ -121,7 +121,6 @@ void InitUsb(void)
UsbCompositeDevice.systemKeyboardHandle = UsbDeviceCompositeConfigList.config[USB_SYSTEM_KEYBOARD_INTERFACE_INDEX].classHandle;
UsbCompositeDevice.mouseHandle = UsbDeviceCompositeConfigList.config[USB_MOUSE_INTERFACE_INDEX].classHandle;
NVIC_SetPriority((IRQn_Type)irqNumber, USB_DEVICE_INTERRUPT_PRIORITY);
NVIC_EnableIRQ((IRQn_Type)irqNumber);
USB_DeviceRun(UsbCompositeDevice.deviceHandle);

View File

@@ -30,10 +30,10 @@ static mouse_kinetic_state_t mouseMoveState = {
.leftState = SerializedMouseAction_MoveLeft,
.rightState = SerializedMouseAction_MoveRight,
.intMultiplier = 10,
.initialSpeed = 10,
.acceleration = 30,
.initialSpeed = 20,
.acceleration = 60,
.deceleratedSpeed = 1, // 25
.baseSpeed = 50,
.baseSpeed = 100,
.acceleratedSpeed = 255, // 100
};
@@ -43,10 +43,10 @@ static mouse_kinetic_state_t mouseScrollState = {
.leftState = SerializedMouseAction_ScrollLeft,
.rightState = SerializedMouseAction_ScrollRight,
.intMultiplier = 1,
.initialSpeed = 8,
.acceleration = 8,
.initialSpeed = 16,
.acceleration = 16,
.deceleratedSpeed = 1, // 25
.baseSpeed = 12,
.baseSpeed = 24,
.acceleratedSpeed = 255, // 100
};