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:
2:b96103f9270e
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 (part of debuf_xxx.cpp)
kenjiArai 2:b96103f9270e 3 *
kenjiArai 2:b96103f9270e 4 * Copyright (c) 2010-2014 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: October 16th, 2014
kenjiArai 2:b96103f9270e 8 * Revised: Nobember 2nd, 2014
kenjiArai 2:b96103f9270e 9 *
kenjiArai 2:b96103f9270e 10 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 2:b96103f9270e 11 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 2:b96103f9270e 12 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 2:b96103f9270e 13 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 2:b96103f9270e 14 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 2:b96103f9270e 15 */
kenjiArai 2:b96103f9270e 16
kenjiArai 2:b96103f9270e 17 // Definition ------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 18 #define BAUD(x) pcm.baud(x)
kenjiArai 2:b96103f9270e 19 #define GETC(x) pcm.getc(x)
kenjiArai 2:b96103f9270e 20 #define PUTC(x) pcm.putc(x)
kenjiArai 2:b96103f9270e 21 #define PRINTF(...) pcm.printf(__VA_ARGS__)
kenjiArai 2:b96103f9270e 22 #define READABLE(x) pcm.readable(x)
kenjiArai 2:b96103f9270e 23
kenjiArai 2:b96103f9270e 24 #define BAUD_RATE 9600
kenjiArai 2:b96103f9270e 25
kenjiArai 2:b96103f9270e 26 // Object ----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 27 Serial pcm(USBTX, USBRX);
kenjiArai 2:b96103f9270e 28
kenjiArai 2:b96103f9270e 29 // RAM -------------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 30 char linebuf[64];
kenjiArai 2:b96103f9270e 31 int buf_size = sizeof(linebuf);
kenjiArai 2:b96103f9270e 32
kenjiArai 2:b96103f9270e 33 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 34 char *const mon_msg =
kenjiArai 2:b96103f9270e 35 "Debug Interface for mbed system, created on UTC: "__DATE__"("__TIME__")";
kenjiArai 2:b96103f9270e 36
kenjiArai 2:b96103f9270e 37 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 38 extern void mon_hw(void);
kenjiArai 2:b96103f9270e 39 extern void get_freq(int pr);
kenjiArai 2:b96103f9270e 40
kenjiArai 2:b96103f9270e 41 //-------------------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 42 // Control Program
kenjiArai 2:b96103f9270e 43 //-------------------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 44 // Put \r\n
kenjiArai 2:b96103f9270e 45 void put_rn ( void )
kenjiArai 2:b96103f9270e 46 {
kenjiArai 2:b96103f9270e 47 PUTC('\r');
kenjiArai 2:b96103f9270e 48 PUTC('\n');
kenjiArai 2:b96103f9270e 49 }
kenjiArai 2:b96103f9270e 50
kenjiArai 2:b96103f9270e 51 // Put \r
kenjiArai 2:b96103f9270e 52 void put_r ( void )
kenjiArai 2:b96103f9270e 53 {
kenjiArai 2:b96103f9270e 54 PUTC('\r');
kenjiArai 2:b96103f9270e 55 }
kenjiArai 2:b96103f9270e 56
kenjiArai 2:b96103f9270e 57 // Put ", "
kenjiArai 2:b96103f9270e 58 void put_lin ( void )
kenjiArai 2:b96103f9270e 59 {
kenjiArai 2:b96103f9270e 60 PRINTF(", ");
kenjiArai 2:b96103f9270e 61 }
kenjiArai 2:b96103f9270e 62
kenjiArai 2:b96103f9270e 63 // Put space n
kenjiArai 2:b96103f9270e 64 void put_spc( uint8_t n)
kenjiArai 2:b96103f9270e 65 {
kenjiArai 2:b96103f9270e 66 for(; n > 0; n--) {
kenjiArai 2:b96103f9270e 67 PUTC(' ');
kenjiArai 2:b96103f9270e 68 }
kenjiArai 2:b96103f9270e 69 }
kenjiArai 2:b96103f9270e 70
kenjiArai 2:b96103f9270e 71 // Change string -> integer
kenjiArai 2:b96103f9270e 72 //int xatoi (char **str, unsigned long *res){
kenjiArai 2:b96103f9270e 73 int xatoi (char **str, int32_t *res)
kenjiArai 2:b96103f9270e 74 {
kenjiArai 2:b96103f9270e 75 unsigned long val;
kenjiArai 2:b96103f9270e 76 unsigned char c, radix, s = 0;
kenjiArai 2:b96103f9270e 77
kenjiArai 2:b96103f9270e 78 while ((c = **str) == ' ') (*str)++;
kenjiArai 2:b96103f9270e 79 if (c == '-') {
kenjiArai 2:b96103f9270e 80 s = 1;
kenjiArai 2:b96103f9270e 81 c = *(++(*str));
kenjiArai 2:b96103f9270e 82 }
kenjiArai 2:b96103f9270e 83 if (c == '0') {
kenjiArai 2:b96103f9270e 84 c = *(++(*str));
kenjiArai 2:b96103f9270e 85 if (c <= ' ') {
kenjiArai 2:b96103f9270e 86 *res = 0;
kenjiArai 2:b96103f9270e 87 return 1;
kenjiArai 2:b96103f9270e 88 }
kenjiArai 2:b96103f9270e 89 if (c == 'x') {
kenjiArai 2:b96103f9270e 90 radix = 16;
kenjiArai 2:b96103f9270e 91 c = *(++(*str));
kenjiArai 2:b96103f9270e 92 } else {
kenjiArai 2:b96103f9270e 93 if (c == 'b') {
kenjiArai 2:b96103f9270e 94 radix = 2;
kenjiArai 2:b96103f9270e 95 c = *(++(*str));
kenjiArai 2:b96103f9270e 96 } else {
kenjiArai 2:b96103f9270e 97 if ((c >= '0')&&(c <= '9')) {
kenjiArai 2:b96103f9270e 98 radix = 8;
kenjiArai 2:b96103f9270e 99 } else {
kenjiArai 2:b96103f9270e 100 return 0;
kenjiArai 2:b96103f9270e 101 }
kenjiArai 2:b96103f9270e 102 }
kenjiArai 2:b96103f9270e 103 }
kenjiArai 2:b96103f9270e 104 } else {
kenjiArai 2:b96103f9270e 105 if ((c < '1')||(c > '9')) {
kenjiArai 2:b96103f9270e 106 return 0;
kenjiArai 2:b96103f9270e 107 }
kenjiArai 2:b96103f9270e 108 radix = 10;
kenjiArai 2:b96103f9270e 109 }
kenjiArai 2:b96103f9270e 110 val = 0;
kenjiArai 2:b96103f9270e 111 while (c > ' ') {
kenjiArai 2:b96103f9270e 112 if (c >= 'a') c -= 0x20;
kenjiArai 2:b96103f9270e 113 c -= '0';
kenjiArai 2:b96103f9270e 114 if (c >= 17) {
kenjiArai 2:b96103f9270e 115 c -= 7;
kenjiArai 2:b96103f9270e 116 if (c <= 9) return 0;
kenjiArai 2:b96103f9270e 117 }
kenjiArai 2:b96103f9270e 118 if (c >= radix) return 0;
kenjiArai 2:b96103f9270e 119 val = val * radix + c;
kenjiArai 2:b96103f9270e 120 c = *(++(*str));
kenjiArai 2:b96103f9270e 121 }
kenjiArai 2:b96103f9270e 122 if (s) val = -val;
kenjiArai 2:b96103f9270e 123 *res = val;
kenjiArai 2:b96103f9270e 124 return 1;
kenjiArai 2:b96103f9270e 125 }
kenjiArai 2:b96103f9270e 126
kenjiArai 2:b96103f9270e 127 // Get key input data
kenjiArai 2:b96103f9270e 128 void get_line (char *buff, int len)
kenjiArai 2:b96103f9270e 129 {
kenjiArai 2:b96103f9270e 130 char c;
kenjiArai 2:b96103f9270e 131 int idx = 0;
kenjiArai 2:b96103f9270e 132
kenjiArai 2:b96103f9270e 133 for (;;) {
kenjiArai 2:b96103f9270e 134 c = GETC();
kenjiArai 2:b96103f9270e 135 // Added by Kenji Arai / JH1PJL May 9th, 2010
kenjiArai 2:b96103f9270e 136 if (c == '\r') {
kenjiArai 2:b96103f9270e 137 buff[idx++] = c;
kenjiArai 2:b96103f9270e 138 break;
kenjiArai 2:b96103f9270e 139 }
kenjiArai 2:b96103f9270e 140 if ((c == '\b') && idx) {
kenjiArai 2:b96103f9270e 141 idx--;
kenjiArai 2:b96103f9270e 142 PUTC(c);
kenjiArai 2:b96103f9270e 143 PUTC(' ');
kenjiArai 2:b96103f9270e 144 PUTC(c);
kenjiArai 2:b96103f9270e 145 }
kenjiArai 2:b96103f9270e 146 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 2:b96103f9270e 147 buff[idx++] = c;
kenjiArai 2:b96103f9270e 148 PUTC(c);
kenjiArai 2:b96103f9270e 149 }
kenjiArai 2:b96103f9270e 150 }
kenjiArai 2:b96103f9270e 151 buff[idx] = 0;
kenjiArai 2:b96103f9270e 152 PUTC('\n');
kenjiArai 2:b96103f9270e 153 }
kenjiArai 2:b96103f9270e 154
kenjiArai 2:b96103f9270e 155 // RTC related subroutines
kenjiArai 2:b96103f9270e 156 void chk_and_set_time(char *ptr)
kenjiArai 2:b96103f9270e 157 {
kenjiArai 2:b96103f9270e 158 //unsigned long p1;
kenjiArai 2:b96103f9270e 159 int32_t p1;
kenjiArai 2:b96103f9270e 160 struct tm t;
kenjiArai 2:b96103f9270e 161 time_t seconds;
kenjiArai 2:b96103f9270e 162 char buf[40];
kenjiArai 2:b96103f9270e 163
kenjiArai 2:b96103f9270e 164 if (xatoi(&ptr, &p1)) {
kenjiArai 2:b96103f9270e 165 t.tm_year = (uint8_t)p1 + 100;
kenjiArai 2:b96103f9270e 166 PRINTF("Year:%d ",p1);
kenjiArai 2:b96103f9270e 167 xatoi( &ptr, &p1 );
kenjiArai 2:b96103f9270e 168 t.tm_mon = (uint8_t)p1 - 1;
kenjiArai 2:b96103f9270e 169 PRINTF("Month:%d ",p1);
kenjiArai 2:b96103f9270e 170 xatoi( &ptr, &p1 );
kenjiArai 2:b96103f9270e 171 t.tm_mday = (uint8_t)p1;
kenjiArai 2:b96103f9270e 172 PRINTF("Day:%d ",p1);
kenjiArai 2:b96103f9270e 173 xatoi( &ptr, &p1 );
kenjiArai 2:b96103f9270e 174 t.tm_hour = (uint8_t)p1;
kenjiArai 2:b96103f9270e 175 PRINTF("Hour:%d ",p1);
kenjiArai 2:b96103f9270e 176 xatoi( &ptr, &p1 );
kenjiArai 2:b96103f9270e 177 t.tm_min = (uint8_t)p1;
kenjiArai 2:b96103f9270e 178 PRINTF("Min:%d ",p1);
kenjiArai 2:b96103f9270e 179 xatoi( &ptr, &p1 );
kenjiArai 2:b96103f9270e 180 t.tm_sec = (uint8_t)p1;
kenjiArai 2:b96103f9270e 181 PRINTF("Sec: %d \r\n",p1);
kenjiArai 2:b96103f9270e 182 seconds = mktime(&t);
kenjiArai 2:b96103f9270e 183 set_time(seconds);
kenjiArai 2:b96103f9270e 184 }
kenjiArai 2:b96103f9270e 185 seconds = time(NULL);
kenjiArai 2:b96103f9270e 186 strftime(buf, 40, "%B %d,'%y, %H:%M:%S", localtime(&seconds));
kenjiArai 2:b96103f9270e 187 PRINTF("Date: %s\r\n", buf);
kenjiArai 2:b96103f9270e 188 }