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.
mon.cpp@0:4aaeaab8334a, 2010-05-15 (annotated)
- Committer:
- kenjiArai
- Date:
- Sat May 15 13:08:59 2010 +0000
- Revision:
- 0:4aaeaab8334a
Who changed what in which revision?
User | Revision | Line number | New 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 | } |