Make the blackberry trackball pointer move in all 4 directions.

This commit is contained in:
László Monda
2019-06-13 14:26:19 +02:00
parent 60dade7e18
commit 3e87ed851a
2 changed files with 65 additions and 4 deletions

View File

@@ -10,10 +10,52 @@ void BlackberryTrackball_Init(void)
PORT_SetPinMux(BLACKBERRY_TRACKBALL_LEFT_PORT, BLACKBERRY_TRACKBALL_LEFT_PIN, kPORT_MuxAsGpio);
PORT_SetPinInterruptConfig(BLACKBERRY_TRACKBALL_LEFT_PORT, BLACKBERRY_TRACKBALL_LEFT_PIN, kPORT_InterruptEitherEdge);
NVIC_EnableIRQ(BLACKBERRY_TRACKBALL_LEFT_IRQ);
CLOCK_EnableClock(BLACKBERRY_TRACKBALL_RIGHT_CLOCK);
PORT_SetPinMux(BLACKBERRY_TRACKBALL_RIGHT_PORT, BLACKBERRY_TRACKBALL_RIGHT_PIN, kPORT_MuxAsGpio);
PORT_SetPinInterruptConfig(BLACKBERRY_TRACKBALL_RIGHT_PORT, BLACKBERRY_TRACKBALL_RIGHT_PIN, kPORT_InterruptEitherEdge);
NVIC_EnableIRQ(BLACKBERRY_TRACKBALL_RIGHT_IRQ);
CLOCK_EnableClock(BLACKBERRY_TRACKBALL_TOP_CLOCK);
PORT_SetPinMux(BLACKBERRY_TRACKBALL_TOP_PORT, BLACKBERRY_TRACKBALL_TOP_PIN, kPORT_MuxAsGpio);
PORT_SetPinInterruptConfig(BLACKBERRY_TRACKBALL_TOP_PORT, BLACKBERRY_TRACKBALL_TOP_PIN, kPORT_InterruptEitherEdge);
NVIC_EnableIRQ(BLACKBERRY_TRACKBALL_TOP_IRQ);
CLOCK_EnableClock(BLACKBERRY_TRACKBALL_BOTTOM_CLOCK);
PORT_SetPinMux(BLACKBERRY_TRACKBALL_BOTTOM_PORT, BLACKBERRY_TRACKBALL_BOTTOM_PIN, kPORT_MuxAsGpio);
PORT_SetPinInterruptConfig(BLACKBERRY_TRACKBALL_BOTTOM_PORT, BLACKBERRY_TRACKBALL_BOTTOM_PIN, kPORT_InterruptEitherEdge);
NVIC_EnableIRQ(BLACKBERRY_TRACKBALL_BOTTOM_IRQ);
}
void BLACKBERRY_TRACKBALL_IRQ_HANDLER(void)
void handleTrackball(void)
{
GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_LEFT_GPIO, 1U << BLACKBERRY_TRACKBALL_LEFT_PIN);
BlackBerryTrackball_PointerDelta.x++;
if (PORT_GetPinsInterruptFlags(BLACKBERRY_TRACKBALL_LEFT_PORT) & (1 << BLACKBERRY_TRACKBALL_LEFT_PIN)) {
BlackBerryTrackball_PointerDelta.x++;
GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_LEFT_GPIO, 1U << BLACKBERRY_TRACKBALL_LEFT_PIN);
}
if (PORT_GetPinsInterruptFlags(BLACKBERRY_TRACKBALL_RIGHT_PORT) & (1 << BLACKBERRY_TRACKBALL_RIGHT_PIN)) {
BlackBerryTrackball_PointerDelta.x--;
GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_RIGHT_GPIO, 1U << BLACKBERRY_TRACKBALL_RIGHT_PIN);
}
if (PORT_GetPinsInterruptFlags(BLACKBERRY_TRACKBALL_TOP_PORT) & (1 << BLACKBERRY_TRACKBALL_TOP_PIN)) {
BlackBerryTrackball_PointerDelta.y++;
GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_TOP_GPIO, 1U << BLACKBERRY_TRACKBALL_TOP_PIN);
}
if (PORT_GetPinsInterruptFlags(BLACKBERRY_TRACKBALL_BOTTOM_PORT) & (1 << BLACKBERRY_TRACKBALL_BOTTOM_PIN)) {
BlackBerryTrackball_PointerDelta.y--;
GPIO_ClearPinsInterruptFlags(BLACKBERRY_TRACKBALL_BOTTOM_GPIO, 1U << BLACKBERRY_TRACKBALL_BOTTOM_PIN);
}
}
void BLACKBERRY_TRACKBALL_IRQ_HANDLER1(void)
{
handleTrackball();
}
void BLACKBERRY_TRACKBALL_IRQ_HANDLER2(void)
{
handleTrackball();
}

View File

@@ -13,7 +13,26 @@
#define BLACKBERRY_TRACKBALL_LEFT_CLOCK kCLOCK_PortB
#define BLACKBERRY_TRACKBALL_LEFT_PIN 6
#define BLACKBERRY_TRACKBALL_IRQ_HANDLER PORTB_IRQHandler
#define BLACKBERRY_TRACKBALL_RIGHT_PORT PORTA
#define BLACKBERRY_TRACKBALL_RIGHT_GPIO GPIOA
#define BLACKBERRY_TRACKBALL_RIGHT_IRQ PORTA_IRQn
#define BLACKBERRY_TRACKBALL_RIGHT_CLOCK kCLOCK_PortA
#define BLACKBERRY_TRACKBALL_RIGHT_PIN 12
#define BLACKBERRY_TRACKBALL_TOP_PORT PORTB
#define BLACKBERRY_TRACKBALL_TOP_GPIO GPIOB
#define BLACKBERRY_TRACKBALL_TOP_IRQ PORTB_IRQn
#define BLACKBERRY_TRACKBALL_TOP_CLOCK kCLOCK_PortB
#define BLACKBERRY_TRACKBALL_TOP_PIN 2
#define BLACKBERRY_TRACKBALL_BOTTOM_PORT PORTB
#define BLACKBERRY_TRACKBALL_BOTTOM_GPIO GPIOB
#define BLACKBERRY_TRACKBALL_BOTTOM_IRQ PORTB_IRQn
#define BLACKBERRY_TRACKBALL_BOTTOM_CLOCK kCLOCK_PortB
#define BLACKBERRY_TRACKBALL_BOTTOM_PIN 0
#define BLACKBERRY_TRACKBALL_IRQ_HANDLER1 PORTA_IRQHandler
#define BLACKBERRY_TRACKBALL_IRQ_HANDLER2 PORTB_IRQHandler
// Variables: