summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarl Kurbjun <kkurbjun@gmail.com>2009-05-02 23:25:55 +0000
committerKarl Kurbjun <kkurbjun@gmail.com>2009-05-02 23:25:55 +0000
commitfe2319372abd6b1f96bdc3ca45e5f6fa3165d6ed (patch)
tree0b8c5e2543615640981b14a14de7bd651665b629
parentd5f7dab2308859d98837f76f3b2374645130e082 (diff)
downloadrockbox-fe2319372abd6b1f96bdc3ca45e5f6fa3165d6ed.tar.gz
rockbox-fe2319372abd6b1f96bdc3ca45e5f6fa3165d6ed.zip
M:Robe 500 - Fix some of the Keymaps, touchscreen improvements to decrease inacurate reads, add support for dynamic frequency (was running at 87.5 MHz, now it runs at 175 MHz when boosted), disable clock to unneded modules (decreased power by 20 mA), LCD turnoff now works without graphic glitches, battery ADC read now returns scaled voltage, define backlight fading
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20846 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/keymaps/keymap-mr500.c57
-rw-r--r--firmware/drivers/rtc/rtc_rx5x348ab.c4
-rw-r--r--firmware/drivers/tsc2100.c78
-rw-r--r--firmware/export/config-mrobe500.h19
-rw-r--r--firmware/export/tsc2100.h6
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/adc-mr500.c21
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/backlight-mr500.c3
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c28
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c24
-rwxr-xr-xfirmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c32
-rw-r--r--firmware/target/arm/tms320dm320/spi-dm320.c8
-rw-r--r--firmware/target/arm/tms320dm320/spi-target.h1
-rw-r--r--firmware/target/arm/tms320dm320/system-dm320.c48
-rwxr-xr-xfirmware/target/arm/tms320dm320/system-target.h8
14 files changed, 220 insertions, 117 deletions
diff --git a/apps/keymaps/keymap-mr500.c b/apps/keymaps/keymap-mr500.c
index b044cb5e93..cd3e30dae1 100644
--- a/apps/keymaps/keymap-mr500.c
+++ b/apps/keymaps/keymap-mr500.c
@@ -73,17 +73,17 @@ static const struct button_mapping button_context_wps[] = {
{ ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT,BUTTON_NONE },
{ ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT },
- { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT },
+ { ACTION_WPS_STOPSEEK,BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT},
+ { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT},
{ ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
{ ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
{ ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
- { ACTION_WPS_QUICKSCREEN, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE },
- { ACTION_WPS_MENU, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE },
- { ACTION_WPS_CONTEXT, BUTTON_RC_HEART|BUTTON_REPEAT, BUTTON_RC_HEART },
+ { ACTION_WPS_QUICKSCREEN, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE },
+ { ACTION_WPS_MENU, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE },
+ { ACTION_WPS_CONTEXT, BUTTON_RC_HEART|BUTTON_REPEAT, BUTTON_RC_HEART },
{ ACTION_WPS_BROWSE, BUTTON_RC_HEART|BUTTON_REL, BUTTON_RC_HEART },
@@ -91,6 +91,12 @@ static const struct button_mapping button_context_wps[] = {
}; /* button_context_wps */
static const struct button_mapping button_context_list[] = {
+#ifdef HAVE_VOLUME_IN_LIST
+ { ACTION_LIST_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_LIST_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE },
+ { ACTION_LIST_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
+ { ACTION_LIST_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+#endif
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_list */
@@ -107,22 +113,36 @@ static const struct button_mapping button_context_listtree_scroll_without_combo[
};
static const struct button_mapping button_context_settings[] = {
- { ACTION_SETTINGS_INC, BUTTON_RC_VOL_UP, BUTTON_NONE },
- { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_SETTINGS_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
- { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
- { ACTION_STD_OK, BUTTON_RC_HEART, BUTTON_NONE },
- { ACTION_STD_CANCEL, BUTTON_RC_MODE, BUTTON_NONE },
+
+ { ACTION_SETTINGS_INC, BUTTON_RC_PLAY, BUTTON_NONE },
+ { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_SETTINGS_DEC, BUTTON_RC_DOWN, BUTTON_NONE },
+ { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_STD_PREV, BUTTON_RC_REW, BUTTON_NONE },
+ { ACTION_STD_PREVREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_STD_NEXT, BUTTON_RC_FF, BUTTON_NONE },
+ { ACTION_STD_NEXTREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_SETTINGS_RESET, BUTTON_RC_MODE, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings */
static const struct button_mapping button_context_settings_right_is_inc[] = {
+ { ACTION_SETTINGS_INC, BUTTON_RC_FF, BUTTON_NONE },
+ { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_SETTINGS_DEC, BUTTON_RC_REW, BUTTON_NONE },
+ { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_STD_PREV, BUTTON_RC_PLAY, BUTTON_NONE },
+ { ACTION_STD_PREVREPEAT, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_STD_NEXT, BUTTON_RC_DOWN, BUTTON_NONE },
+ { ACTION_STD_NEXTREPEAT, BUTTON_RC_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_SETTINGS_RESET, BUTTON_RC_MODE, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settingsgraphical */
static const struct button_mapping button_context_yesno[] = {
+ { ACTION_YESNO_ACCEPT, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
}; /* button_context_settings_yesno */
@@ -140,6 +160,8 @@ static const struct button_mapping button_context_bmark[] = {
}; /* button_context_bmark */
static const struct button_mapping button_context_time[] = {
+ { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
+ { ACTION_STD_OK, BUTTON_RC_HEART, BUTTON_NONE },
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
}; /* button_context_time */
@@ -154,6 +176,19 @@ static const struct button_mapping button_context_pitchscreen[] = {
}; /* button_context_pitchcreen */
static const struct button_mapping button_context_keyboard[] = {
+ { ACTION_KBD_LEFT, BUTTON_RC_REW, BUTTON_NONE },
+ { ACTION_KBD_LEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_KBD_RIGHT, BUTTON_RC_FF, BUTTON_NONE },
+ { ACTION_KBD_RIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_KBD_SELECT, BUTTON_RC_HEART, BUTTON_NONE },
+ { ACTION_KBD_DONE, BUTTON_RC_MODE|BUTTON_REL, BUTTON_NONE },
+ { ACTION_KBD_ABORT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
+ { ACTION_KBD_BACKSPACE, BUTTON_RC_VOL_DOWN, BUTTON_NONE },
+ { ACTION_KBD_BACKSPACE, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_KBD_UP, BUTTON_RC_PLAY, BUTTON_NONE },
+ { ACTION_KBD_UP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_KBD_DOWN, BUTTON_RC_DOWN, BUTTON_NONE },
+ { ACTION_KBD_DOWN, BUTTON_RC_DOWN|BUTTON_REPEAT, BUTTON_NONE },
LAST_ITEM_IN_LIST
}; /* button_context_keyboard */
diff --git a/firmware/drivers/rtc/rtc_rx5x348ab.c b/firmware/drivers/rtc/rtc_rx5x348ab.c
index 286cd774e3..2b4e17c81d 100644
--- a/firmware/drivers/rtc/rtc_rx5x348ab.c
+++ b/firmware/drivers/rtc/rtc_rx5x348ab.c
@@ -36,7 +36,7 @@ void rtc_init(void)
int rtc_read_datetime(unsigned char* buf)
{
char command = ADDR_READ|ADDR_BURST; /* burst read from the start of the time/date reg */
- spi_block_transfer(SPI_target_RX5X348AB,
+ spi_block_transfer(SPI_target_RX5X348AB, true,
&command, 1, buf, 7);
return 1;
}
@@ -48,7 +48,7 @@ int rtc_write_datetime(unsigned char* buf)
data[0] = command;
for (i=1;i<8;i++)
data[i] = buf[i-1];
- spi_block_transfer(SPI_target_RX5X348AB,
+ spi_block_transfer(SPI_target_RX5X348AB, true,
data, 8, NULL, 0);
return 1;
}
diff --git a/firmware/drivers/tsc2100.c b/firmware/drivers/tsc2100.c
index 14b56b76c9..271a557822 100644
--- a/firmware/drivers/tsc2100.c
+++ b/firmware/drivers/tsc2100.c
@@ -27,6 +27,10 @@
/* adc_data contains the last readings from the tsc2100 */
static short adc_data[10];
+static short adc_status;
+static long adc_last_read=0;
+static long adc_last_touch_read=0;
+static long adc_last_volt_read=0;
void tsc2100_read_data(void)
{
@@ -36,7 +40,11 @@ void tsc2100_read_data(void)
unsigned char out[] = {command >> 8, command & 0xff};
unsigned char *p_adc_data=(unsigned char *)&adc_data;
- spi_block_transfer(SPI_target_TSC2100,
+ adc_status|=tsc2100_readreg(TSSTAT_PAGE, TSSTAT_ADDRESS);
+
+ adc_last_read=current_tick;
+
+ spi_block_transfer(SPI_target_TSC2100, false,
out, sizeof(out), (char *)adc_data, sizeof(adc_data));
for(i=0; i<sizeof(adc_data); i+=2)
@@ -44,28 +52,55 @@ void tsc2100_read_data(void)
}
/* Read X, Y, Z1, Z2 touchscreen coordinates. */
-void tsc2100_read_touch(short *x, short* y, short *z1, short *z2)
+bool tsc2100_read_touch(short *x, short* y, short *z1, short *z2)
{
- *x = adc_data[0];
- *y = adc_data[1];
- *z1 = adc_data[2];
- *z2 = adc_data[3];
+ /* Note: This could cause problems if the current tick is not reset in ~1.3
+ * years. Noting this in the event that a suspend/resume function
+ * is added.
+ */
+ if( (adc_status&(3<<9)) && (adc_last_read - adc_last_touch_read>=0) ) {
+ *x = adc_data[0];
+ *y = adc_data[1];
+ *z1 = adc_data[2];
+ *z2 = adc_data[3];
+
+ adc_status&=~(3<<9);
+
+ adc_last_touch_read=current_tick;
+
+ return true;
+ } else {
+ return false;
+ }
}
-void tsc2100_read_volt(short *bat1, short *bat2, short *aux)
+bool tsc2100_read_volt(short *bat1, short *bat2, short *aux)
{
- *bat1 = adc_data[5];
- *bat2 = adc_data[6];
- *aux = adc_data[7];
+ if( (adc_status&(7<<4)) && TIME_BEFORE(adc_last_volt_read, adc_last_read)) {
+ *bat1 = adc_data[5];
+ *bat2 = adc_data[6];
+ *aux = adc_data[7];
+
+ adc_status&=~(7<<4);
+ adc_last_volt_read=current_tick;
+ return true;
+ } else {
+ return false;
+ }
}
-void tsc2100_set_mode(unsigned char scan_mode)
+void tsc2100_set_mode(bool poweron, unsigned char scan_mode)
{
short tsadc=(scan_mode<<TSADC_ADSCM_SHIFT)| /* mode */
(0x3<<TSADC_RESOL_SHIFT)| /* 12 bit resolution */
(0x2<<TSADC_ADCR_SHIFT )| /* 2 MHz internal clock */
(0x2<<TSADC_PVSTC_SHIFT);
+ if(!poweron)
+ {
+ tsadc|=TSADC_ADST;
+ }
+
if(scan_mode<6)
tsadc|=TSADC_PSTCM;
@@ -75,12 +110,15 @@ void tsc2100_set_mode(unsigned char scan_mode)
void tsc2100_adc_init(void)
{
/* Set the TSC2100 to read touchscreen */
- tsc2100_set_mode(0x01);
-
+ tsc2100_set_mode(true, 0x01);
+
tsc2100_writereg(TSSTAT_PAGE, TSSTAT_ADDRESS,
(0x1<<TSSTAT_PINTDAV_SHIFT) /* Data available only */
);
-
+
+ /* An additional 2 mA can be saved here by powering down vref between
+ * conversions, but it adds a click to the audio on the M:Robe 500
+ */
tsc2100_writereg(TSREF_PAGE, TSREF_ADDRESS,
TSREF_VREFM|TSREF_IREFV);
}
@@ -90,7 +128,7 @@ short tsc2100_readreg(int page, int address)
unsigned short command = 0x8000|(page << 11)|(address << 5);
unsigned char out[] = {command >> 8, command & 0xff};
unsigned char in[2];
- spi_block_transfer(SPI_target_TSC2100,
+ spi_block_transfer(SPI_target_TSC2100, false,
out, sizeof(out), in, sizeof(in));
return (in[0]<<8)|in[1];
}
@@ -101,7 +139,7 @@ void tsc2100_writereg(int page, int address, short value)
unsigned short command = (page << 11)|(address << 5);
unsigned char out[4] = {command >> 8, command & 0xff,
value >> 8, value & 0xff};
- spi_block_transfer(SPI_target_TSC2100,
+ spi_block_transfer(SPI_target_TSC2100, false,
out, sizeof(out), NULL, 0);
}
@@ -111,3 +149,11 @@ void tsc2100_keyclick(void)
//short val = 0xC410;
tsc2100_writereg(TSAC2_PAGE, TSAC2_ADDRESS, tsc2100_readreg(TSAC2_PAGE, TSAC2_ADDRESS)&0x8000);
}
+
+#ifdef HAVE_HARDWARE_BEEP
+
+void pcmbuf_beep(unsigned int frequency, size_t duration, int amplitude)
+{
+ tsc2100_keyclick();
+}
+#endif
diff --git a/firmware/export/config-mrobe500.h b/firmware/export/config-mrobe500.h
index 78802e3adf..5a97d8ba85 100644
--- a/firmware/export/config-mrobe500.h
+++ b/firmware/export/config-mrobe500.h
@@ -82,9 +82,7 @@
/* Define this if your LCD can be put to sleep. HAVE_LCD_ENABLE
should be defined as well. */
#define HAVE_LCD_SLEEP
-//#define HAVE_LCD_SLEEP_SETTING
-/* Do this for now till lcd sleeping is working properly */
-#define LCD_SLEEP_TIMEOUT 0
+#define HAVE_LCD_SLEEP_SETTING
/* remote LCD */
#define HAVE_REMOTE_LCD
@@ -110,9 +108,14 @@
#define HAVE_TOUCHSCREEN
#define HAVE_BUTTON_DATA
+/* define this if the target has volume keys which can be used in the lists */
+#define HAVE_VOLUME_IN_LIST
+
/* Define this if you do software codec */
#define CONFIG_CODEC SWCODEC
+//#define HAVE_HARDWARE_BEEP
+
/* There is no hardware tone control */
#define HAVE_SW_TONE_CONTROLS
@@ -152,8 +155,8 @@
#define BATTERY_TYPES_COUNT 1 /* only one type */
/* define current usage levels */
-#define CURRENT_NORMAL 120 /* Measured */
-#define CURRENT_BACKLIGHT 80 /* Over 200 mA total measured when on */
+#define CURRENT_NORMAL 100 /* Measured */
+#define CURRENT_BACKLIGHT 100 /* Over 200 mA total measured when on */
#define CURRENT_RECORD 0 /* no recording */
/* Hardware controlled charging with monitoring */
@@ -178,11 +181,13 @@
#define FLASH_SIZE 0x400000
/* Define this to the CPU frequency */
-#define CPU_FREQ 16934400
+#define CPU_FREQ 87500000
/* Define this if you have ATA power-off control */
#define HAVE_ATA_POWER_OFF
+#define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_HW_REG
+
/* Virtual LED (icon) */
#define CONFIG_LED LED_VIRTUAL
@@ -196,7 +201,7 @@
#define FIRMWARE_OFFSET_FILE_DATA 8
/* Define this if you have adjustable CPU frequency */
-/* #define HAVE_ADJUSTABLE_CPU_FREQ */
+#define HAVE_ADJUSTABLE_CPU_FREQ
#define BOOTFILE_EXT "mrobe500"
#define BOOTFILE "rockbox." BOOTFILE_EXT
diff --git a/firmware/export/tsc2100.h b/firmware/export/tsc2100.h
index 06714db862..7a06593fd7 100644
--- a/firmware/export/tsc2100.h
+++ b/firmware/export/tsc2100.h
@@ -22,9 +22,9 @@
#define __TSC2100_H_
void tsc2100_read_data(void);
-void tsc2100_read_touch(short *x, short* y, short *z1, short *z2);
-void tsc2100_read_volt(short *bat1, short *bat2, short *aux);
-void tsc2100_set_mode(unsigned char scan_mode);
+bool tsc2100_read_touch(short *x, short* y, short *z1, short *z2);
+bool tsc2100_read_volt(short *bat1, short *bat2, short *aux);
+void tsc2100_set_mode(bool poweron, unsigned char scan_mode);
void tsc2100_adc_init(void);
/* read a register */
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/adc-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/adc-mr500.c
index da3e2e9f44..e7e57a4f11 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/adc-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/adc-mr500.c
@@ -26,8 +26,6 @@
#include "tsc2100.h"
#include "button-target.h"
-void read_battery_inputs(void);
-
void adc_init(void)
{
/* Initialize the touchscreen and the battery readout */
@@ -48,13 +46,24 @@ void GIO14(void)
switch (adscm)
{
- case 1:
- case 2:
- touch_read_coord();
+ case 0x01:
+ case 0x02:
+ case 0x03:
+ case 0x04:
+ case 0x05:
+ /* do a battery read - this will shutdown the adc till the next tick
+ */
+// tsc2100_set_mode(true, 0x0B);
break;
+ case 0x06:
+ case 0x07:
+ case 0x08:
+ case 0x09:
case 0x0B:
- read_battery_inputs();
+ tsc2100_set_mode(true, 0x01);
break;
}
+
IO_INTC_IRQ2 = (1<<3); /* IRQ_GIO14 == 35 */
}
+
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/backlight-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/backlight-mr500.c
index ab2289822b..751a59da94 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/backlight-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/backlight-mr500.c
@@ -34,7 +34,7 @@ int _backlight_brightness=DEFAULT_BRIGHTNESS_SETTING;
static void _backlight_write_brightness(int brightness)
{
uint8_t bl_command[] = {0xa4, 0x00, brightness, 0xbb};
- spi_block_transfer(SPI_target_BACKLIGHT, bl_command, 4, 0, 0);
+ spi_block_transfer(SPI_target_BACKLIGHT, false, bl_command, 4, 0, 0);
}
void _backlight_on(void)
@@ -47,7 +47,6 @@ void _backlight_on(void)
void _backlight_off(void)
{
_backlight_write_brightness(0);
- lcd_sleep(); /* HACK to get lcd_sleep called again */
}
/* Assumes that the backlight has been initialized */
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
index 09ff6cbd78..3e7077bd6d 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/button-mr500.c
@@ -19,8 +19,6 @@
*
****************************************************************************/
-/* this file also handles the touch screen driver interface */
-
#include "config.h"
#include "cpu.h"
#include "system.h"
@@ -34,12 +32,8 @@
#include "string.h"
#include "touchscreen.h"
-static bool touch_available = false;
static bool hold_button = false;
-static short touch_x, touch_y, touch_z1, touch_z2;
-static long last_touch = 0;
-
static struct touch_calibration_point topleft, bottomright;
/* Jd's tests.. These will hopefully work for everyone so we dont have to
@@ -85,7 +79,6 @@ static int touch_to_pixels(short *val_x, short *val_y)
void button_init_device(void)
{
- touch_available = false;
/* GIO is the power button, set as input */
IO_GIO_DIR0 |= 0x01;
@@ -115,33 +108,25 @@ inline bool button_hold(void)
return hold_button;
}
-/* This is called from the tsc2100 interupt handler in adc-mr500.c */
-void touch_read_coord(void)
-{
- touch_available = true;
- tsc2100_read_touch(&touch_x, &touch_y, &touch_z1, &touch_z2);
-}
-
int button_read_device(int *data)
{
int button_read = BUTTON_NONE;
+ short touch_x, touch_y, touch_z1, touch_z2;
static bool hold_button_old = false;
*data = 0;
/* Handle touchscreen */
- if (touch_available)
+ if (tsc2100_read_touch(&touch_x, &touch_y, &touch_z1, &touch_z2))
{
*data = touch_to_pixels(&touch_x, &touch_y);
button_read |= touchscreen_to_pixels(touch_x, touch_y, data);
-
- touch_available = false;
- last_touch=current_tick;
}
+ tsc2100_set_mode(true, 0x01);
+
/* Handle power button */
- if ((IO_GIO_BITSET0&0x01) == 0)
- {
+ if ((IO_GIO_BITSET0&0x01) == 0) {
button_read |= BUTTON_POWER;
}
@@ -152,8 +137,7 @@ int button_read_device(int *data)
/* Take care of hold notifications */
#ifndef BOOTLOADER
/* give BL notice if HB state chaged */
- if (hold_button != hold_button_old)
- {
+ if (hold_button != hold_button_old) {
backlight_hold_changed(hold_button);
hold_button_old=hold_button;
}
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
index af5a6504e6..1dc453b800 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
@@ -60,15 +60,17 @@ void lcd_sleep()
{
if (lcd_on)
{
+ lcd_on = false;
+ memset16(FRAME, 0xFFFF, LCD_WIDTH*LCD_HEIGHT);
+ sleep(HZ/5);
/* Disabling these saves another ~15mA */
- IO_OSD_OSDWINMD0&=~(0x01);
- IO_VID_ENC_VMOD&=~(0x01);
-
- sleep(HZ/5);
+ IO_OSD_OSDWINMD0&= ~(0x01);
+ IO_VID_ENC_VMOD &= ~(0x01);
+
+// IO_CLK_MOD1 &= ~(0x0018);
/* Disabling the LCD saves ~50mA */
IO_GIO_BITCLR2=1<<4;
- lcd_on = false;
}
}
@@ -79,15 +81,19 @@ void lcd_awake(void)
{
lcd_on=true;
- IO_OSD_OSDWINMD0|=0x01;
- IO_VID_ENC_VMOD|=0x01;
+// IO_CLK_MOD1 |= 0x0018;
+ IO_OSD_OSDWINMD0|= 0x01;
+ IO_VID_ENC_VMOD |= 0x01;
sleep(2);
IO_GIO_BITSET2=1<<4;
- /* Wait long enough for a frame to be written */
- sleep(HZ/20);
lcd_update();
+
+ /* Wait long enough for a frame to be written */
+ sleep(HZ/10);
+
+
lcd_activation_call_hook();
}
}
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c
index 654ec96591..60949b2c18 100755
--- a/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c
@@ -36,37 +36,41 @@ const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
0
};
+/* 6.10 format */
+
/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */
const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
{
- { 100, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1320 },
+ { 375, 1125, 1500, 1875, 2250, 2625, 3000, 3375, 3750, 4500, 4950 },
};
/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */
const unsigned short percent_to_volt_charge[11] =
{
- 100, 300, 400, 500, 600, 700, 800, 900, 1000, 1200, 1320,
+ 375, 1125, 1500, 1875, 2250, 2625, 3000, 3375, 3750, 4500, 4950,
};
-
-void read_battery_inputs(void)
-{
- short dummy1, dummy2;
- tsc2100_read_volt(&current_voltage, &dummy1, &dummy2);
-
- /* Set the TSC2100 back to read touches */
- tsc2100_set_mode(0x01);
-}
/* Returns battery voltage from ADC [millivolts] */
unsigned int battery_adc_voltage(void)
{
+ short bat1, bat2, aux;
static unsigned last_tick = 0;
+ short tsadc;
+
+ if(tsc2100_read_volt(&bat1, &bat2, &aux)){
+ current_voltage=((short)((int)(bat1<<10)/4096*6*2.5));
+ }
if (TIME_BEFORE(last_tick+2*HZ, current_tick))
{
- /* Set the TSC2100 to read voltages */
- tsc2100_set_mode(0x0B);
- last_tick = current_tick;
+ tsadc=tsc2100_readreg(TSADC_PAGE, TSADC_ADDRESS);
+
+ /* Set the TSC2100 to read voltages if not busy with pen */
+ if(!(tsadc & TSADC_PSTCM))
+ {
+ tsc2100_set_mode(true, 0x0B);
+ last_tick = current_tick;
+ }
}
return current_voltage;
diff --git a/firmware/target/arm/tms320dm320/spi-dm320.c b/firmware/target/arm/tms320dm320/spi-dm320.c
index 6375298c0f..2d5637b70e 100644
--- a/firmware/target/arm/tms320dm320/spi-dm320.c
+++ b/firmware/target/arm/tms320dm320/spi-dm320.c
@@ -65,10 +65,14 @@ static void spi_disable_all_targets(void)
}
int spi_block_transfer(enum SPI_target target,
+ const bool spi_msb_first,
const uint8_t *tx_bytes, unsigned int tx_size,
uint8_t *rx_bytes, unsigned int rx_size)
{
mutex_lock(&spi_mtx);
+
+ IO_SERIAL0_MODE = (IO_SERIAL0_MODE& ~(spi_msb_first<<9))|(spi_msb_first<<9);
+
/* Activate the slave select pin */
*spi_targets[target].setreg = spi_targets[target].bit;
@@ -102,8 +106,8 @@ int spi_block_transfer(enum SPI_target target,
void spi_init(void)
{
mutex_init(&spi_mtx);
- /* Set SCLK idle level = 0 */
- IO_SERIAL0_MODE |= IO_SERIAL0_MODE_SCLK;
+
+ IO_SERIAL0_MODE = 0x3607;
/* Enable TX */
IO_SERIAL0_TX_ENABLE = 0x0001;
#ifndef CREATIVE_ZVx
diff --git a/firmware/target/arm/tms320dm320/spi-target.h b/firmware/target/arm/tms320dm320/spi-target.h
index 013737b291..7fc0b72a28 100644
--- a/firmware/target/arm/tms320dm320/spi-target.h
+++ b/firmware/target/arm/tms320dm320/spi-target.h
@@ -38,6 +38,7 @@ enum SPI_target {
void spi_init(void);
int spi_block_transfer(enum SPI_target target,
+ const bool spi_msb_first,
const uint8_t *tx_bytes, unsigned int tx_size,
uint8_t *rx_bytes, unsigned int rx_size);
diff --git a/firmware/target/arm/tms320dm320/system-dm320.c b/firmware/target/arm/tms320dm320/system-dm320.c
index 638e378159..0142f7b18b 100644
--- a/firmware/target/arm/tms320dm320/system-dm320.c
+++ b/firmware/target/arm/tms320dm320/system-dm320.c
@@ -217,6 +217,29 @@ void system_init(void)
IO_INTC_FISEL0 = 0;
IO_INTC_FISEL1 = 0;
IO_INTC_FISEL2 = 0;
+
+ /* setup the clocks */
+ IO_CLK_DIV0=0x0003;
+ IO_CLK_DIV1=0x0102;
+ IO_CLK_DIV2=0x021F;
+ IO_CLK_DIV3=0x1FFF;
+ IO_CLK_DIV4=0x1F00;
+
+ IO_CLK_PLLA=0x80A0;
+ IO_CLK_PLLB=0x80C0;
+
+ IO_CLK_SEL0=0x017E;
+ IO_CLK_SEL1=0x1000;
+ IO_CLK_SEL2=0x1001;
+
+ /* need to wait before bypassing */
+
+ IO_CLK_BYP=0x0000;
+
+ /* turn off some unneeded modules */
+ IO_CLK_MOD0 &= ~0x0018;
+ IO_CLK_MOD1 = 0x0918;
+ IO_CLK_MOD2 = ~0x7C58;
/* IRQENTRY only reflects enabled interrupts */
IO_INTC_RAW = 0;
@@ -224,6 +247,7 @@ void system_init(void)
IO_INTC_ENTRY_TBA0 = 0;
IO_INTC_ENTRY_TBA1 = 0;
+
int i;
/* Set interrupt priorities to predefined values */
for(i = 0; i < 23; i++)
@@ -275,27 +299,13 @@ int system_memory_guard(int newmode)
}
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
-
void set_cpu_frequency(long frequency)
{
- if (frequency == CPUFREQ_MAX)
- {
- asm volatile("mov r0, #0\n"
- "mrc p15, 0, r0, c1, c0, 0\n"
- "orr r0, r0, #3<<30\n" /* set to Asynchronous mode*/
- "mcr p15, 0, r0, c1, c0, 0" : : : "r0");
-
- FREQ = CPUFREQ_MAX;
- }
- else
- {
- asm volatile("mov r0, #0\n"
- "mrc p15, 0, r0, c1, c0, 0\n"
- "bic r0, r0, #3<<30\n" /* set to FastBus mode*/
- "mcr p15, 0, r0, c1, c0, 0" : : : "r0");
-
- FREQ = CPUFREQ_NORMAL;
+ if (frequency == CPUFREQ_MAX) {
+ IO_CLK_DIV0 = 0x0101; /* 175 MHz ARM */
+ } else {
+ IO_CLK_DIV0 = 0x0003; /* 87.5 MHz ARM - not much savings, about 3 mA */
}
}
-
#endif
+
diff --git a/firmware/target/arm/tms320dm320/system-target.h b/firmware/target/arm/tms320dm320/system-target.h
index f1e52ad5a0..63d314f572 100755
--- a/firmware/target/arm/tms320dm320/system-target.h
+++ b/firmware/target/arm/tms320dm320/system-target.h
@@ -23,9 +23,9 @@
#include "system-arm.h"
-#define CPUFREQ_SLEEP 32768
-#define CPUFREQ_DEFAULT 24000000
-#define CPUFREQ_NORMAL 30000000
-#define CPUFREQ_MAX 80000000
+#define CPUFREQ_SLEEP 32768
+#define CPUFREQ_DEFAULT 87500000
+#define CPUFREQ_NORMAL 87500000
+#define CPUFREQ_MAX 175000000
#endif /* SYSTEM_TARGET_H */