diff options
author | Tomasz Moń <desowin@gmail.com> | 2011-12-24 14:18:53 +0000 |
---|---|---|
committer | Tomasz Moń <desowin@gmail.com> | 2011-12-24 14:18:53 +0000 |
commit | 4539ffe1f384ddc9b3b5eecf95fbd33ece3d4f2e (patch) | |
tree | 643c72c339f0499c42bf315c26a58e66c86cd118 /firmware/target/arm/tms320dm320/debug-dm320.c | |
parent | 616d7869e9a0b55b83157c3f3085243fecda1586 (diff) | |
download | rockbox-4539ffe1f384ddc9b3b5eecf95fbd33ece3d4f2e.tar.gz rockbox-4539ffe1f384ddc9b3b5eecf95fbd33ece3d4f2e.zip |
TMS320DM320: Add generic I/O debug window for targets other than mrobe 500.
DEBUG_GIO allows users to set any GIO options (direction, output state). As this feature should be used only by experienced users it is compiled conditionally.
Raise I2C delay values since udelay() is now precise and previous values seems to be too low for some devices.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31421 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/tms320dm320/debug-dm320.c')
-rw-r--r-- | firmware/target/arm/tms320dm320/debug-dm320.c | 170 |
1 files changed, 164 insertions, 6 deletions
diff --git a/firmware/target/arm/tms320dm320/debug-dm320.c b/firmware/target/arm/tms320dm320/debug-dm320.c index 262d843bfc..57b4bc5982 100644 --- a/firmware/target/arm/tms320dm320/debug-dm320.c +++ b/firmware/target/arm/tms320dm320/debug-dm320.c | |||
@@ -7,6 +7,7 @@ | |||
7 | * \/ \/ \/ \/ \/ | 7 | * \/ \/ \/ \/ \/ |
8 | * $Id$ | 8 | * $Id$ |
9 | * | 9 | * |
10 | * Copyright (C) 2011 by Tomasz Moń | ||
10 | * Copyright (C) 2007, 2009 by Karl Kurbjun | 11 | * Copyright (C) 2007, 2009 by Karl Kurbjun |
11 | * | 12 | * |
12 | * This program is free software; you can redistribute it and/or | 13 | * This program is free software; you can redistribute it and/or |
@@ -36,25 +37,134 @@ | |||
36 | #include "m66591.h" | 37 | #include "m66591.h" |
37 | #endif | 38 | #endif |
38 | 39 | ||
40 | /* define only if you know what you are doing */ | ||
41 | #undef DEBUG_GIO | ||
42 | |||
43 | #ifdef DEBUG_GIO | ||
44 | #ifdef SANSA_CONNECT | ||
45 | #define DEBUG_GIO_SET BUTTON_UP | ||
46 | #define DEBUG_GIO_SET_TXT "UP" | ||
47 | |||
48 | #define DEBUG_GIO_CLR BUTTON_DOWN | ||
49 | #define DEBUG_GIO_CLR_TXT "DOWN" | ||
50 | |||
51 | #define DEBUG_GIO_TOGGLE BUTTON_SELECT | ||
52 | #define DEBUG_GIO_TOGGLE_TXT "SELECT" | ||
53 | |||
54 | #define DEBUG_GIO_NEXT BUTTON_SCROLL_FWD | ||
55 | #define DEBUG_GIO_PREV BUTTON_SCROLL_BACK | ||
56 | #else | ||
57 | #warning "No keymap defined for target" | ||
58 | #endif | ||
59 | |||
60 | static void gio_set(int gio) | ||
61 | { | ||
62 | if (gio < 0) | ||
63 | return; | ||
64 | |||
65 | if (gio <= 15) | ||
66 | IO_GIO_BITSET0 = (1 << gio); | ||
67 | else if (gio <= 31) | ||
68 | IO_GIO_BITSET1 = (1 << (gio-16)); | ||
69 | else if (gio <= 40) | ||
70 | IO_GIO_BITSET2 = (1 << (gio-32)); | ||
71 | } | ||
72 | |||
73 | static void gio_clear(int gio) | ||
74 | { | ||
75 | if (gio < 0) | ||
76 | return; | ||
77 | |||
78 | if (gio <= 15) | ||
79 | IO_GIO_BITCLR0 = (1 << gio); | ||
80 | else if (gio <= 31) | ||
81 | IO_GIO_BITCLR1 = (1 << (gio-16)); | ||
82 | else if (gio <= 40) | ||
83 | IO_GIO_BITCLR2 = (1 << (gio-32)); | ||
84 | } | ||
85 | |||
86 | static void gio_toggle_direction(int gio) | ||
87 | { | ||
88 | if (gio < 0) | ||
89 | return; | ||
90 | |||
91 | if (gio <= 15) | ||
92 | IO_GIO_DIR0 ^= (1 << gio); | ||
93 | else if (gio <= 31) | ||
94 | IO_GIO_DIR1 ^= (1 << (gio-16)); | ||
95 | else if (gio <= 40) | ||
96 | IO_GIO_DIR2 ^= (1 << (gio-32)); | ||
97 | } | ||
98 | |||
99 | static bool gio_is_inverted(int gio) | ||
100 | { | ||
101 | unsigned short reg; | ||
102 | int bit; | ||
103 | |||
104 | if (gio <= 15) | ||
105 | reg = IO_GIO_INV0, bit = (1 << gio); | ||
106 | else if (gio <= 31) | ||
107 | reg = IO_GIO_INV1, bit = (1 << (gio-16)); | ||
108 | else if (gio <= 40) | ||
109 | reg = IO_GIO_INV2, bit = (1 << (gio-32)); | ||
110 | |||
111 | return reg & bit; | ||
112 | } | ||
113 | |||
114 | static bool gio_is_output(int gio) | ||
115 | { | ||
116 | unsigned short reg; | ||
117 | int bit; | ||
118 | |||
119 | if (gio <= 15) | ||
120 | reg = IO_GIO_DIR0, bit = (1 << gio); | ||
121 | else if (gio <= 31) | ||
122 | reg = IO_GIO_DIR1, bit = (1 << (gio-16)); | ||
123 | else if (gio <= 40) | ||
124 | reg = IO_GIO_DIR2, bit = (1 << (gio-32)); | ||
125 | |||
126 | return !(reg & bit); | ||
127 | } | ||
128 | |||
129 | static bool gio_get_state(int gio) | ||
130 | { | ||
131 | unsigned short reg; | ||
132 | int bit; | ||
133 | |||
134 | if (gio <= 15) | ||
135 | reg = IO_GIO_BITSET0, bit = (1 << gio); | ||
136 | else if (gio <= 31) | ||
137 | reg = IO_GIO_BITSET1, bit = (1 << (gio-16)); | ||
138 | else if (gio <= 40) | ||
139 | reg = IO_GIO_BITSET2, bit = (1 << (gio-32)); | ||
140 | |||
141 | return reg & bit; | ||
142 | } | ||
143 | #endif | ||
144 | |||
39 | bool dbg_ports(void) | 145 | bool dbg_ports(void) |
40 | { | 146 | { |
41 | #if defined(MROBE_500) | ||
42 | int line = 0; | 147 | int line = 0; |
43 | int i; | 148 | int i; |
44 | int button; | 149 | int button; |
45 | bool done=false; | 150 | bool done=false; |
46 | 151 | #ifdef DEBUG_GIO | |
152 | int gio = 0; | ||
153 | #endif | ||
154 | (void)i; | ||
155 | |||
47 | lcd_setfont(FONT_SYSFIXED); | 156 | lcd_setfont(FONT_SYSFIXED); |
48 | lcd_clear_display(); | 157 | lcd_clear_display(); |
49 | 158 | ||
50 | while(!done) | 159 | while(!done) |
51 | { | 160 | { |
52 | line = 0; | 161 | line = 0; |
53 | button = button_get(false); | 162 | button = button_get_w_tmo(1); |
54 | button&=~BUTTON_REPEAT; | 163 | |
55 | if (button == BUTTON_POWER) | 164 | if (button == BUTTON_POWER) |
56 | done=true; | 165 | done=true; |
57 | 166 | ||
167 | #if defined(MROBE_500) | ||
58 | lcd_puts(0, line++, "[USB Information]"); | 168 | lcd_puts(0, line++, "[USB Information]"); |
59 | 169 | ||
60 | lcd_putsf(0, line++, "TRN_CTRL: 0x%04x TRN_LNSTAT: 0x%04x", | 170 | lcd_putsf(0, line++, "TRN_CTRL: 0x%04x TRN_LNSTAT: 0x%04x", |
@@ -114,10 +224,58 @@ bool dbg_ports(void) | |||
114 | 224 | ||
115 | lcd_putsf(0, line++, "EMIF_CS4CTRL1:0x%04x EMIF_CS4CTRL2:0x%04x", | 225 | lcd_putsf(0, line++, "EMIF_CS4CTRL1:0x%04x EMIF_CS4CTRL2:0x%04x", |
116 | IO_EMIF_CS4CTRL1, IO_EMIF_CS4CTRL2); | 226 | IO_EMIF_CS4CTRL1, IO_EMIF_CS4CTRL2); |
227 | #elif !defined(DEBUG_GIO) | ||
228 | lcd_putsf(0, line++, "/* GIO0 - GIO15 */"); | ||
229 | lcd_putsf(0, line++, "GIO_DIR0: 0x%04X", IO_GIO_DIR0); | ||
230 | lcd_putsf(0, line++, "GIO_INV0: 0x%04X", IO_GIO_INV0); | ||
231 | lcd_putsf(0, line++, "GIO_BITSET0: 0x%04X", IO_GIO_BITSET0); | ||
232 | |||
233 | lcd_putsf(0, line++, "/* GIO16 - GIO31 */"); | ||
234 | lcd_putsf(0, line++, "GIO_DIR1: 0x%04X", IO_GIO_DIR1); | ||
235 | lcd_putsf(0, line++, "GIO_INV1: 0x%04X", IO_GIO_INV1); | ||
236 | lcd_putsf(0, line++, "GIO_BITSET1: 0x%04X", IO_GIO_BITSET1); | ||
237 | |||
238 | lcd_putsf(0, line++, "/* GIO32 - GIO40 */"); | ||
239 | lcd_putsf(0, line++, "GIO_DIR2: 0x%04X", IO_GIO_DIR2); | ||
240 | lcd_putsf(0, line++, "GIO_INV2: 0x%04X", IO_GIO_INV2); | ||
241 | lcd_putsf(0, line++, "GIO_BITSET2: 0x%04X", IO_GIO_BITSET2); | ||
242 | #endif | ||
243 | |||
244 | #ifdef DEBUG_GIO | ||
245 | if ((button == DEBUG_GIO_NEXT) && (gio < 40)) | ||
246 | gio++; | ||
247 | else if ((button == DEBUG_GIO_PREV) && (gio > 0)) | ||
248 | gio--; | ||
249 | else if (button == DEBUG_GIO_SET) | ||
250 | gio_set(gio); | ||
251 | else if (button == DEBUG_GIO_CLR) | ||
252 | gio_clear(gio); | ||
253 | else if (button == DEBUG_GIO_TOGGL | ||
254 | #if 0 | ||
255 | /* | ||
256 | * this makes current consumption pretty constant | ||
257 | * at cost of screen updates | ||
258 | */ | ||
259 | else | ||
260 | continue; | ||
261 | #endif | ||
262 | |||
263 | line++; | ||
264 | lcd_putsf(0, line++, "< GIO%d >", gio); | ||
265 | lcd_putsf(0, line++, "GIO%d is %d (%s, %s)", | ||
266 | gio, | ||
267 | gio_get_state(gio) ? 1 : 0, | ||
268 | gio_is_inverted(gio) ? "inverted" : "normal", | ||
269 | gio_is_output(gio) ? "output" : "input"); | ||
270 | lcd_putsf(0, line++, "%s - Set bit (using INV)", DEBUG_GIO_SET_TXT); | ||
271 | lcd_putsf(0, line++, "%s - Clear bit (using INV)", | ||
272 | DEBUG_GIO_CLR_TXT); | ||
273 | lcd_putsf(0, line++, "%s - toggle direction",DEBUG_GIO_TOGGLE_TXT); | ||
274 | #endif | ||
117 | 275 | ||
118 | lcd_update(); | 276 | lcd_update(); |
119 | } | 277 | } |
120 | #endif | 278 | |
121 | return false; | 279 | return false; |
122 | } | 280 | } |
123 | 281 | ||
@@ -209,7 +367,7 @@ bool dbg_hw_info(void) | |||
209 | else if (button==BUTTON_RC_REW) | 367 | else if (button==BUTTON_RC_REW) |
210 | address-=0x800; | 368 | address-=0x800; |
211 | #else | 369 | #else |
212 | button = button_get(false); | 370 | button = button_get_w_tmo(1); |
213 | if(button & BUTTON_POWER) | 371 | if(button & BUTTON_POWER) |
214 | done = true; | 372 | done = true; |
215 | #if defined(CREATIVE_ZVx) | 373 | #if defined(CREATIVE_ZVx) |