Debug tools / show registers, memory and system clock data

Dependencies:   mbed CheckRTC

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.

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?

UserRevisionLine numberNew 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)