forked from len0rd/rockbox
e200: Finally use GPIO IRQs for the buttons...it's IRQ enable bit 33 afterall and verified independently. There shouldn't now be a need to add tick tasks to monitor GPIO level status in other code.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13538 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
20a8a9a3c8
commit
5c32faad43
3 changed files with 27 additions and 34 deletions
|
|
@ -20,11 +20,11 @@
|
|||
****************************************************************************/
|
||||
|
||||
/* We believe is this quite similar to the 5020 and for how we just use that
|
||||
completely */
|
||||
completely and redifine any minor differences */
|
||||
#include "pp5020.h"
|
||||
|
||||
#undef GPIO_IRQ
|
||||
#define GPIO_IRQ (32+6)
|
||||
#define GPIO_IRQ (32+1)
|
||||
|
||||
#undef GPIO_MASK
|
||||
#define GPIO_MASK (1 << (GPIO_IRQ-32))
|
||||
|
|
|
|||
|
|
@ -39,6 +39,9 @@ static unsigned long next_backlight_on = 0;
|
|||
/* Buttons */
|
||||
static bool hold_button = false;
|
||||
static bool hold_button_old = false;
|
||||
#define _button_hold() hold_button
|
||||
#else
|
||||
#define _button_hold() ((GPIOF_INPUT_VAL & 0x80) != 0)
|
||||
#endif /* BOOTLOADER */
|
||||
static int int_btn = BUTTON_NONE;
|
||||
|
||||
|
|
@ -53,16 +56,13 @@ void button_init_device(void)
|
|||
GPIOG_ENABLE = 0x80;
|
||||
|
||||
#ifndef BOOTLOADER
|
||||
/* Get current tick before enabling button interrupts */
|
||||
last_wheel_tick = current_tick;
|
||||
last_wheel_post = current_tick;
|
||||
|
||||
GPIOH_ENABLE |= 0xc0;
|
||||
GPIOH_OUTPUT_EN &= ~0xc0;
|
||||
|
||||
#if 0
|
||||
CPU_INT_PRIORITY &= ~HI_MASK;
|
||||
CPU_HI_INT_PRIORITY &= ~GPIO_MASK;
|
||||
|
||||
CPU_INT_CLR = HI_MASK;
|
||||
CPU_HI_INT_CLR = GPIO_MASK;
|
||||
#endif
|
||||
GPIOF_INT_CLR = 0xff;
|
||||
GPIOH_INT_CLR = 0xc0;
|
||||
|
||||
|
|
@ -75,25 +75,18 @@ void button_init_device(void)
|
|||
old_wheel_value = GPIOH_INPUT_VAL & 0xc0;
|
||||
GPIOH_INT_LEV = (GPIOH_INT_LEV & ~0xc0) | (old_wheel_value ^ 0xc0);
|
||||
|
||||
/* Enable button interrupts */
|
||||
GPIOF_INT_EN = 0xff;
|
||||
GPIOH_INT_EN = 0xc0;
|
||||
#if 0
|
||||
CPU_HI_INT_EN = GPIO_MASK;
|
||||
CPU_INT_EN = HI_MASK;
|
||||
#endif
|
||||
|
||||
last_wheel_tick = current_tick;
|
||||
last_wheel_post = current_tick;
|
||||
CPU_INT_EN = HI_MASK;
|
||||
CPU_HI_INT_EN = GPIO_MASK;
|
||||
#endif /* BOOTLOADER */
|
||||
}
|
||||
|
||||
bool button_hold(void)
|
||||
{
|
||||
#ifdef BOOTLOADER
|
||||
return (GPIOF_INPUT_VAL & 0x80) != 0;
|
||||
#else
|
||||
return hold_button;
|
||||
#endif /* BOOTLOADER */
|
||||
return _button_hold();
|
||||
}
|
||||
|
||||
/* clickwheel */
|
||||
|
|
@ -118,10 +111,9 @@ void clickwheel_int(void)
|
|||
|
||||
unsigned int wheel_value;
|
||||
|
||||
GPIOH_INT_CLR = GPIOH_INT_STAT & 0xc0;
|
||||
|
||||
wheel_value = GPIOH_INPUT_VAL & 0xc0;
|
||||
GPIOH_INT_LEV = (GPIOH_INT_LEV & ~0xc0) | (wheel_value ^ 0xc0);
|
||||
GPIOH_INT_CLR = GPIOH_INT_STAT & 0xc0;
|
||||
|
||||
if (!hold_button)
|
||||
{
|
||||
|
|
@ -202,15 +194,13 @@ void button_int(void)
|
|||
state = GPIOF_INPUT_VAL & 0xff;
|
||||
|
||||
#ifndef BOOTLOADER
|
||||
GPIOF_INT_CLR = GPIOF_INT_STAT;
|
||||
GPIOF_INT_LEV = (GPIOF_INT_LEV & ~0xff) | (state ^ 0xff);
|
||||
GPIOF_INT_CLR = GPIOF_INT_STAT;
|
||||
|
||||
hold_button = (state & 0x80) != 0;
|
||||
#endif
|
||||
|
||||
if (!hold_button)
|
||||
#else
|
||||
if (button_hold())
|
||||
#endif /* BOOTLOADER */
|
||||
if (!_button_hold())
|
||||
{
|
||||
/* Read normal buttons */
|
||||
if ((state & 0x01) == 0) int_btn |= BUTTON_REC;
|
||||
|
|
|
|||
|
|
@ -63,16 +63,19 @@ void irq(void)
|
|||
{
|
||||
if(CURRENT_CORE == CPU) {
|
||||
if (CPU_INT_STAT & TIMER1_MASK) {
|
||||
#ifdef SANSA_E200
|
||||
if (GPIOF_INT_STAT & 0xff)
|
||||
button_int();
|
||||
if (GPIOH_INT_STAT & 0xc0)
|
||||
clickwheel_int();
|
||||
#endif
|
||||
TIMER1();
|
||||
}
|
||||
else if (CPU_INT_STAT & TIMER2_MASK)
|
||||
TIMER2();
|
||||
#ifdef SANSA_E200
|
||||
else if (CPU_HI_INT_STAT & GPIO_MASK)
|
||||
{
|
||||
if (GPIOF_INT_STAT & 0xff)
|
||||
button_int();
|
||||
if (GPIOH_INT_STAT & 0xc0)
|
||||
clickwheel_int();
|
||||
}
|
||||
#endif
|
||||
} else {
|
||||
if (COP_INT_STAT & TIMER1_MASK)
|
||||
TIMER1();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue