This is a monitor program which can see some mbed running conditions such a memory contents, time (if RTC set up), CPU information and others.

Dependencies:   mbed

Committer:
kenjiArai
Date:
Sat May 15 13:08:59 2010 +0000
Revision:
0:4aaeaab8334a

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:4aaeaab8334a 1 //-------------------------------------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 2 // Monitor program Ver.1
kenjiArai 0:4aaeaab8334a 3 // (c)2010 Kenji Arai / JH1PJL
kenjiArai 0:4aaeaab8334a 4 // http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:4aaeaab8334a 5 // http://mbed.org/users/kenjiArai/
kenjiArai 0:4aaeaab8334a 6 // May 9th,2010 Started
kenjiArai 0:4aaeaab8334a 7 // May 15th,2010
kenjiArai 0:4aaeaab8334a 8 //--------------------------------------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 9 // Reference
kenjiArai 0:4aaeaab8334a 10 // http://www.nxp.com/#/pip/pip=[pip=LPC1769_68_67_66_65_64_4]|pp=[t=pip,i=LPC1769_68_67_66_65_64_4]
kenjiArai 0:4aaeaab8334a 11 //--------------------------------------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 12 // Function
kenjiArai 0:4aaeaab8334a 13 // Show Memory contents, Digital port, Analog input port, CPU clock, RTC/Time and others in the mbed board
kenjiArai 0:4aaeaab8334a 14 // Connection
kenjiArai 0:4aaeaab8334a 15 // Analog input PIN 15,16,17
kenjiArai 0:4aaeaab8334a 16 // Digital input PIN 24,25,26
kenjiArai 0:4aaeaab8334a 17 // LCD PIN 5,6,7,21,22,23
kenjiArai 0:4aaeaab8334a 18 // RTC PIN 3 needs to connect 3V Battery
kenjiArai 0:4aaeaab8334a 19 // -> Please refer my program " RTC_w_COM" for time adjustment
kenjiArai 0:4aaeaab8334a 20 // at " http://mbed.org/users/kenjiArai/programs/RTC_w_COM/5yi9a/ "
kenjiArai 0:4aaeaab8334a 21 //---------------------------------------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 22
kenjiArai 0:4aaeaab8334a 23 #include "mbed.h"
kenjiArai 0:4aaeaab8334a 24
kenjiArai 0:4aaeaab8334a 25 // Define clocks
kenjiArai 0:4aaeaab8334a 26 #define XTAL (12000000UL) /* Oscillator frequency */
kenjiArai 0:4aaeaab8334a 27 #define OSC_CLK ( XTAL) /* Main oscillator frequency */
kenjiArai 0:4aaeaab8334a 28 #define RTC_CLK ( 32000UL) /* RTC oscillator frequency */
kenjiArai 0:4aaeaab8334a 29 #define IRC_OSC ( 4000000UL) /* Internal RC oscillator frequency */
kenjiArai 0:4aaeaab8334a 30 // Range check status
kenjiArai 0:4aaeaab8334a 31 #define ERR_NOTHING 0
kenjiArai 0:4aaeaab8334a 32 #define ERR_MODIFY_SIZ 1
kenjiArai 0:4aaeaab8334a 33 #define ERR_OUT_OF_RANGE 2
kenjiArai 0:4aaeaab8334a 34
kenjiArai 0:4aaeaab8334a 35 typedef struct{
kenjiArai 0:4aaeaab8334a 36 unsigned long mstr;
kenjiArai 0:4aaeaab8334a 37 unsigned long msiz;
kenjiArai 0:4aaeaab8334a 38 unsigned long mtmp;
kenjiArai 0:4aaeaab8334a 39 unsigned long mold;
kenjiArai 0:4aaeaab8334a 40 unsigned char mflg;
kenjiArai 0:4aaeaab8334a 41 } MEMO;
kenjiArai 0:4aaeaab8334a 42
kenjiArai 0:4aaeaab8334a 43 Serial pc(USBTX, USBRX);
kenjiArai 0:4aaeaab8334a 44 AnalogIn ana0(p15);
kenjiArai 0:4aaeaab8334a 45 AnalogIn ana1(p16);
kenjiArai 0:4aaeaab8334a 46 AnalogIn ana2(p17);
kenjiArai 0:4aaeaab8334a 47 DigitalIn sw0(p24);
kenjiArai 0:4aaeaab8334a 48 DigitalIn sw1(p25);
kenjiArai 0:4aaeaab8334a 49 DigitalIn sw2(p26);
kenjiArai 0:4aaeaab8334a 50
kenjiArai 0:4aaeaab8334a 51 char linebuf[256];
kenjiArai 0:4aaeaab8334a 52
kenjiArai 0:4aaeaab8334a 53 // Memory management
kenjiArai 0:4aaeaab8334a 54 static MEMO mem;
kenjiArai 0:4aaeaab8334a 55 unsigned long SystemFrequency;
kenjiArai 0:4aaeaab8334a 56
kenjiArai 0:4aaeaab8334a 57 // Memory range data
kenjiArai 0:4aaeaab8334a 58 const uint32_t mem_range[][2] = { // Memory access range
kenjiArai 0:4aaeaab8334a 59 { 0x00000000, 0x0007ffff }, // On-chip non-volatile memory //512KB Flash memory
kenjiArai 0:4aaeaab8334a 60 { 0x10000000, 0x10007fff }, // On-chip SRAM //32KB local RAM
kenjiArai 0:4aaeaab8334a 61 { 0x1fff0000, 0x1fff1fff }, // Boot ROM //8KB Boot ROM
kenjiArai 0:4aaeaab8334a 62 { 0x2007c000, 0x2007ffff }, // On-chip SRAM //16KB AHB SRAM
kenjiArai 0:4aaeaab8334a 63 { 0x20080000, 0x20083fff } // On-chip SRAM //16KB AHB SRAM
kenjiArai 0:4aaeaab8334a 64 };
kenjiArai 0:4aaeaab8334a 65
kenjiArai 0:4aaeaab8334a 66 // Put \r\n
kenjiArai 0:4aaeaab8334a 67 void put_cr ( void ){
kenjiArai 0:4aaeaab8334a 68 pc.putc('\r');
kenjiArai 0:4aaeaab8334a 69 pc.putc('\n');
kenjiArai 0:4aaeaab8334a 70 }
kenjiArai 0:4aaeaab8334a 71
kenjiArai 0:4aaeaab8334a 72 // Put \r
kenjiArai 0:4aaeaab8334a 73 void put_r ( void ){
kenjiArai 0:4aaeaab8334a 74 pc.putc('\r');
kenjiArai 0:4aaeaab8334a 75 }
kenjiArai 0:4aaeaab8334a 76
kenjiArai 0:4aaeaab8334a 77 // Help Massage
kenjiArai 0:4aaeaab8334a 78 void msg_hlp ( void ){
kenjiArai 0:4aaeaab8334a 79 pc.printf("Monitor for mbed LPC1768 Ver. on "__DATE__" (" __TIME__ ")");
kenjiArai 0:4aaeaab8334a 80 put_cr();
kenjiArai 0:4aaeaab8334a 81 pc.printf("a - Show ADC data ");
kenjiArai 0:4aaeaab8334a 82 put_cr();
kenjiArai 0:4aaeaab8334a 83 pc.printf("m - Entry Memory Mode");
kenjiArai 0:4aaeaab8334a 84 put_cr();
kenjiArai 0:4aaeaab8334a 85 pc.printf("m>? -> After entry the Memory Mode, adiitinal functions can see by ?");
kenjiArai 0:4aaeaab8334a 86 put_cr();
kenjiArai 0:4aaeaab8334a 87 pc.printf("p - Show Port status ");
kenjiArai 0:4aaeaab8334a 88 put_cr();
kenjiArai 0:4aaeaab8334a 89 pc.printf("sf - System Clock");
kenjiArai 0:4aaeaab8334a 90 put_cr();
kenjiArai 0:4aaeaab8334a 91 pc.printf("sc - System / CPU information");
kenjiArai 0:4aaeaab8334a 92 put_cr();
kenjiArai 0:4aaeaab8334a 93 pc.printf("t [<year> <mon> <mday> <hour> <min> <sec>] ");
kenjiArai 0:4aaeaab8334a 94 put_cr();
kenjiArai 0:4aaeaab8334a 95 pc.printf("/ [a],[p],[t] commands every 1 sec Exit =hit any key (not ENTER key) ");
kenjiArai 0:4aaeaab8334a 96 put_cr();
kenjiArai 0:4aaeaab8334a 97 pc.printf("q - Quit (back to called routine)");
kenjiArai 0:4aaeaab8334a 98 put_cr();
kenjiArai 0:4aaeaab8334a 99 }
kenjiArai 0:4aaeaab8334a 100
kenjiArai 0:4aaeaab8334a 101 // Check Switch port status
kenjiArai 0:4aaeaab8334a 102 void check_port ( void ){
kenjiArai 0:4aaeaab8334a 103 put_r();
kenjiArai 0:4aaeaab8334a 104 pc.printf("Input Port Status");
kenjiArai 0:4aaeaab8334a 105 put_cr();
kenjiArai 0:4aaeaab8334a 106 pc.printf("mbed P26 (LPC1768 p2.0) = ");
kenjiArai 0:4aaeaab8334a 107 if ( sw2.read() ){
kenjiArai 0:4aaeaab8334a 108 pc.printf("ON ");
kenjiArai 0:4aaeaab8334a 109 } else {
kenjiArai 0:4aaeaab8334a 110 pc.printf("OFF ");
kenjiArai 0:4aaeaab8334a 111 }
kenjiArai 0:4aaeaab8334a 112 put_cr();
kenjiArai 0:4aaeaab8334a 113 pc.printf("mbed P25 (LPC1768 p2.1) = ");
kenjiArai 0:4aaeaab8334a 114 if ( sw1.read() ){
kenjiArai 0:4aaeaab8334a 115 pc.printf("ON ");
kenjiArai 0:4aaeaab8334a 116 } else {
kenjiArai 0:4aaeaab8334a 117 pc.printf("OFF ");
kenjiArai 0:4aaeaab8334a 118 }
kenjiArai 0:4aaeaab8334a 119 put_cr();
kenjiArai 0:4aaeaab8334a 120 pc.printf("mbed P24 (LPC1768 p2.2) = ");
kenjiArai 0:4aaeaab8334a 121 if ( sw0.read() ){
kenjiArai 0:4aaeaab8334a 122 pc.printf("ON ");
kenjiArai 0:4aaeaab8334a 123 } else {
kenjiArai 0:4aaeaab8334a 124 pc.printf("OFF ");
kenjiArai 0:4aaeaab8334a 125 }
kenjiArai 0:4aaeaab8334a 126 put_cr();
kenjiArai 0:4aaeaab8334a 127 }
kenjiArai 0:4aaeaab8334a 128
kenjiArai 0:4aaeaab8334a 129 void cpu_inf ( void ){
kenjiArai 0:4aaeaab8334a 130 unsigned long m1, m2;
kenjiArai 0:4aaeaab8334a 131
kenjiArai 0:4aaeaab8334a 132 m1 = SCB->CPUID;
kenjiArai 0:4aaeaab8334a 133 m2 = ( m1 >> 24 );
kenjiArai 0:4aaeaab8334a 134 if ( m2 == 0x41 ){
kenjiArai 0:4aaeaab8334a 135 put_r();
kenjiArai 0:4aaeaab8334a 136 pc.printf("CPU = ARM ");
kenjiArai 0:4aaeaab8334a 137 } else {
kenjiArai 0:4aaeaab8334a 138 put_r();
kenjiArai 0:4aaeaab8334a 139 pc.printf("CPU = NOT ARM ");
kenjiArai 0:4aaeaab8334a 140 }
kenjiArai 0:4aaeaab8334a 141 m2 = ( m1 >> 4 ) & 0xfff;
kenjiArai 0:4aaeaab8334a 142 if ( m2 == 0xc23 ){
kenjiArai 0:4aaeaab8334a 143 pc.printf("Cortex-M3");
kenjiArai 0:4aaeaab8334a 144 put_cr();
kenjiArai 0:4aaeaab8334a 145 } else {
kenjiArai 0:4aaeaab8334a 146 pc.printf("NOT Cortex-M3");
kenjiArai 0:4aaeaab8334a 147 put_cr();
kenjiArai 0:4aaeaab8334a 148 }
kenjiArai 0:4aaeaab8334a 149 m2 = ( m1 >> 20 ) & 0x0f;
kenjiArai 0:4aaeaab8334a 150 pc.printf("Variant:%x", m2);
kenjiArai 0:4aaeaab8334a 151 put_cr();
kenjiArai 0:4aaeaab8334a 152 m2 = m1 & 0x7;
kenjiArai 0:4aaeaab8334a 153 pc.printf("Revision:%x", m2);
kenjiArai 0:4aaeaab8334a 154 put_cr();
kenjiArai 0:4aaeaab8334a 155 }
kenjiArai 0:4aaeaab8334a 156
kenjiArai 0:4aaeaab8334a 157 // Calculate CPU System Clock Frequency
kenjiArai 0:4aaeaab8334a 158 void get_freq ( int pr ){
kenjiArai 0:4aaeaab8334a 159 if(pr){
kenjiArai 0:4aaeaab8334a 160 put_r();
kenjiArai 0:4aaeaab8334a 161 pc.printf("System Clock = %dHz",SystemFrequency );
kenjiArai 0:4aaeaab8334a 162 put_cr();
kenjiArai 0:4aaeaab8334a 163 }
kenjiArai 0:4aaeaab8334a 164 if (((LPC_SC->PLL0STAT >> 24) & 3) == 3) {/* If PLL0 enabled and connected */
kenjiArai 0:4aaeaab8334a 165 if(pr){
kenjiArai 0:4aaeaab8334a 166 pc.printf("PLL0 enabled");
kenjiArai 0:4aaeaab8334a 167 put_cr();
kenjiArai 0:4aaeaab8334a 168 }
kenjiArai 0:4aaeaab8334a 169 switch (LPC_SC->CLKSRCSEL & 0x03) {
kenjiArai 0:4aaeaab8334a 170 case 0: /* Internal RC oscillator => PLL0 */
kenjiArai 0:4aaeaab8334a 171 case 3: /* Reserved, default to Internal RC */
kenjiArai 0:4aaeaab8334a 172 if(pr){
kenjiArai 0:4aaeaab8334a 173 pc.printf("Internal RC Oscillator");
kenjiArai 0:4aaeaab8334a 174 put_cr();
kenjiArai 0:4aaeaab8334a 175 }
kenjiArai 0:4aaeaab8334a 176 SystemFrequency = (IRC_OSC *
kenjiArai 0:4aaeaab8334a 177 (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
kenjiArai 0:4aaeaab8334a 178 (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1)) /
kenjiArai 0:4aaeaab8334a 179 ((LPC_SC->CCLKCFG & 0xFF)+ 1));
kenjiArai 0:4aaeaab8334a 180 break;
kenjiArai 0:4aaeaab8334a 181 case 1: /* Main oscillator => PLL0 */
kenjiArai 0:4aaeaab8334a 182 if(pr){
kenjiArai 0:4aaeaab8334a 183 pc.printf("Xtal Osc Clock = %dHz",XTAL );
kenjiArai 0:4aaeaab8334a 184 put_cr();
kenjiArai 0:4aaeaab8334a 185 }
kenjiArai 0:4aaeaab8334a 186 SystemFrequency = (OSC_CLK *
kenjiArai 0:4aaeaab8334a 187 (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
kenjiArai 0:4aaeaab8334a 188 (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1)) /
kenjiArai 0:4aaeaab8334a 189 ((LPC_SC->CCLKCFG & 0xFF)+ 1));
kenjiArai 0:4aaeaab8334a 190 break;
kenjiArai 0:4aaeaab8334a 191 case 2: /* RTC oscillator => PLL0 */
kenjiArai 0:4aaeaab8334a 192 if(pr){
kenjiArai 0:4aaeaab8334a 193 pc.printf("RTC Xtal Oscillator f = %dHz", RTC_CLK );
kenjiArai 0:4aaeaab8334a 194 put_cr();
kenjiArai 0:4aaeaab8334a 195 }
kenjiArai 0:4aaeaab8334a 196 SystemFrequency = (RTC_CLK *
kenjiArai 0:4aaeaab8334a 197 (((2 * ((LPC_SC->PLL0STAT & 0x7FFF) + 1))) /
kenjiArai 0:4aaeaab8334a 198 (((LPC_SC->PLL0STAT >> 16) & 0xFF) + 1)) /
kenjiArai 0:4aaeaab8334a 199 ((LPC_SC->CCLKCFG & 0xFF)+ 1));
kenjiArai 0:4aaeaab8334a 200 break;
kenjiArai 0:4aaeaab8334a 201 }
kenjiArai 0:4aaeaab8334a 202 } else {
kenjiArai 0:4aaeaab8334a 203 if(pr){
kenjiArai 0:4aaeaab8334a 204 pc.printf("PLL0 disabled");
kenjiArai 0:4aaeaab8334a 205 }
kenjiArai 0:4aaeaab8334a 206 switch (LPC_SC->CLKSRCSEL & 0x03) {
kenjiArai 0:4aaeaab8334a 207 case 0: /* Internal RC oscillator => PLL0 */
kenjiArai 0:4aaeaab8334a 208 case 3: /* Reserved, default to Internal RC */
kenjiArai 0:4aaeaab8334a 209 if(pr){
kenjiArai 0:4aaeaab8334a 210 pc.printf("Internal RC Oscillator");
kenjiArai 0:4aaeaab8334a 211 put_cr();
kenjiArai 0:4aaeaab8334a 212 }
kenjiArai 0:4aaeaab8334a 213 SystemFrequency = IRC_OSC / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
kenjiArai 0:4aaeaab8334a 214 break;
kenjiArai 0:4aaeaab8334a 215 case 1: /* Main oscillator => PLL0 */
kenjiArai 0:4aaeaab8334a 216 if(pr){
kenjiArai 0:4aaeaab8334a 217 pc.printf("Xtal Osc Clock = %dHz",XTAL );
kenjiArai 0:4aaeaab8334a 218 put_cr();
kenjiArai 0:4aaeaab8334a 219 }
kenjiArai 0:4aaeaab8334a 220 SystemFrequency = OSC_CLK / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
kenjiArai 0:4aaeaab8334a 221 break;
kenjiArai 0:4aaeaab8334a 222 case 2: /* RTC oscillator => PLL0 */
kenjiArai 0:4aaeaab8334a 223 if(pr){
kenjiArai 0:4aaeaab8334a 224 pc.printf("RTC Xtal Oscillator f = %dHz", RTC_CLK );
kenjiArai 0:4aaeaab8334a 225 put_cr();
kenjiArai 0:4aaeaab8334a 226 }
kenjiArai 0:4aaeaab8334a 227 SystemFrequency = RTC_CLK / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
kenjiArai 0:4aaeaab8334a 228 break;
kenjiArai 0:4aaeaab8334a 229 }
kenjiArai 0:4aaeaab8334a 230 }
kenjiArai 0:4aaeaab8334a 231 }
kenjiArai 0:4aaeaab8334a 232
kenjiArai 0:4aaeaab8334a 233 // Range check for Memory dump
kenjiArai 0:4aaeaab8334a 234 static void check_range( MEMO * mem ){
kenjiArai 0:4aaeaab8334a 235 uint8_t i;
kenjiArai 0:4aaeaab8334a 236 uint32_t m;
kenjiArai 0:4aaeaab8334a 237
kenjiArai 0:4aaeaab8334a 238 mem->mflg = ERR_NOTHING;
kenjiArai 0:4aaeaab8334a 239 for ( i = 0 ; i < 5 ; i++ ){
kenjiArai 0:4aaeaab8334a 240 if ( mem->mstr >= mem_range[i][0]){
kenjiArai 0:4aaeaab8334a 241 if ( mem->mstr < mem_range[i][1] ){
kenjiArai 0:4aaeaab8334a 242 m = mem->mstr + mem->msiz;
kenjiArai 0:4aaeaab8334a 243 if ( m < mem_range[i][1]){
kenjiArai 0:4aaeaab8334a 244 return; // no modification
kenjiArai 0:4aaeaab8334a 245 } else {
kenjiArai 0:4aaeaab8334a 246 m = mem_range[i][1];
kenjiArai 0:4aaeaab8334a 247 mem->msiz = m - mem->mstr + 1;
kenjiArai 0:4aaeaab8334a 248 mem->mflg = ERR_MODIFY_SIZ;
kenjiArai 0:4aaeaab8334a 249 return; // modified size
kenjiArai 0:4aaeaab8334a 250 }
kenjiArai 0:4aaeaab8334a 251 }
kenjiArai 0:4aaeaab8334a 252 }
kenjiArai 0:4aaeaab8334a 253 }
kenjiArai 0:4aaeaab8334a 254 mem->mflg = ERR_OUT_OF_RANGE;
kenjiArai 0:4aaeaab8334a 255 mem->mstr = 0;
kenjiArai 0:4aaeaab8334a 256 mem->msiz = 0;
kenjiArai 0:4aaeaab8334a 257 return ;
kenjiArai 0:4aaeaab8334a 258 }
kenjiArai 0:4aaeaab8334a 259
kenjiArai 0:4aaeaab8334a 260 // Memory dump error massage
kenjiArai 0:4aaeaab8334a 261 void error_print ( unsigned char flg ){
kenjiArai 0:4aaeaab8334a 262 switch (flg) {
kenjiArai 0:4aaeaab8334a 263 case ERR_MODIFY_SIZ :
kenjiArai 0:4aaeaab8334a 264 put_r();
kenjiArai 0:4aaeaab8334a 265 pc.printf("Reach to out of range ");
kenjiArai 0:4aaeaab8334a 266 put_cr();
kenjiArai 0:4aaeaab8334a 267 break;
kenjiArai 0:4aaeaab8334a 268 case ERR_OUT_OF_RANGE :
kenjiArai 0:4aaeaab8334a 269 put_r();
kenjiArai 0:4aaeaab8334a 270 pc.printf("Not in a memory area ");
kenjiArai 0:4aaeaab8334a 271 put_cr();
kenjiArai 0:4aaeaab8334a 272 break;
kenjiArai 0:4aaeaab8334a 273 case ERR_NOTHING :
kenjiArai 0:4aaeaab8334a 274 default :
kenjiArai 0:4aaeaab8334a 275 ;
kenjiArai 0:4aaeaab8334a 276 }
kenjiArai 0:4aaeaab8334a 277 }
kenjiArai 0:4aaeaab8334a 278
kenjiArai 0:4aaeaab8334a 279 // Change string -> integer
kenjiArai 0:4aaeaab8334a 280 int xatoi (char **str, unsigned long *res){
kenjiArai 0:4aaeaab8334a 281 unsigned long val;
kenjiArai 0:4aaeaab8334a 282 unsigned char c, radix, s = 0;
kenjiArai 0:4aaeaab8334a 283
kenjiArai 0:4aaeaab8334a 284 while ((c = **str) == ' ') (*str)++;
kenjiArai 0:4aaeaab8334a 285 if (c == '-') {
kenjiArai 0:4aaeaab8334a 286 s = 1;
kenjiArai 0:4aaeaab8334a 287 c = *(++(*str));
kenjiArai 0:4aaeaab8334a 288 }
kenjiArai 0:4aaeaab8334a 289 if (c == '0') {
kenjiArai 0:4aaeaab8334a 290 c = *(++(*str));
kenjiArai 0:4aaeaab8334a 291 if (c <= ' ') {
kenjiArai 0:4aaeaab8334a 292 *res = 0; return 1;
kenjiArai 0:4aaeaab8334a 293 }
kenjiArai 0:4aaeaab8334a 294 if (c == 'x') {
kenjiArai 0:4aaeaab8334a 295 radix = 16;
kenjiArai 0:4aaeaab8334a 296 c = *(++(*str));
kenjiArai 0:4aaeaab8334a 297 } else {
kenjiArai 0:4aaeaab8334a 298 if (c == 'b') {
kenjiArai 0:4aaeaab8334a 299 radix = 2;
kenjiArai 0:4aaeaab8334a 300 c = *(++(*str));
kenjiArai 0:4aaeaab8334a 301 } else {
kenjiArai 0:4aaeaab8334a 302 if ((c >= '0')&&(c <= '9'))
kenjiArai 0:4aaeaab8334a 303 radix = 8;
kenjiArai 0:4aaeaab8334a 304 else
kenjiArai 0:4aaeaab8334a 305 return 0;
kenjiArai 0:4aaeaab8334a 306 }
kenjiArai 0:4aaeaab8334a 307 }
kenjiArai 0:4aaeaab8334a 308 } else {
kenjiArai 0:4aaeaab8334a 309 if ((c < '1')||(c > '9'))
kenjiArai 0:4aaeaab8334a 310 return 0;
kenjiArai 0:4aaeaab8334a 311 radix = 10;
kenjiArai 0:4aaeaab8334a 312 }
kenjiArai 0:4aaeaab8334a 313 val = 0;
kenjiArai 0:4aaeaab8334a 314 while (c > ' ') {
kenjiArai 0:4aaeaab8334a 315 if (c >= 'a') c -= 0x20;
kenjiArai 0:4aaeaab8334a 316 c -= '0';
kenjiArai 0:4aaeaab8334a 317 if (c >= 17) {
kenjiArai 0:4aaeaab8334a 318 c -= 7;
kenjiArai 0:4aaeaab8334a 319 if (c <= 9) return 0;
kenjiArai 0:4aaeaab8334a 320 }
kenjiArai 0:4aaeaab8334a 321 if (c >= radix) return 0;
kenjiArai 0:4aaeaab8334a 322 val = val * radix + c;
kenjiArai 0:4aaeaab8334a 323 c = *(++(*str));
kenjiArai 0:4aaeaab8334a 324 }
kenjiArai 0:4aaeaab8334a 325 if (s) val = -val;
kenjiArai 0:4aaeaab8334a 326 *res = val;
kenjiArai 0:4aaeaab8334a 327 return 1;
kenjiArai 0:4aaeaab8334a 328 }
kenjiArai 0:4aaeaab8334a 329
kenjiArai 0:4aaeaab8334a 330 // Print memory contents
kenjiArai 0:4aaeaab8334a 331 void put_dump (const unsigned char *buff, unsigned long ofs, int cnt){
kenjiArai 0:4aaeaab8334a 332 int n;
kenjiArai 0:4aaeaab8334a 333
kenjiArai 0:4aaeaab8334a 334 #if 1
kenjiArai 0:4aaeaab8334a 335 pc.printf("%08lX ", ofs);
kenjiArai 0:4aaeaab8334a 336 for(n = 0; n < cnt; n++){
kenjiArai 0:4aaeaab8334a 337 pc.printf(" %02X", buff[n]);
kenjiArai 0:4aaeaab8334a 338 }
kenjiArai 0:4aaeaab8334a 339 pc.putc(' ');
kenjiArai 0:4aaeaab8334a 340 for(n = 0; n < cnt; n++) {
kenjiArai 0:4aaeaab8334a 341 if ((buff[n] < 0x20)||(buff[n] >= 0x7F)){
kenjiArai 0:4aaeaab8334a 342 pc.putc('.');
kenjiArai 0:4aaeaab8334a 343 } else {
kenjiArai 0:4aaeaab8334a 344 pc.putc(buff[n]);
kenjiArai 0:4aaeaab8334a 345 }
kenjiArai 0:4aaeaab8334a 346 }
kenjiArai 0:4aaeaab8334a 347 put_cr();
kenjiArai 0:4aaeaab8334a 348 #endif
kenjiArai 0:4aaeaab8334a 349
kenjiArai 0:4aaeaab8334a 350 #if 0
kenjiArai 0:4aaeaab8334a 351 printf("%08lX ", ofs);
kenjiArai 0:4aaeaab8334a 352 for(n = 0; n < cnt; n++){
kenjiArai 0:4aaeaab8334a 353 printf(" %02X", buff[n]);
kenjiArai 0:4aaeaab8334a 354 }
kenjiArai 0:4aaeaab8334a 355 pc.putc(' ');
kenjiArai 0:4aaeaab8334a 356 for(n = 0; n < cnt; n++) {
kenjiArai 0:4aaeaab8334a 357 if ((buff[n] < 0x20)||(buff[n] >= 0x7F)){
kenjiArai 0:4aaeaab8334a 358 pc.putc('.');
kenjiArai 0:4aaeaab8334a 359 } else {
kenjiArai 0:4aaeaab8334a 360 pc.putc(buff[n]);
kenjiArai 0:4aaeaab8334a 361 }
kenjiArai 0:4aaeaab8334a 362 }
kenjiArai 0:4aaeaab8334a 363 pc.puts("\r\n");
kenjiArai 0:4aaeaab8334a 364 #endif
kenjiArai 0:4aaeaab8334a 365 }
kenjiArai 0:4aaeaab8334a 366
kenjiArai 0:4aaeaab8334a 367 // Get key input data
kenjiArai 0:4aaeaab8334a 368 void get_line (char *buff, int len){
kenjiArai 0:4aaeaab8334a 369 char c;
kenjiArai 0:4aaeaab8334a 370 int idx = 0;
kenjiArai 0:4aaeaab8334a 371
kenjiArai 0:4aaeaab8334a 372 for (;;) {
kenjiArai 0:4aaeaab8334a 373 c = pc.getc();
kenjiArai 0:4aaeaab8334a 374 // Added by Kenji Arai / JH1PJL May 9th, 2010
kenjiArai 0:4aaeaab8334a 375 if (c == '\r'){
kenjiArai 0:4aaeaab8334a 376 buff[idx++] = c;
kenjiArai 0:4aaeaab8334a 377 break;
kenjiArai 0:4aaeaab8334a 378 }
kenjiArai 0:4aaeaab8334a 379 if ((c == '\b') && idx) {
kenjiArai 0:4aaeaab8334a 380 idx--; pc.putc(c); pc.putc(' '); pc.putc(c);
kenjiArai 0:4aaeaab8334a 381 }
kenjiArai 0:4aaeaab8334a 382 if (((uint8_t)c >= ' ') && (idx < len - 1)) {
kenjiArai 0:4aaeaab8334a 383 buff[idx++] = c; pc.putc(c);
kenjiArai 0:4aaeaab8334a 384 }
kenjiArai 0:4aaeaab8334a 385 }
kenjiArai 0:4aaeaab8334a 386 buff[idx] = 0;
kenjiArai 0:4aaeaab8334a 387 pc.putc('\n');
kenjiArai 0:4aaeaab8334a 388 }
kenjiArai 0:4aaeaab8334a 389
kenjiArai 0:4aaeaab8334a 390 // Monitor Program
kenjiArai 0:4aaeaab8334a 391 int mon() {
kenjiArai 0:4aaeaab8334a 392 char *ptr;
kenjiArai 0:4aaeaab8334a 393 unsigned long p1;
kenjiArai 0:4aaeaab8334a 394 char c;
kenjiArai 0:4aaeaab8334a 395 time_t seconds;
kenjiArai 0:4aaeaab8334a 396 struct tm rtc;
kenjiArai 0:4aaeaab8334a 397
kenjiArai 0:4aaeaab8334a 398 pc.baud(115200);
kenjiArai 0:4aaeaab8334a 399 put_cr();
kenjiArai 0:4aaeaab8334a 400 put_cr();
kenjiArai 0:4aaeaab8334a 401 pc.printf("Monitor for mbed LPC1768 Ver. on "__DATE__" (" __TIME__ ") [Help:'?' key]");
kenjiArai 0:4aaeaab8334a 402 put_cr();
kenjiArai 0:4aaeaab8334a 403 get_freq(0);
kenjiArai 0:4aaeaab8334a 404 for (;;) {
kenjiArai 0:4aaeaab8334a 405 put_r();
kenjiArai 0:4aaeaab8334a 406 pc.putc('>');
kenjiArai 0:4aaeaab8334a 407 ptr = linebuf;
kenjiArai 0:4aaeaab8334a 408 get_line(ptr, sizeof(linebuf));
kenjiArai 0:4aaeaab8334a 409 switch (*ptr++) {
kenjiArai 0:4aaeaab8334a 410 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 411 // Memory
kenjiArai 0:4aaeaab8334a 412 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 413 case 'm' :
kenjiArai 0:4aaeaab8334a 414 put_r();
kenjiArai 0:4aaeaab8334a 415 pc.printf("Entry Memory Mode 1) d <address> [<count>], 2) s, 3) <ret>, 4) <esc>");
kenjiArai 0:4aaeaab8334a 416 put_cr();
kenjiArai 0:4aaeaab8334a 417 mem.mstr = 0;
kenjiArai 0:4aaeaab8334a 418 mem.msiz =256;
kenjiArai 0:4aaeaab8334a 419 mem.mold = 0;
kenjiArai 0:4aaeaab8334a 420 mem.mtmp = 0;
kenjiArai 0:4aaeaab8334a 421 mem.mflg = 0;
kenjiArai 0:4aaeaab8334a 422 for (;mem.mflg != 0xff;){
kenjiArai 0:4aaeaab8334a 423 pc.printf("m>");
kenjiArai 0:4aaeaab8334a 424 c = pc.getc();
kenjiArai 0:4aaeaab8334a 425 pc.putc(c);
kenjiArai 0:4aaeaab8334a 426 switch (c) {
kenjiArai 0:4aaeaab8334a 427 case 'd' : /* d <address> [<count>] - Dump memory */
kenjiArai 0:4aaeaab8334a 428 ptr = linebuf;
kenjiArai 0:4aaeaab8334a 429 get_line(ptr, sizeof(linebuf));
kenjiArai 0:4aaeaab8334a 430 mem.mtmp = mem.mstr;
kenjiArai 0:4aaeaab8334a 431 if (!xatoi(&ptr, &mem.mstr)){
kenjiArai 0:4aaeaab8334a 432 mem.mstr = mem.mtmp;
kenjiArai 0:4aaeaab8334a 433 }
kenjiArai 0:4aaeaab8334a 434 if (!xatoi(&ptr, &mem.msiz)){
kenjiArai 0:4aaeaab8334a 435 mem.msiz = 256;
kenjiArai 0:4aaeaab8334a 436 }
kenjiArai 0:4aaeaab8334a 437 mem.mtmp = mem.msiz;
kenjiArai 0:4aaeaab8334a 438 check_range (&mem);
kenjiArai 0:4aaeaab8334a 439 for (ptr=(char*)mem.mstr; mem.msiz >= 16; ptr += 16, mem.msiz -= 16){
kenjiArai 0:4aaeaab8334a 440 put_r();
kenjiArai 0:4aaeaab8334a 441 put_dump((unsigned char*)ptr, (unsigned int)ptr, 16);
kenjiArai 0:4aaeaab8334a 442 }
kenjiArai 0:4aaeaab8334a 443 if (mem.msiz){
kenjiArai 0:4aaeaab8334a 444 put_dump((unsigned char*)ptr, (unsigned int)ptr, mem.msiz);
kenjiArai 0:4aaeaab8334a 445 }
kenjiArai 0:4aaeaab8334a 446 error_print(mem.mflg);
kenjiArai 0:4aaeaab8334a 447 mem.mold = mem.mstr;
kenjiArai 0:4aaeaab8334a 448 mem.mstr += mem.mtmp;
kenjiArai 0:4aaeaab8334a 449 break;
kenjiArai 0:4aaeaab8334a 450 case 0x0d : // CR
kenjiArai 0:4aaeaab8334a 451 put_cr();
kenjiArai 0:4aaeaab8334a 452 mem.msiz = 256;
kenjiArai 0:4aaeaab8334a 453 mem.mtmp = mem.msiz;
kenjiArai 0:4aaeaab8334a 454 check_range (&mem);
kenjiArai 0:4aaeaab8334a 455 for (ptr=(char*)mem.mstr; mem.msiz >= 16; ptr += 16, mem.msiz -= 16){
kenjiArai 0:4aaeaab8334a 456 put_r();
kenjiArai 0:4aaeaab8334a 457 put_dump((unsigned char*)ptr, (unsigned int)ptr, 16);
kenjiArai 0:4aaeaab8334a 458 }
kenjiArai 0:4aaeaab8334a 459 error_print(mem.mflg);
kenjiArai 0:4aaeaab8334a 460 mem.mold = mem.mstr;
kenjiArai 0:4aaeaab8334a 461 mem.mstr += 256;
kenjiArai 0:4aaeaab8334a 462 break;
kenjiArai 0:4aaeaab8334a 463 case 0x1b : // ESC
kenjiArai 0:4aaeaab8334a 464 mem.mflg = 0xff;
kenjiArai 0:4aaeaab8334a 465 break;
kenjiArai 0:4aaeaab8334a 466 case 0x08 : // Back Space
kenjiArai 0:4aaeaab8334a 467 put_cr();
kenjiArai 0:4aaeaab8334a 468 mem.mstr = mem.mold;
kenjiArai 0:4aaeaab8334a 469 mem.msiz = 256;
kenjiArai 0:4aaeaab8334a 470 mem.mtmp = mem.msiz;
kenjiArai 0:4aaeaab8334a 471 check_range (&mem);
kenjiArai 0:4aaeaab8334a 472 for (ptr=(char*)mem.mstr; mem.msiz >= 16; ptr += 16, mem.msiz -= 16){
kenjiArai 0:4aaeaab8334a 473 put_r();
kenjiArai 0:4aaeaab8334a 474 put_dump((unsigned char*)ptr, (unsigned int)ptr, 16);
kenjiArai 0:4aaeaab8334a 475 }
kenjiArai 0:4aaeaab8334a 476 error_print(mem.mflg);
kenjiArai 0:4aaeaab8334a 477 mem.mstr += 256;
kenjiArai 0:4aaeaab8334a 478 break;
kenjiArai 0:4aaeaab8334a 479 case 's' :
kenjiArai 0:4aaeaab8334a 480 put_cr();
kenjiArai 0:4aaeaab8334a 481 pc.printf("Memory Configuration");
kenjiArai 0:4aaeaab8334a 482 put_cr();
kenjiArai 0:4aaeaab8334a 483 pc.printf("FLASH 0x%08lx to 0x%08lx ", mem_range[0][0], mem_range[0][1]);
kenjiArai 0:4aaeaab8334a 484 put_cr();
kenjiArai 0:4aaeaab8334a 485 pc.printf("S-RAM 0x%08lx to 0x%08lx ", mem_range[1][0], mem_range[1][1]);
kenjiArai 0:4aaeaab8334a 486 put_cr();
kenjiArai 0:4aaeaab8334a 487 pc.printf("Boot-ROM 0x%08lx to 0x%08lx ", mem_range[2][0], mem_range[2][1]);
kenjiArai 0:4aaeaab8334a 488 put_cr();
kenjiArai 0:4aaeaab8334a 489 pc.printf("AHB-RAM0 0x%08lx to 0x%08lx ", mem_range[3][0], mem_range[3][1]);
kenjiArai 0:4aaeaab8334a 490 put_cr();
kenjiArai 0:4aaeaab8334a 491 pc.printf("AHB-RAM1 0x%08lx to 0x%08lx \r\n", mem_range[4][0], mem_range[4][1]);
kenjiArai 0:4aaeaab8334a 492 break;
kenjiArai 0:4aaeaab8334a 493 case '?' :
kenjiArai 0:4aaeaab8334a 494 put_cr();
kenjiArai 0:4aaeaab8334a 495 pc.printf("d <address> [<count>] - Dump memory");
kenjiArai 0:4aaeaab8334a 496 put_cr();
kenjiArai 0:4aaeaab8334a 497 pc.printf("s - Show memory structure ");
kenjiArai 0:4aaeaab8334a 498 put_cr();
kenjiArai 0:4aaeaab8334a 499 pc.printf("<RET> - Dump memory / next 128 bytes");
kenjiArai 0:4aaeaab8334a 500 put_cr();
kenjiArai 0:4aaeaab8334a 501 pc.printf("<BS> - Dump memory / same as before 128 bytes");
kenjiArai 0:4aaeaab8334a 502 put_cr();
kenjiArai 0:4aaeaab8334a 503 pc.printf("<ESC> - Exit memory mode");
kenjiArai 0:4aaeaab8334a 504 put_cr();
kenjiArai 0:4aaeaab8334a 505 break;
kenjiArai 0:4aaeaab8334a 506 default:
kenjiArai 0:4aaeaab8334a 507 put_cr();
kenjiArai 0:4aaeaab8334a 508 }
kenjiArai 0:4aaeaab8334a 509 }
kenjiArai 0:4aaeaab8334a 510 pc.putc('>');
kenjiArai 0:4aaeaab8334a 511 put_cr();
kenjiArai 0:4aaeaab8334a 512 break;
kenjiArai 0:4aaeaab8334a 513 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 514 // Port
kenjiArai 0:4aaeaab8334a 515 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 516 case 'p' : /* p - Show Port status */
kenjiArai 0:4aaeaab8334a 517 check_port();
kenjiArai 0:4aaeaab8334a 518 break;
kenjiArai 0:4aaeaab8334a 519 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 520 // ADC
kenjiArai 0:4aaeaab8334a 521 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 522 case 'a' : /* a - Show ADC data */
kenjiArai 0:4aaeaab8334a 523 put_r();
kenjiArai 0:4aaeaab8334a 524 pc.printf("anao = %f, ana1 = %f, ana2 = %f", ana0.read(), ana1.read(), ana2.read());
kenjiArai 0:4aaeaab8334a 525 put_cr();
kenjiArai 0:4aaeaab8334a 526 break;
kenjiArai 0:4aaeaab8334a 527 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 528 // Time
kenjiArai 0:4aaeaab8334a 529 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 530 case 't' : /* t [<year> <mon> <mday> <hour> <min> <sec>] */
kenjiArai 0:4aaeaab8334a 531 if (xatoi(&ptr, &p1)) {
kenjiArai 0:4aaeaab8334a 532 rtc.tm_year = (unsigned short)p1;
kenjiArai 0:4aaeaab8334a 533 xatoi(&ptr, &p1); rtc.tm_mon = (unsigned char)p1;
kenjiArai 0:4aaeaab8334a 534 xatoi(&ptr, &p1); rtc.tm_mday = (unsigned char)p1;
kenjiArai 0:4aaeaab8334a 535 xatoi(&ptr, &p1); rtc.tm_hour = (unsigned char)p1;
kenjiArai 0:4aaeaab8334a 536 xatoi(&ptr, &p1); rtc.tm_min = (unsigned char)p1;
kenjiArai 0:4aaeaab8334a 537 if (!xatoi(&ptr, &p1)) break;
kenjiArai 0:4aaeaab8334a 538 rtc.tm_sec = (unsigned char)p1;
kenjiArai 0:4aaeaab8334a 539 seconds = mktime(&rtc);
kenjiArai 0:4aaeaab8334a 540 set_time(seconds);
kenjiArai 0:4aaeaab8334a 541 }
kenjiArai 0:4aaeaab8334a 542 while ( seconds == time(NULL)) ;
kenjiArai 0:4aaeaab8334a 543 seconds = time(NULL);
kenjiArai 0:4aaeaab8334a 544 // 13:24:00 PM (2010/03/27)
kenjiArai 0:4aaeaab8334a 545 strftime(linebuf,40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 0:4aaeaab8334a 546 put_r();
kenjiArai 0:4aaeaab8334a 547 pc.printf("Time = %s", linebuf);
kenjiArai 0:4aaeaab8334a 548 put_cr();
kenjiArai 0:4aaeaab8334a 549 break;
kenjiArai 0:4aaeaab8334a 550 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 551 // System
kenjiArai 0:4aaeaab8334a 552 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 553 case 's' : /* System related information */
kenjiArai 0:4aaeaab8334a 554 switch (*ptr++) {
kenjiArai 0:4aaeaab8334a 555 case 'f' : /* sc - show system clock frequency */
kenjiArai 0:4aaeaab8334a 556 get_freq(1);
kenjiArai 0:4aaeaab8334a 557 break;
kenjiArai 0:4aaeaab8334a 558 case 'c' : /* sc - show system CPU information*/
kenjiArai 0:4aaeaab8334a 559 cpu_inf();
kenjiArai 0:4aaeaab8334a 560 break;
kenjiArai 0:4aaeaab8334a 561 case '?' :
kenjiArai 0:4aaeaab8334a 562 pc.printf("sc - System CPU information");
kenjiArai 0:4aaeaab8334a 563 put_cr();
kenjiArai 0:4aaeaab8334a 564 pc.printf("sf - System Clock");
kenjiArai 0:4aaeaab8334a 565 put_cr();
kenjiArai 0:4aaeaab8334a 566 break;
kenjiArai 0:4aaeaab8334a 567 }
kenjiArai 0:4aaeaab8334a 568 break;
kenjiArai 0:4aaeaab8334a 569 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 570 // Repeat Command every second
kenjiArai 0:4aaeaab8334a 571 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 572 case '/' :
kenjiArai 0:4aaeaab8334a 573 switch (*ptr++) {
kenjiArai 0:4aaeaab8334a 574 case 'a' :
kenjiArai 0:4aaeaab8334a 575 while(1){
kenjiArai 0:4aaeaab8334a 576 put_r();
kenjiArai 0:4aaeaab8334a 577 pc.printf("anao = %f, ana1 = %f, ana2 = %f", ana0.read(), ana1.read(), ana2.read());
kenjiArai 0:4aaeaab8334a 578 put_cr();
kenjiArai 0:4aaeaab8334a 579 if ( pc.readable() ){
kenjiArai 0:4aaeaab8334a 580 break;
kenjiArai 0:4aaeaab8334a 581 }
kenjiArai 0:4aaeaab8334a 582 wait(1.0); // Wait 1sec
kenjiArai 0:4aaeaab8334a 583 }
kenjiArai 0:4aaeaab8334a 584 break;
kenjiArai 0:4aaeaab8334a 585 case 'p' :
kenjiArai 0:4aaeaab8334a 586 while(1){
kenjiArai 0:4aaeaab8334a 587 check_port();
kenjiArai 0:4aaeaab8334a 588 if ( pc.readable() ){
kenjiArai 0:4aaeaab8334a 589 break;
kenjiArai 0:4aaeaab8334a 590 }
kenjiArai 0:4aaeaab8334a 591 wait(1.0); // Wait 1sec
kenjiArai 0:4aaeaab8334a 592 }
kenjiArai 0:4aaeaab8334a 593 break;
kenjiArai 0:4aaeaab8334a 594 case 't' :
kenjiArai 0:4aaeaab8334a 595 while(1){
kenjiArai 0:4aaeaab8334a 596 while ( seconds == time(NULL)) ;
kenjiArai 0:4aaeaab8334a 597 seconds = time(NULL);
kenjiArai 0:4aaeaab8334a 598 // 13:24:00 PM (2010/03/27)
kenjiArai 0:4aaeaab8334a 599 strftime(linebuf,40, "%I:%M:%S %p (%Y/%m/%d)", localtime(&seconds));
kenjiArai 0:4aaeaab8334a 600 put_r();
kenjiArai 0:4aaeaab8334a 601 pc.printf("Time = %s", linebuf);
kenjiArai 0:4aaeaab8334a 602 put_cr();
kenjiArai 0:4aaeaab8334a 603 if ( pc.readable() ){
kenjiArai 0:4aaeaab8334a 604 break;
kenjiArai 0:4aaeaab8334a 605 }
kenjiArai 0:4aaeaab8334a 606 wait(1.0); // Wait 1sec
kenjiArai 0:4aaeaab8334a 607 }
kenjiArai 0:4aaeaab8334a 608 break;
kenjiArai 0:4aaeaab8334a 609 }
kenjiArai 0:4aaeaab8334a 610 break;
kenjiArai 0:4aaeaab8334a 611 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 612 // Help
kenjiArai 0:4aaeaab8334a 613 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 614 case '?' :
kenjiArai 0:4aaeaab8334a 615 msg_hlp();
kenjiArai 0:4aaeaab8334a 616 break;
kenjiArai 0:4aaeaab8334a 617 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 618 // Return to main routine
kenjiArai 0:4aaeaab8334a 619 //--------------------------------------------------------------------------------------
kenjiArai 0:4aaeaab8334a 620 case 'q' : // Quit
kenjiArai 0:4aaeaab8334a 621 pc.printf("\rReturn to main but back to mon()\r\n");
kenjiArai 0:4aaeaab8334a 622 return 0;
kenjiArai 0:4aaeaab8334a 623 }
kenjiArai 0:4aaeaab8334a 624 }
kenjiArai 0:4aaeaab8334a 625 }