diff options
-rw-r--r-- | firmware/drivers/tsc2100.c | 60 | ||||
-rw-r--r-- | firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c | 5 |
2 files changed, 54 insertions, 11 deletions
diff --git a/firmware/drivers/tsc2100.c b/firmware/drivers/tsc2100.c index 88402fe3ad..14b56b76c9 100644 --- a/firmware/drivers/tsc2100.c +++ b/firmware/drivers/tsc2100.c | |||
@@ -25,20 +25,64 @@ | |||
25 | #include "spi.h" | 25 | #include "spi.h" |
26 | #include "tsc2100.h" | 26 | #include "tsc2100.h" |
27 | 27 | ||
28 | /* Read X, Y, Z1, Z2 touchscreen coordinates. */ | 28 | /* adc_data contains the last readings from the tsc2100 */ |
29 | void tsc2100_read_values(short *x, short* y, short *z1, short *z2) | 29 | static short adc_data[10]; |
30 | |||
31 | void tsc2100_read_data(void) | ||
30 | { | 32 | { |
31 | int page = 0, address = 0; | 33 | int page = 0, address = 0; |
34 | unsigned int i; | ||
32 | unsigned short command = 0x8000|(page << 11)|(address << 5); | 35 | unsigned short command = 0x8000|(page << 11)|(address << 5); |
33 | unsigned char out[] = {command >> 8, command & 0xff}; | 36 | unsigned char out[] = {command >> 8, command & 0xff}; |
34 | unsigned char in[8]; | 37 | unsigned char *p_adc_data=(unsigned char *)&adc_data; |
38 | |||
35 | spi_block_transfer(SPI_target_TSC2100, | 39 | spi_block_transfer(SPI_target_TSC2100, |
36 | out, sizeof(out), in, sizeof(in)); | 40 | out, sizeof(out), (char *)adc_data, sizeof(adc_data)); |
41 | |||
42 | for(i=0; i<sizeof(adc_data); i+=2) | ||
43 | adc_data[i>>1]=(short)(p_adc_data[i]<<8|p_adc_data[i+1]); | ||
44 | } | ||
45 | |||
46 | /* Read X, Y, Z1, Z2 touchscreen coordinates. */ | ||
47 | void tsc2100_read_touch(short *x, short* y, short *z1, short *z2) | ||
48 | { | ||
49 | *x = adc_data[0]; | ||
50 | *y = adc_data[1]; | ||
51 | *z1 = adc_data[2]; | ||
52 | *z2 = adc_data[3]; | ||
53 | } | ||
37 | 54 | ||
38 | *x = (in[0]<<8)|in[1]; | 55 | void tsc2100_read_volt(short *bat1, short *bat2, short *aux) |
39 | *y = (in[2]<<8)|in[3]; | 56 | { |
40 | *z1 = (in[4]<<8)|in[5]; | 57 | *bat1 = adc_data[5]; |
41 | *z2 = (in[6]<<8)|in[7]; | 58 | *bat2 = adc_data[6]; |
59 | *aux = adc_data[7]; | ||
60 | } | ||
61 | |||
62 | void tsc2100_set_mode(unsigned char scan_mode) | ||
63 | { | ||
64 | short tsadc=(scan_mode<<TSADC_ADSCM_SHIFT)| /* mode */ | ||
65 | (0x3<<TSADC_RESOL_SHIFT)| /* 12 bit resolution */ | ||
66 | (0x2<<TSADC_ADCR_SHIFT )| /* 2 MHz internal clock */ | ||
67 | (0x2<<TSADC_PVSTC_SHIFT); | ||
68 | |||
69 | if(scan_mode<6) | ||
70 | tsadc|=TSADC_PSTCM; | ||
71 | |||
72 | tsc2100_writereg(TSADC_PAGE, TSADC_ADDRESS, tsadc); | ||
73 | } | ||
74 | |||
75 | void tsc2100_adc_init(void) | ||
76 | { | ||
77 | /* Set the TSC2100 to read touchscreen */ | ||
78 | tsc2100_set_mode(0x01); | ||
79 | |||
80 | tsc2100_writereg(TSSTAT_PAGE, TSSTAT_ADDRESS, | ||
81 | (0x1<<TSSTAT_PINTDAV_SHIFT) /* Data available only */ | ||
82 | ); | ||
83 | |||
84 | tsc2100_writereg(TSREF_PAGE, TSREF_ADDRESS, | ||
85 | TSREF_VREFM|TSREF_IREFV); | ||
42 | } | 86 | } |
43 | 87 | ||
44 | short tsc2100_readreg(int page, int address) | 88 | short tsc2100_readreg(int page, int address) |
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c index 20b830b02d..af5a6504e6 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c | |||
@@ -84,9 +84,8 @@ void lcd_awake(void) | |||
84 | 84 | ||
85 | sleep(2); | 85 | sleep(2); |
86 | IO_GIO_BITSET2=1<<4; | 86 | IO_GIO_BITSET2=1<<4; |
87 | /* Wait long enough for a frame to be written - yes, it | 87 | /* Wait long enough for a frame to be written */ |
88 | * takes awhile. */ | 88 | sleep(HZ/20); |
89 | sleep(HZ/5); | ||
90 | 89 | ||
91 | lcd_update(); | 90 | lcd_update(); |
92 | lcd_activation_call_hook(); | 91 | lcd_activation_call_hook(); |