Debug tools / show registers, memory and system clock data
Target mbed board
LPC1768
LPC1114FN28
ST Nucleo L152RE
ST NUcleo F401RE
ST Nucleo F411RE
Command structure
Top
1 - goto step1 -> no connection all pins
2 - goto step2 -> connects pin_x and pin_y (not impliment yet)
t - Check and set RTC
x - Goto HW monitor
q - Return to main
>1
l - Check LED
b - Check button
s - CPU system info & clock
o - CPU clock output (Bug fix, port_mco1_mco2_set() function. Thanks Topi Makinen on April 25th, 2015)
>x(Hardware level monitor)
m - Entry Memory Mode
m>? -> Aditinal functions can see by ?
r - Entry Register Mode
r>? -> Aditinal functions can see by ?
s - System Clock -> sf, System / CPU information -> sc
q - Quit (back to called routine)
p - Entry Port Mode
p>? -> Aditinal functions can see by ?
Usage
Please modify "mon_hw_config.h" file for your purpose.
Especially LPC114FN28 has small memory, you cannot run your own program together with this program.
You don't need any additional HW. Just connect with PC via terminal software.
CAUTION
Due to several CPU's and short development time, I cannot grantee the quality level and several functions are not available yet.
If you found the bug, please let me know. Thanks in advance.
debug_tools/debug_nucleo_F4x1RE.cpp@4:02980a730cfb, 2015-04-26 (annotated)
- Committer:
- kenjiArai
- Date:
- Sun Apr 26 09:31:58 2015 +0000
- Revision:
- 4:02980a730cfb
- Parent:
- 3:455df34f7285
Set output port PA8 & PC9 high speed mode
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kenjiArai | 2:b96103f9270e | 1 | /* |
kenjiArai | 2:b96103f9270e | 2 | * mbed Application program |
kenjiArai | 2:b96103f9270e | 3 | * |
kenjiArai | 3:455df34f7285 | 4 | * Copyright (c) 2010-2015 Kenji Arai / JH1PJL |
kenjiArai | 2:b96103f9270e | 5 | * http://www.page.sannet.ne.jp/kenjia/index.html |
kenjiArai | 2:b96103f9270e | 6 | * http://mbed.org/users/kenjiArai/ |
kenjiArai | 2:b96103f9270e | 7 | * Created: May 15th, 2010 |
kenjiArai | 2:b96103f9270e | 8 | * Spareted: June 25th, 2014 mon() & mon_hw() |
kenjiArai | 2:b96103f9270e | 9 | * Ported: September 22nd, 2014 from L152RE, LP1114 |
kenjiArai | 2:b96103f9270e | 10 | * changed: October 15th, 2014 mon.cpp to debug_xxx.cpp |
kenjiArai | 3:455df34f7285 | 11 | * Revised: April 25th, 2015 Bug fix ('o' command) pointed out by Topi Makinen |
kenjiArai | 2:b96103f9270e | 12 | * |
kenjiArai | 2:b96103f9270e | 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, |
kenjiArai | 2:b96103f9270e | 14 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
kenjiArai | 2:b96103f9270e | 15 | * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, |
kenjiArai | 2:b96103f9270e | 16 | * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
kenjiArai | 2:b96103f9270e | 17 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
kenjiArai | 2:b96103f9270e | 18 | */ |
kenjiArai | 2:b96103f9270e | 19 | |
kenjiArai | 2:b96103f9270e | 20 | #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_L152RE) |
kenjiArai | 2:b96103f9270e | 21 | |
kenjiArai | 2:b96103f9270e | 22 | // Include --------------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 23 | #include "mbed.h" |
kenjiArai | 2:b96103f9270e | 24 | #include "debug_common.h" |
kenjiArai | 2:b96103f9270e | 25 | #include "CheckRTC.h" |
kenjiArai | 2:b96103f9270e | 26 | |
kenjiArai | 2:b96103f9270e | 27 | // Object ---------------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 28 | DigitalOut myled(LED1); |
kenjiArai | 2:b96103f9270e | 29 | DigitalIn usr_sw(PC_13); |
kenjiArai | 2:b96103f9270e | 30 | |
kenjiArai | 2:b96103f9270e | 31 | // Definition ------------------------------------------------------------------------------------ |
kenjiArai | 2:b96103f9270e | 32 | |
kenjiArai | 2:b96103f9270e | 33 | // RAM ------------------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 34 | |
kenjiArai | 2:b96103f9270e | 35 | // ROM / Constant data --------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 36 | |
kenjiArai | 2:b96103f9270e | 37 | // Function prototypes --------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 38 | extern void cpu_inf( char *ptr ); |
kenjiArai | 3:455df34f7285 | 39 | extern void port_mco1_mco2_set(uint8_t n); |
kenjiArai | 2:b96103f9270e | 40 | extern void port_mco1_mco2_recover(void); |
kenjiArai | 2:b96103f9270e | 41 | |
kenjiArai | 2:b96103f9270e | 42 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 43 | // Control Program |
kenjiArai | 2:b96103f9270e | 44 | //------------------------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 45 | // Help Massage |
kenjiArai | 2:b96103f9270e | 46 | void msg_hlp (void) |
kenjiArai | 2:b96103f9270e | 47 | { |
kenjiArai | 2:b96103f9270e | 48 | PRINTF(mon_msg); |
kenjiArai | 2:b96103f9270e | 49 | put_rn(); |
kenjiArai | 2:b96103f9270e | 50 | PRINTF("1 - goto step1 -> no connection all pins"); |
kenjiArai | 2:b96103f9270e | 51 | put_rn(); |
kenjiArai | 2:b96103f9270e | 52 | PRINTF("2 - goto step2 -> connects pin_x and pin_y"); |
kenjiArai | 2:b96103f9270e | 53 | put_rn(); |
kenjiArai | 2:b96103f9270e | 54 | PRINTF("t - Check and set RTC"); |
kenjiArai | 2:b96103f9270e | 55 | put_rn(); |
kenjiArai | 2:b96103f9270e | 56 | PRINTF("x - Goto HW monitor"); |
kenjiArai | 2:b96103f9270e | 57 | put_rn(); |
kenjiArai | 2:b96103f9270e | 58 | PRINTF("q - Return to main"); |
kenjiArai | 2:b96103f9270e | 59 | put_rn(); |
kenjiArai | 2:b96103f9270e | 60 | } |
kenjiArai | 2:b96103f9270e | 61 | |
kenjiArai | 2:b96103f9270e | 62 | // ---------- Program starts here! --------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 63 | void debug_interface(void) |
kenjiArai | 2:b96103f9270e | 64 | { |
kenjiArai | 2:b96103f9270e | 65 | char c; |
kenjiArai | 2:b96103f9270e | 66 | char *ptr; |
kenjiArai | 2:b96103f9270e | 67 | uint8_t quitflag; |
kenjiArai | 2:b96103f9270e | 68 | |
kenjiArai | 2:b96103f9270e | 69 | BAUD(BAUD_RATE); |
kenjiArai | 2:b96103f9270e | 70 | put_rn(); |
kenjiArai | 2:b96103f9270e | 71 | put_rn(); |
kenjiArai | 2:b96103f9270e | 72 | PRINTF("%s [Help:'?' key]", mon_msg); |
kenjiArai | 2:b96103f9270e | 73 | put_rn(); |
kenjiArai | 2:b96103f9270e | 74 | CheckRTC(); |
kenjiArai | 2:b96103f9270e | 75 | for (;;) { |
kenjiArai | 2:b96103f9270e | 76 | put_r(); |
kenjiArai | 2:b96103f9270e | 77 | PUTC('>'); |
kenjiArai | 2:b96103f9270e | 78 | ptr = linebuf; |
kenjiArai | 2:b96103f9270e | 79 | get_line(ptr, sizeof(linebuf)); |
kenjiArai | 2:b96103f9270e | 80 | switch (*ptr++) { |
kenjiArai | 2:b96103f9270e | 81 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 82 | // Debug Step1 |
kenjiArai | 2:b96103f9270e | 83 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 84 | case '1' : |
kenjiArai | 2:b96103f9270e | 85 | put_r(); |
kenjiArai | 2:b96103f9270e | 86 | PRINTF("Enter Step1: no connection all pins"); |
kenjiArai | 2:b96103f9270e | 87 | put_rn(); |
kenjiArai | 2:b96103f9270e | 88 | quitflag = 0; |
kenjiArai | 2:b96103f9270e | 89 | for (; quitflag != 0xff;) { |
kenjiArai | 2:b96103f9270e | 90 | PRINTF("1>"); |
kenjiArai | 2:b96103f9270e | 91 | ptr = linebuf; |
kenjiArai | 2:b96103f9270e | 92 | get_line(ptr, buf_size); |
kenjiArai | 2:b96103f9270e | 93 | put_r(); |
kenjiArai | 2:b96103f9270e | 94 | switch(*ptr++) { |
kenjiArai | 2:b96103f9270e | 95 | case 'l' : |
kenjiArai | 2:b96103f9270e | 96 | myled = 1; |
kenjiArai | 2:b96103f9270e | 97 | PRINTF("Is LED on? -> enter y/n"); |
kenjiArai | 2:b96103f9270e | 98 | put_rn(); |
kenjiArai | 2:b96103f9270e | 99 | c = GETC(); |
kenjiArai | 2:b96103f9270e | 100 | if (c == 'y') { |
kenjiArai | 2:b96103f9270e | 101 | PRINTF("Okay"); |
kenjiArai | 2:b96103f9270e | 102 | } else { |
kenjiArai | 2:b96103f9270e | 103 | PRINTF("Are you sure? Check again!"); |
kenjiArai | 2:b96103f9270e | 104 | for (c = 0; c < 30; c++) { |
kenjiArai | 2:b96103f9270e | 105 | myled = !myled; |
kenjiArai | 2:b96103f9270e | 106 | wait(0.2); |
kenjiArai | 2:b96103f9270e | 107 | } |
kenjiArai | 2:b96103f9270e | 108 | myled = 1; |
kenjiArai | 2:b96103f9270e | 109 | put_rn(); |
kenjiArai | 2:b96103f9270e | 110 | PRINTF("Is LED on? -> enter y/n"); |
kenjiArai | 2:b96103f9270e | 111 | put_rn(); |
kenjiArai | 2:b96103f9270e | 112 | c = GETC(); |
kenjiArai | 2:b96103f9270e | 113 | if (c == 'y') { |
kenjiArai | 2:b96103f9270e | 114 | PRINTF("Looks okay"); |
kenjiArai | 2:b96103f9270e | 115 | } else { |
kenjiArai | 2:b96103f9270e | 116 | PRINTF("Please check LED line"); |
kenjiArai | 2:b96103f9270e | 117 | } |
kenjiArai | 2:b96103f9270e | 118 | } |
kenjiArai | 2:b96103f9270e | 119 | put_rn(); |
kenjiArai | 2:b96103f9270e | 120 | myled = 0; |
kenjiArai | 2:b96103f9270e | 121 | break; |
kenjiArai | 2:b96103f9270e | 122 | case 'b' : |
kenjiArai | 2:b96103f9270e | 123 | PRINTF("Please push [USER] button -> You can see LED on if you push a button"); |
kenjiArai | 2:b96103f9270e | 124 | put_rn(); |
kenjiArai | 2:b96103f9270e | 125 | PRINTF("Hit any key to exit"); |
kenjiArai | 2:b96103f9270e | 126 | while (true) { |
kenjiArai | 2:b96103f9270e | 127 | if (usr_sw == 0) { |
kenjiArai | 2:b96103f9270e | 128 | myled = 1; |
kenjiArai | 2:b96103f9270e | 129 | } else { |
kenjiArai | 2:b96103f9270e | 130 | myled = 0; |
kenjiArai | 2:b96103f9270e | 131 | } |
kenjiArai | 2:b96103f9270e | 132 | if (READABLE()) { |
kenjiArai | 2:b96103f9270e | 133 | break; |
kenjiArai | 2:b96103f9270e | 134 | } |
kenjiArai | 2:b96103f9270e | 135 | } |
kenjiArai | 2:b96103f9270e | 136 | GETC(); |
kenjiArai | 2:b96103f9270e | 137 | put_rn(); |
kenjiArai | 2:b96103f9270e | 138 | break; |
kenjiArai | 2:b96103f9270e | 139 | case 's' : |
kenjiArai | 2:b96103f9270e | 140 | PRINTF("----- CPU CLOCK Information -----"); |
kenjiArai | 2:b96103f9270e | 141 | put_rn(); |
kenjiArai | 2:b96103f9270e | 142 | c = 'f'; |
kenjiArai | 2:b96103f9270e | 143 | cpu_inf(&c); |
kenjiArai | 2:b96103f9270e | 144 | PRINTF("----- CPU TYPE Information ------"); |
kenjiArai | 2:b96103f9270e | 145 | put_rn(); |
kenjiArai | 2:b96103f9270e | 146 | c = 'c'; |
kenjiArai | 2:b96103f9270e | 147 | cpu_inf(&c); |
kenjiArai | 2:b96103f9270e | 148 | break; |
kenjiArai | 2:b96103f9270e | 149 | #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 3:455df34f7285 | 150 | case 'o' : // Bug fix on April 25, 2015 |
kenjiArai | 2:b96103f9270e | 151 | PRINTF("----- CPU CLOCK output from PA8 & PC9 -----"); |
kenjiArai | 2:b96103f9270e | 152 | put_rn(); |
kenjiArai | 3:455df34f7285 | 153 | PRINTF("Please check that both PA8 & PC9 "); |
kenjiArai | 3:455df34f7285 | 154 | PRINTF("are no connection with any peripheral I/O!!"); |
kenjiArai | 2:b96103f9270e | 155 | put_rn(); |
kenjiArai | 2:b96103f9270e | 156 | PRINTF("Are you okay? [y/n]"); |
kenjiArai | 2:b96103f9270e | 157 | put_rn(); |
kenjiArai | 2:b96103f9270e | 158 | c = GETC(); |
kenjiArai | 2:b96103f9270e | 159 | if (c == 'y') { |
kenjiArai | 3:455df34f7285 | 160 | port_mco1_mco2_set(0); |
kenjiArai | 3:455df34f7285 | 161 | port_mco1_mco2_set(1); |
kenjiArai | 3:455df34f7285 | 162 | PRINTF("Please measure frequency at PA8 & PC9 pins"); |
kenjiArai | 2:b96103f9270e | 163 | put_rn(); |
kenjiArai | 2:b96103f9270e | 164 | PRINTF("PA8: HSE/4"); |
kenjiArai | 2:b96103f9270e | 165 | put_rn(); |
kenjiArai | 2:b96103f9270e | 166 | PRINTF("PC9: SYSCLK/4"); |
kenjiArai | 2:b96103f9270e | 167 | put_rn(); |
kenjiArai | 3:455df34f7285 | 168 | PRINTF("Change requency (Please hit any key)"); |
kenjiArai | 3:455df34f7285 | 169 | put_rn(); |
kenjiArai | 3:455df34f7285 | 170 | c = GETC(); |
kenjiArai | 3:455df34f7285 | 171 | port_mco1_mco2_set(2); |
kenjiArai | 2:b96103f9270e | 172 | PRINTF("PA8: HSE/1"); |
kenjiArai | 2:b96103f9270e | 173 | put_rn(); |
kenjiArai | 2:b96103f9270e | 174 | PRINTF("PC9: SYSCLK/2"); |
kenjiArai | 2:b96103f9270e | 175 | put_rn(); |
kenjiArai | 3:455df34f7285 | 176 | PRINTF("If you would like to finish, hit anykey"); |
kenjiArai | 2:b96103f9270e | 177 | put_rn(); |
kenjiArai | 2:b96103f9270e | 178 | c = GETC(); |
kenjiArai | 2:b96103f9270e | 179 | port_mco1_mco2_recover(); |
kenjiArai | 2:b96103f9270e | 180 | PRINTF("End"); |
kenjiArai | 2:b96103f9270e | 181 | put_rn(); |
kenjiArai | 2:b96103f9270e | 182 | } |
kenjiArai | 2:b96103f9270e | 183 | break; |
kenjiArai | 2:b96103f9270e | 184 | #endif // defined(TARGET_NUCLEO_F401RE) |
kenjiArai | 2:b96103f9270e | 185 | case '?' : |
kenjiArai | 2:b96103f9270e | 186 | PRINTF("l - Check LED"); |
kenjiArai | 2:b96103f9270e | 187 | put_rn(); |
kenjiArai | 2:b96103f9270e | 188 | PRINTF("b - Check button"); |
kenjiArai | 2:b96103f9270e | 189 | put_rn(); |
kenjiArai | 2:b96103f9270e | 190 | PRINTF("s - CPU system info & clock"); |
kenjiArai | 2:b96103f9270e | 191 | put_rn(); |
kenjiArai | 2:b96103f9270e | 192 | #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) |
kenjiArai | 2:b96103f9270e | 193 | PRINTF("o - CPU clock output"); |
kenjiArai | 2:b96103f9270e | 194 | put_rn(); |
kenjiArai | 2:b96103f9270e | 195 | #endif // defined(TARGET_NUCLEO_F401RE) |
kenjiArai | 2:b96103f9270e | 196 | PRINTF("q - Return to all mode"); |
kenjiArai | 2:b96103f9270e | 197 | put_rn(); |
kenjiArai | 2:b96103f9270e | 198 | PRINTF("? - You know this"); |
kenjiArai | 2:b96103f9270e | 199 | put_rn(); |
kenjiArai | 2:b96103f9270e | 200 | break; |
kenjiArai | 2:b96103f9270e | 201 | case 'q' : // quit |
kenjiArai | 2:b96103f9270e | 202 | PRINTF("Back to all mode"); |
kenjiArai | 2:b96103f9270e | 203 | quitflag = 0xff; |
kenjiArai | 2:b96103f9270e | 204 | break; |
kenjiArai | 2:b96103f9270e | 205 | default: |
kenjiArai | 2:b96103f9270e | 206 | PUTC('?'); |
kenjiArai | 2:b96103f9270e | 207 | put_rn(); |
kenjiArai | 2:b96103f9270e | 208 | } |
kenjiArai | 2:b96103f9270e | 209 | } |
kenjiArai | 2:b96103f9270e | 210 | put_rn(); |
kenjiArai | 2:b96103f9270e | 211 | break; |
kenjiArai | 2:b96103f9270e | 212 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 213 | // check and set RTC |
kenjiArai | 2:b96103f9270e | 214 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 215 | case 't' : |
kenjiArai | 2:b96103f9270e | 216 | put_r(); |
kenjiArai | 2:b96103f9270e | 217 | chk_and_set_time(ptr); |
kenjiArai | 2:b96103f9270e | 218 | break; |
kenjiArai | 2:b96103f9270e | 219 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 220 | // help |
kenjiArai | 2:b96103f9270e | 221 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 222 | case '?' : |
kenjiArai | 2:b96103f9270e | 223 | put_r(); |
kenjiArai | 2:b96103f9270e | 224 | msg_hlp(); |
kenjiArai | 2:b96103f9270e | 225 | break; |
kenjiArai | 2:b96103f9270e | 226 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 227 | // Go to special command |
kenjiArai | 2:b96103f9270e | 228 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 229 | case 'x' : |
kenjiArai | 2:b96103f9270e | 230 | mon_hw(); |
kenjiArai | 2:b96103f9270e | 231 | PRINTF("->Came back monitor\r\n"); |
kenjiArai | 2:b96103f9270e | 232 | break; |
kenjiArai | 2:b96103f9270e | 233 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 234 | // Go back to main() |
kenjiArai | 2:b96103f9270e | 235 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 236 | case 'q' : // Quit |
kenjiArai | 2:b96103f9270e | 237 | PRINTF("\rReturn to main\r\n"); |
kenjiArai | 2:b96103f9270e | 238 | //PRINTF("cannot control anymore from here\r\n"); |
kenjiArai | 2:b96103f9270e | 239 | return; |
kenjiArai | 2:b96103f9270e | 240 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 241 | // no support |
kenjiArai | 2:b96103f9270e | 242 | //--------------------------------------------------------------------------------- |
kenjiArai | 2:b96103f9270e | 243 | default: |
kenjiArai | 2:b96103f9270e | 244 | put_r(); |
kenjiArai | 2:b96103f9270e | 245 | PUTC('?'); |
kenjiArai | 2:b96103f9270e | 246 | put_rn(); |
kenjiArai | 2:b96103f9270e | 247 | break; |
kenjiArai | 2:b96103f9270e | 248 | } |
kenjiArai | 2:b96103f9270e | 249 | } |
kenjiArai | 2:b96103f9270e | 250 | } |
kenjiArai | 2:b96103f9270e | 251 | |
kenjiArai | 2:b96103f9270e | 252 | #endif // defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_L152RE) |