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 Nov 02 09:28:26 2014 +0000
Revision:
2:b96103f9270e
Child:
3:455df34f7285
modified all of files for pick-up common parts

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 2:b96103f9270e 1 /*
kenjiArai 2:b96103f9270e 2 * mbed Application program for the ST NUCLEO Board
kenjiArai 2:b96103f9270e 3 * Monitor program Ver.3 for only for STM32F401RE,F411RE & STM32L152RE
kenjiArai 2:b96103f9270e 4 *
kenjiArai 2:b96103f9270e 5 * Copyright (c) 2010-2014 Kenji Arai / JH1PJL
kenjiArai 2:b96103f9270e 6 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 2:b96103f9270e 7 * http://mbed.org/users/kenjiArai/
kenjiArai 2:b96103f9270e 8 * Started: May 9th, 2010
kenjiArai 2:b96103f9270e 9 * Created: May 15th, 2010
kenjiArai 2:b96103f9270e 10 * release as "monitor_01" http://mbed.org/users/kenjiArai/code/monitor_01/
kenjiArai 2:b96103f9270e 11 * Spareted: June 25th, 2014 mon() & mon_hw()
kenjiArai 2:b96103f9270e 12 * restart: July 12th, 2014
kenjiArai 2:b96103f9270e 13 * Revised: Nobember 2nd, 2014
kenjiArai 2:b96103f9270e 14 *
kenjiArai 2:b96103f9270e 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
kenjiArai 2:b96103f9270e 16 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
kenjiArai 2:b96103f9270e 17 * AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
kenjiArai 2:b96103f9270e 18 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kenjiArai 2:b96103f9270e 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
kenjiArai 2:b96103f9270e 20 */
kenjiArai 2:b96103f9270e 21
kenjiArai 2:b96103f9270e 22 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_L152RE)
kenjiArai 2:b96103f9270e 23
kenjiArai 2:b96103f9270e 24 // Include ---------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 25 #include "mbed.h"
kenjiArai 2:b96103f9270e 26 #include "mon_hw_config.h"
kenjiArai 2:b96103f9270e 27 #include "mon_hw_common.h"
kenjiArai 2:b96103f9270e 28 #include "mon_hw_STM32.h"
kenjiArai 2:b96103f9270e 29
kenjiArai 2:b96103f9270e 30 // Object ----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 31
kenjiArai 2:b96103f9270e 32 // Definition ------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 33 // USB Frequency
kenjiArai 2:b96103f9270e 34 #define USB_FREQ_H 48100000
kenjiArai 2:b96103f9270e 35 #define USB_FREQ_L 47900000
kenjiArai 2:b96103f9270e 36
kenjiArai 2:b96103f9270e 37 // RAM -------------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 38 uint32_t SystemFrequency;
kenjiArai 2:b96103f9270e 39 uint8_t quitflag;
kenjiArai 2:b96103f9270e 40
kenjiArai 2:b96103f9270e 41 uint32_t reg_save0, reg_save1, reg_save2, reg_save3, reg_save4;
kenjiArai 2:b96103f9270e 42
kenjiArai 2:b96103f9270e 43 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 44 #if defined(TARGET_NUCLEO_F401RE)
kenjiArai 2:b96103f9270e 45 char *const mon_msg =
kenjiArai 2:b96103f9270e 46 "HW monitor only for mbed Nucleo F401RE created on UTC:"__DATE__"("__TIME__")";
kenjiArai 2:b96103f9270e 47
kenjiArai 2:b96103f9270e 48 #if USE_MEM
kenjiArai 2:b96103f9270e 49 const uint32_t mem_range[][2] = { // Memory access range
kenjiArai 2:b96103f9270e 50 { 0x08000000, 0x0807ffff }, // On-chip Flash memory, 512KB Flash
kenjiArai 2:b96103f9270e 51 { 0x1fff0000, 0x1fff7a0f }, // System memory
kenjiArai 2:b96103f9270e 52 { 0x1fffc000, 0x1fffc007 }, // Option bytes
kenjiArai 2:b96103f9270e 53 { 0x20000000, 0x20017fff }, // Main Embedded SRAM, 96KB SRAM
kenjiArai 2:b96103f9270e 54 { 0x40000000, 0x5003ffff } // IO area
kenjiArai 2:b96103f9270e 55 };
kenjiArai 2:b96103f9270e 56 #endif // USE_MEM
kenjiArai 2:b96103f9270e 57 #elif defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 58 char *const mon_msg =
kenjiArai 2:b96103f9270e 59 "HW monitor only for mbed Nucleo F411RE created on UTC:"__DATE__"("__TIME__")";
kenjiArai 2:b96103f9270e 60
kenjiArai 2:b96103f9270e 61 #if USE_MEM
kenjiArai 2:b96103f9270e 62 const uint32_t mem_range[][2] = { // Memory access range
kenjiArai 2:b96103f9270e 63 { 0x08000000, 0x0807ffff }, // On-chip Flash memory, 512KB Flash
kenjiArai 2:b96103f9270e 64 { 0x1fff0000, 0x1fff7a0f }, // System memory
kenjiArai 2:b96103f9270e 65 { 0x1fffc000, 0x1fffc007 }, // Option bytes
kenjiArai 2:b96103f9270e 66 { 0x20000000, 0x2001ffff }, // Main Embedded SRAM, 128KB SRAM
kenjiArai 2:b96103f9270e 67 { 0x40000000, 0x5003ffff } // IO area
kenjiArai 2:b96103f9270e 68 };
kenjiArai 2:b96103f9270e 69 #endif // USE_MEM
kenjiArai 2:b96103f9270e 70 #elif defined(TARGET_NUCLEO_L152RE)
kenjiArai 2:b96103f9270e 71 char *const mon_msg =
kenjiArai 2:b96103f9270e 72 "HW monitor only for mbed Nucleo L152RE created on UTC:"__DATE__"("__TIME__")";
kenjiArai 2:b96103f9270e 73
kenjiArai 2:b96103f9270e 74 #if USE_MEM
kenjiArai 2:b96103f9270e 75 const uint32_t mem_range[][2] = { // Memory access range
kenjiArai 2:b96103f9270e 76 { 0x08000000, 0x0807ffff }, // On-chip Flash memory, 512KB Flash
kenjiArai 2:b96103f9270e 77 { 0x08080000, 0x08083fff }, // EEPROM, 16KB
kenjiArai 2:b96103f9270e 78 { 0x1ff00000, 0x1ff01fff }, // System memory
kenjiArai 2:b96103f9270e 79 { 0x1ff80000, 0x1ff8009f }, // Option bytes
kenjiArai 2:b96103f9270e 80 { 0x20000000, 0x20013fff }, // Main Embedded SRAM, 32KB SRAM
kenjiArai 2:b96103f9270e 81 { 0x40000000, 0x400267ff } // IO area
kenjiArai 2:b96103f9270e 82 };
kenjiArai 2:b96103f9270e 83 #endif // USE_MEM
kenjiArai 2:b96103f9270e 84 #endif
kenjiArai 2:b96103f9270e 85
kenjiArai 2:b96103f9270e 86 char *const hmsg0 = "m - Entry Memory Mode";
kenjiArai 2:b96103f9270e 87 char *const hmsg1 = "m>? -> Aditinal functions can see by ?";
kenjiArai 2:b96103f9270e 88 char *const hmsg2 = "r - Entry Register Mode";
kenjiArai 2:b96103f9270e 89 char *const hmsg3 = "r>? -> Aditinal functions can see by ?";
kenjiArai 2:b96103f9270e 90 char *const hmsg4 = "s - System Clock -> sf, System / CPU information -> sc";
kenjiArai 2:b96103f9270e 91 char *const hmsg5 = "q - Quit (back to called routine)";
kenjiArai 2:b96103f9270e 92 char *const hmsg6 = "p - Entry Port Mode";
kenjiArai 2:b96103f9270e 93 char *const hmsg7 = "p>? -> Aditinal functions can see by ?";
kenjiArai 2:b96103f9270e 94
kenjiArai 2:b96103f9270e 95 char *const mrmsg0 = "Enter Register Mode u,i,s,t,a,d,l,w,c & ? for help";
kenjiArai 2:b96103f9270e 96 #if (USE_UART==1) || (USE_SPI==1) || (USE_I2C == 1)
kenjiArai 2:b96103f9270e 97 char *const mrmsg1 = "------";
kenjiArai 2:b96103f9270e 98 char *const mrmsg2 = "USART";
kenjiArai 2:b96103f9270e 99 //
kenjiArai 2:b96103f9270e 100 char *const mrmsg4 = "I2C";
kenjiArai 2:b96103f9270e 101 //
kenjiArai 2:b96103f9270e 102 char *const mrmsg6 = "SPI";
kenjiArai 2:b96103f9270e 103 //
kenjiArai 2:b96103f9270e 104 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 105 char *const mrmsg3 = "Enter u1,u2,u6 and u* for all";
kenjiArai 2:b96103f9270e 106 char *const mrmsg5 = "Enter i1,i2,i3 and i* for all";
kenjiArai 2:b96103f9270e 107 char *const mrmsg7 = "Enter s1,s2,s3,s4 and s* for all";
kenjiArai 2:b96103f9270e 108 #elif defined(TARGET_NUCLEO_L152RE)
kenjiArai 2:b96103f9270e 109 char *const mrmsg3 = "Enter u1,u2,u3,u5 and u* for all";
kenjiArai 2:b96103f9270e 110 char *const mrmsg5 = "Enter i1,i2 and i* for all";
kenjiArai 2:b96103f9270e 111 char *const mrmsg7 = "Enter s1,s2,s3 and s* for all";
kenjiArai 2:b96103f9270e 112 #endif
kenjiArai 2:b96103f9270e 113 #endif // (USE_UART==1) || (USE_SPI==1) || (USE_I2C == 1)
kenjiArai 2:b96103f9270e 114 char *const mrmsg8 = "Return to All Mode";
kenjiArai 2:b96103f9270e 115
kenjiArai 2:b96103f9270e 116 //-------------------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 117 // Control Program
kenjiArai 2:b96103f9270e 118 //-------------------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 119 // No function
kenjiArai 2:b96103f9270e 120 static void not_yet_impliment( void )
kenjiArai 2:b96103f9270e 121 {
kenjiArai 2:b96103f9270e 122 PRINTF("Not implimented yet");
kenjiArai 2:b96103f9270e 123 put_rn();
kenjiArai 2:b96103f9270e 124 }
kenjiArai 2:b96103f9270e 125
kenjiArai 2:b96103f9270e 126 // No function
kenjiArai 2:b96103f9270e 127 #if (USE_MEM==0)||(USE_PORT==0)||(USE_UART==0)||(USE_SPI==0)||(USE_I2C==0)||(USE_SYS==0)
kenjiArai 2:b96103f9270e 128 static void not_select( void )
kenjiArai 2:b96103f9270e 129 {
kenjiArai 2:b96103f9270e 130 PRINTF("Not select the function (refer mon_hw_config.h)");
kenjiArai 2:b96103f9270e 131 put_rn();
kenjiArai 2:b96103f9270e 132 }
kenjiArai 2:b96103f9270e 133 #endif
kenjiArai 2:b96103f9270e 134
kenjiArai 2:b96103f9270e 135 // Help Massage
kenjiArai 2:b96103f9270e 136 void hw_msg_hlp ( void )
kenjiArai 2:b96103f9270e 137 {
kenjiArai 2:b96103f9270e 138 PRINTF(mon_msg);
kenjiArai 2:b96103f9270e 139 put_rn();
kenjiArai 2:b96103f9270e 140 PRINTF(hmsg0);
kenjiArai 2:b96103f9270e 141 put_rn();
kenjiArai 2:b96103f9270e 142 PRINTF(hmsg1);
kenjiArai 2:b96103f9270e 143 put_rn();
kenjiArai 2:b96103f9270e 144 PRINTF(hmsg6);
kenjiArai 2:b96103f9270e 145 put_rn();
kenjiArai 2:b96103f9270e 146 PRINTF(hmsg7);
kenjiArai 2:b96103f9270e 147 put_rn();
kenjiArai 2:b96103f9270e 148 PRINTF(hmsg2);
kenjiArai 2:b96103f9270e 149 put_rn();
kenjiArai 2:b96103f9270e 150 PRINTF(hmsg3);
kenjiArai 2:b96103f9270e 151 put_rn();
kenjiArai 2:b96103f9270e 152 PRINTF(hmsg4);
kenjiArai 2:b96103f9270e 153 put_rn();
kenjiArai 2:b96103f9270e 154 PRINTF(hmsg5);
kenjiArai 2:b96103f9270e 155 put_rn();
kenjiArai 2:b96103f9270e 156 }
kenjiArai 2:b96103f9270e 157
kenjiArai 2:b96103f9270e 158 #if USE_MEM
kenjiArai 2:b96103f9270e 159 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 160 char *const rmsg0 = "FLASH ";
kenjiArai 2:b96103f9270e 161 char *const rmsg1 = "SYS-Mem ";
kenjiArai 2:b96103f9270e 162 char *const rmsg2 = "OPTION ";
kenjiArai 2:b96103f9270e 163 char *const rmsg3 = "SRAM ";
kenjiArai 2:b96103f9270e 164 char *const rmsg4 = "IO ";
kenjiArai 2:b96103f9270e 165 #elif defined(TARGET_NUCLEO_L152RE)
kenjiArai 2:b96103f9270e 166 char *const rmsg0 = "FLASH ";
kenjiArai 2:b96103f9270e 167 char *const rmsg1 = "EEPROM ";
kenjiArai 2:b96103f9270e 168 char *const rmsg2 = "SYS-Mem ";
kenjiArai 2:b96103f9270e 169 char *const rmsg3 = "OPTION ";
kenjiArai 2:b96103f9270e 170 char *const rmsg4 = "SRAM ";
kenjiArai 2:b96103f9270e 171 char *const rmsg5 = "IO ";
kenjiArai 2:b96103f9270e 172 #endif
kenjiArai 2:b96103f9270e 173
kenjiArai 2:b96103f9270e 174 #include "mon_hw_mem.h"
kenjiArai 2:b96103f9270e 175 #endif // USE_MEM
kenjiArai 2:b96103f9270e 176
kenjiArai 2:b96103f9270e 177
kenjiArai 2:b96103f9270e 178 // Show 16bit register contents
kenjiArai 2:b96103f9270e 179 void reg_print(uint16_t size, uint16_t reg)
kenjiArai 2:b96103f9270e 180 {
kenjiArai 2:b96103f9270e 181 uint16_t i, j, k, n;
kenjiArai 2:b96103f9270e 182
kenjiArai 2:b96103f9270e 183 i = j = k = n = 0;
kenjiArai 2:b96103f9270e 184 switch (size) {
kenjiArai 2:b96103f9270e 185 case SIZE8:
kenjiArai 2:b96103f9270e 186 PRINTF(rgmsg0);
kenjiArai 2:b96103f9270e 187 put_rn();
kenjiArai 2:b96103f9270e 188 i = 8;
kenjiArai 2:b96103f9270e 189 n = 0x80;
kenjiArai 2:b96103f9270e 190 break;
kenjiArai 2:b96103f9270e 191 case SIZE16:
kenjiArai 2:b96103f9270e 192 PRINTF("%s%s", rgmsg1, rgmsg0);
kenjiArai 2:b96103f9270e 193 put_rn();
kenjiArai 2:b96103f9270e 194 i = 16;
kenjiArai 2:b96103f9270e 195 n = 0x8000;
kenjiArai 2:b96103f9270e 196 break;
kenjiArai 2:b96103f9270e 197 case SIZE32:
kenjiArai 2:b96103f9270e 198 PRINTF("0x%08x", reg);
kenjiArai 2:b96103f9270e 199 return;
kenjiArai 2:b96103f9270e 200 default :
kenjiArai 2:b96103f9270e 201 ;
kenjiArai 2:b96103f9270e 202 }
kenjiArai 2:b96103f9270e 203 PUTC(' ');
kenjiArai 2:b96103f9270e 204 for (; i>0; i--) {
kenjiArai 2:b96103f9270e 205 k = n >> (size-i);
kenjiArai 2:b96103f9270e 206 j = reg & k;
kenjiArai 2:b96103f9270e 207 if (j) {
kenjiArai 2:b96103f9270e 208 PUTC('1');
kenjiArai 2:b96103f9270e 209 } else {
kenjiArai 2:b96103f9270e 210 PUTC('0');
kenjiArai 2:b96103f9270e 211 }
kenjiArai 2:b96103f9270e 212 PUTC(' ');
kenjiArai 2:b96103f9270e 213 PUTC(' ');
kenjiArai 2:b96103f9270e 214 }
kenjiArai 2:b96103f9270e 215 PRINTF(" (0x%04x)", reg);
kenjiArai 2:b96103f9270e 216 }
kenjiArai 2:b96103f9270e 217
kenjiArai 2:b96103f9270e 218 #if USE_I2C
kenjiArai 2:b96103f9270e 219 void i2c_reg( I2C_TypeDef* I2Cx )
kenjiArai 2:b96103f9270e 220 {
kenjiArai 2:b96103f9270e 221 uint16_t reg;
kenjiArai 2:b96103f9270e 222
kenjiArai 2:b96103f9270e 223 put_rn();
kenjiArai 2:b96103f9270e 224 reg = I2Cx->CR1;
kenjiArai 2:b96103f9270e 225 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 226 PRINTF( rnmsg0 );
kenjiArai 2:b96103f9270e 227 PRINTF( imsg2 );
kenjiArai 2:b96103f9270e 228 put_rn();
kenjiArai 2:b96103f9270e 229 reg = I2Cx->CR2;
kenjiArai 2:b96103f9270e 230 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 231 PRINTF( rnmsg1 );
kenjiArai 2:b96103f9270e 232 PRINTF( imsg2 );
kenjiArai 2:b96103f9270e 233 put_rn();
kenjiArai 2:b96103f9270e 234 reg = I2Cx->SR1;
kenjiArai 2:b96103f9270e 235 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 236 PRINTF( rnmsg5 );
kenjiArai 2:b96103f9270e 237 PRINTF( imsg3 );
kenjiArai 2:b96103f9270e 238 put_rn();
kenjiArai 2:b96103f9270e 239 reg = I2Cx->SR2;
kenjiArai 2:b96103f9270e 240 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 241 PRINTF( rnmsg6 );
kenjiArai 2:b96103f9270e 242 PRINTF( imsg3 );
kenjiArai 2:b96103f9270e 243 put_rn();
kenjiArai 2:b96103f9270e 244 reg = I2Cx->DR;
kenjiArai 2:b96103f9270e 245 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 246 PRINTF( rnmsg2 );
kenjiArai 2:b96103f9270e 247 PRINTF( imsg4 );
kenjiArai 2:b96103f9270e 248 put_rn();
kenjiArai 2:b96103f9270e 249 reg = I2Cx->OAR1;
kenjiArai 2:b96103f9270e 250 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 251 PRINTF( rnmsg7 );
kenjiArai 2:b96103f9270e 252 PRINTF( imsg6 );
kenjiArai 2:b96103f9270e 253 put_rn();
kenjiArai 2:b96103f9270e 254 reg = I2Cx->OAR2;
kenjiArai 2:b96103f9270e 255 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 256 PRINTF( rnmsg8 );
kenjiArai 2:b96103f9270e 257 PRINTF( imsg6 );
kenjiArai 2:b96103f9270e 258 put_rn();
kenjiArai 2:b96103f9270e 259 reg = I2Cx->CCR;
kenjiArai 2:b96103f9270e 260 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 261 PRINTF( rnmsg9 );
kenjiArai 2:b96103f9270e 262 PRINTF( imsg7 );
kenjiArai 2:b96103f9270e 263 put_rn();
kenjiArai 2:b96103f9270e 264 reg = I2Cx->TRISE;
kenjiArai 2:b96103f9270e 265 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 266 PRINTF( rnmsg10 );
kenjiArai 2:b96103f9270e 267 PRINTF( imsg8 );
kenjiArai 2:b96103f9270e 268 put_rn();
kenjiArai 2:b96103f9270e 269 }
kenjiArai 2:b96103f9270e 270 #endif // USE_I2C
kenjiArai 2:b96103f9270e 271
kenjiArai 2:b96103f9270e 272 #if USE_SPI
kenjiArai 2:b96103f9270e 273 void spi_reg( SPI_TypeDef* SPIx )
kenjiArai 2:b96103f9270e 274 {
kenjiArai 2:b96103f9270e 275 uint16_t reg;
kenjiArai 2:b96103f9270e 276
kenjiArai 2:b96103f9270e 277 put_rn();
kenjiArai 2:b96103f9270e 278 reg = SPIx->CR1;
kenjiArai 2:b96103f9270e 279 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 280 PRINTF( rnmsg0 );
kenjiArai 2:b96103f9270e 281 PRINTF( imsg2 );
kenjiArai 2:b96103f9270e 282 put_rn();
kenjiArai 2:b96103f9270e 283 reg = SPIx->CR2;
kenjiArai 2:b96103f9270e 284 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 285 PRINTF( rnmsg1 );
kenjiArai 2:b96103f9270e 286 PRINTF( imsg2 );
kenjiArai 2:b96103f9270e 287 put_rn();
kenjiArai 2:b96103f9270e 288 reg = SPIx->SR;
kenjiArai 2:b96103f9270e 289 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 290 PRINTF( rnmsg3 );
kenjiArai 2:b96103f9270e 291 PRINTF( imsg3 );
kenjiArai 2:b96103f9270e 292 put_rn();
kenjiArai 2:b96103f9270e 293 reg = SPIx->DR;
kenjiArai 2:b96103f9270e 294 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 295 PRINTF( rnmsg2 );
kenjiArai 2:b96103f9270e 296 PRINTF( imsg4 );
kenjiArai 2:b96103f9270e 297 put_rn();
kenjiArai 2:b96103f9270e 298 }
kenjiArai 2:b96103f9270e 299 #endif // USE_SPI
kenjiArai 2:b96103f9270e 300
kenjiArai 2:b96103f9270e 301 #if USE_UART
kenjiArai 2:b96103f9270e 302 void usart_reg( USART_TypeDef* USARTx )
kenjiArai 2:b96103f9270e 303 {
kenjiArai 2:b96103f9270e 304 uint16_t reg;
kenjiArai 2:b96103f9270e 305
kenjiArai 2:b96103f9270e 306 put_rn();
kenjiArai 2:b96103f9270e 307 reg = USARTx->SR;
kenjiArai 2:b96103f9270e 308 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 309 PRINTF( rnmsg3 );
kenjiArai 2:b96103f9270e 310 PRINTF( imsg3 );
kenjiArai 2:b96103f9270e 311 put_rn();
kenjiArai 2:b96103f9270e 312 reg = USARTx->DR;
kenjiArai 2:b96103f9270e 313 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 314 PRINTF( rnmsg2 );
kenjiArai 2:b96103f9270e 315 PRINTF( imsg4 );
kenjiArai 2:b96103f9270e 316 put_rn();
kenjiArai 2:b96103f9270e 317 reg = USARTx->BRR;
kenjiArai 2:b96103f9270e 318 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 319 PRINTF( rnmsg4 );
kenjiArai 2:b96103f9270e 320 PRINTF( imsg5 );
kenjiArai 2:b96103f9270e 321 put_rn();
kenjiArai 2:b96103f9270e 322 reg = USARTx->CR1;
kenjiArai 2:b96103f9270e 323 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 324 PRINTF( rnmsg0 );
kenjiArai 2:b96103f9270e 325 PRINTF( imsg2 );
kenjiArai 2:b96103f9270e 326 put_rn();
kenjiArai 2:b96103f9270e 327 reg = USARTx->CR2;
kenjiArai 2:b96103f9270e 328 reg_print( SIZE32, reg );
kenjiArai 2:b96103f9270e 329 PRINTF( rnmsg1 );
kenjiArai 2:b96103f9270e 330 PRINTF( imsg2 );
kenjiArai 2:b96103f9270e 331 put_rn();
kenjiArai 2:b96103f9270e 332 }
kenjiArai 2:b96103f9270e 333 #endif // USE_UART
kenjiArai 2:b96103f9270e 334
kenjiArai 2:b96103f9270e 335 #if USE_PORT
kenjiArai 2:b96103f9270e 336 void rpt_port_one( GPIO_TypeDef* GPIOx )
kenjiArai 2:b96103f9270e 337 {
kenjiArai 2:b96103f9270e 338 uint32_t i;
kenjiArai 2:b96103f9270e 339
kenjiArai 2:b96103f9270e 340 PRINTF( " " );
kenjiArai 2:b96103f9270e 341 i = GPIOx->MODER;
kenjiArai 2:b96103f9270e 342 PRINTF( "0x%08x",i );
kenjiArai 2:b96103f9270e 343 i = GPIOx->OTYPER;
kenjiArai 2:b96103f9270e 344 PRINTF( " 0x%04x",i );
kenjiArai 2:b96103f9270e 345 i = GPIOx->OSPEEDR;
kenjiArai 2:b96103f9270e 346 PRINTF( " 0x%08x",i );
kenjiArai 2:b96103f9270e 347 i = GPIOx->PUPDR;
kenjiArai 2:b96103f9270e 348 PRINTF( " 0x%08x",i );
kenjiArai 2:b96103f9270e 349 i = GPIOx->IDR;
kenjiArai 2:b96103f9270e 350 PRINTF( " 0x%04x",i );
kenjiArai 2:b96103f9270e 351 i = GPIOx->ODR;
kenjiArai 2:b96103f9270e 352 PRINTF( " 0x%04x",i );
kenjiArai 2:b96103f9270e 353 put_rn();
kenjiArai 2:b96103f9270e 354 }
kenjiArai 2:b96103f9270e 355
kenjiArai 2:b96103f9270e 356 void rpt_port( void )
kenjiArai 2:b96103f9270e 357 {
kenjiArai 2:b96103f9270e 358 PRINTF( pnmsg0 );
kenjiArai 2:b96103f9270e 359 PRINTF( pnmsg1 );
kenjiArai 2:b96103f9270e 360 put_rn();
kenjiArai 2:b96103f9270e 361 PRINTF( pnmsga );
kenjiArai 2:b96103f9270e 362 rpt_port_one( GPIOA );
kenjiArai 2:b96103f9270e 363 PRINTF( pnmsgb );
kenjiArai 2:b96103f9270e 364 rpt_port_one( GPIOB );
kenjiArai 2:b96103f9270e 365 PRINTF( pnmsgc );
kenjiArai 2:b96103f9270e 366 rpt_port_one( GPIOC );
kenjiArai 2:b96103f9270e 367 PRINTF( pnmsgd );
kenjiArai 2:b96103f9270e 368 rpt_port_one( GPIOD );
kenjiArai 2:b96103f9270e 369 PRINTF( pnmsge );
kenjiArai 2:b96103f9270e 370 rpt_port_one( GPIOE );
kenjiArai 2:b96103f9270e 371 PRINTF( pnmsgh );
kenjiArai 2:b96103f9270e 372 rpt_port_one( GPIOH );
kenjiArai 2:b96103f9270e 373 }
kenjiArai 2:b96103f9270e 374
kenjiArai 2:b96103f9270e 375 void port_inf_one( char *ptr )
kenjiArai 2:b96103f9270e 376 {
kenjiArai 2:b96103f9270e 377 GPIO_TypeDef* GPIOx;
kenjiArai 2:b96103f9270e 378 uint32_t i,j;
kenjiArai 2:b96103f9270e 379 uint32_t pinpos;
kenjiArai 2:b96103f9270e 380
kenjiArai 2:b96103f9270e 381 GPIOx = 0;
kenjiArai 2:b96103f9270e 382 PRINTF( pnmsg2 );
kenjiArai 2:b96103f9270e 383 switch ( *ptr ) {
kenjiArai 2:b96103f9270e 384 case 'a':
kenjiArai 2:b96103f9270e 385 GPIOx = GPIOA;
kenjiArai 2:b96103f9270e 386 PUTC( 'A' );
kenjiArai 2:b96103f9270e 387 break;
kenjiArai 2:b96103f9270e 388 case 'b':
kenjiArai 2:b96103f9270e 389 GPIOx = GPIOB;
kenjiArai 2:b96103f9270e 390 PUTC( 'B' );
kenjiArai 2:b96103f9270e 391 break;
kenjiArai 2:b96103f9270e 392 case 'c':
kenjiArai 2:b96103f9270e 393 GPIOx = GPIOC;
kenjiArai 2:b96103f9270e 394 PUTC( 'C' );
kenjiArai 2:b96103f9270e 395 break;
kenjiArai 2:b96103f9270e 396 case 'd':
kenjiArai 2:b96103f9270e 397 GPIOx = GPIOD;
kenjiArai 2:b96103f9270e 398 PUTC( 'D' );
kenjiArai 2:b96103f9270e 399 break;
kenjiArai 2:b96103f9270e 400 case 'e':
kenjiArai 2:b96103f9270e 401 GPIOx = GPIOE;
kenjiArai 2:b96103f9270e 402 PUTC( 'E' );
kenjiArai 2:b96103f9270e 403 break;
kenjiArai 2:b96103f9270e 404 case 'h':
kenjiArai 2:b96103f9270e 405 GPIOx = GPIOH;
kenjiArai 2:b96103f9270e 406 PUTC( 'H' );
kenjiArai 2:b96103f9270e 407 break;
kenjiArai 2:b96103f9270e 408 }
kenjiArai 2:b96103f9270e 409 i = GPIOx->MODER;
kenjiArai 2:b96103f9270e 410 put_rn();
kenjiArai 2:b96103f9270e 411 PRINTF( "-->Mode Reg. (0x%08x)",i );
kenjiArai 2:b96103f9270e 412 put_rn();
kenjiArai 2:b96103f9270e 413 for ( pinpos = 0x00; pinpos < 16; pinpos++ ) {
kenjiArai 2:b96103f9270e 414 j = GPIO_MODER_MODER0 & (i >> (pinpos * 2));
kenjiArai 2:b96103f9270e 415 switch (j) {
kenjiArai 2:b96103f9270e 416 case GPIO_Mode_IN:
kenjiArai 2:b96103f9270e 417 PRINTF( "%2d= in", pinpos );
kenjiArai 2:b96103f9270e 418 break;
kenjiArai 2:b96103f9270e 419 case GPIO_Mode_OUT:
kenjiArai 2:b96103f9270e 420 PRINTF( "%2d=out", pinpos );
kenjiArai 2:b96103f9270e 421 break;
kenjiArai 2:b96103f9270e 422 case GPIO_Mode_AF:
kenjiArai 2:b96103f9270e 423 PRINTF( "%2d=alt", pinpos );
kenjiArai 2:b96103f9270e 424 break;
kenjiArai 2:b96103f9270e 425 case GPIO_Mode_AN:
kenjiArai 2:b96103f9270e 426 PRINTF( "%2d=ana", pinpos );
kenjiArai 2:b96103f9270e 427 break;
kenjiArai 2:b96103f9270e 428 default:
kenjiArai 2:b96103f9270e 429 break;
kenjiArai 2:b96103f9270e 430 }
kenjiArai 2:b96103f9270e 431 if ( (pinpos == 3) && (*ptr == 'h') ) {
kenjiArai 2:b96103f9270e 432 break;
kenjiArai 2:b96103f9270e 433 } else {
kenjiArai 2:b96103f9270e 434 if ( pinpos == 7 ) {
kenjiArai 2:b96103f9270e 435 put_rn();
kenjiArai 2:b96103f9270e 436 } else if ( pinpos == 15 ) {
kenjiArai 2:b96103f9270e 437 ;
kenjiArai 2:b96103f9270e 438 } else {
kenjiArai 2:b96103f9270e 439 PRINTF(", ");
kenjiArai 2:b96103f9270e 440 }
kenjiArai 2:b96103f9270e 441 }
kenjiArai 2:b96103f9270e 442 }
kenjiArai 2:b96103f9270e 443 i = GPIOx->OTYPER;
kenjiArai 2:b96103f9270e 444 put_rn();
kenjiArai 2:b96103f9270e 445 PRINTF( "%s type 1=push-pull, 0= open-drain", pnmsg4 );
kenjiArai 2:b96103f9270e 446 put_rn();
kenjiArai 2:b96103f9270e 447 reg_print( SIZE32,i);
kenjiArai 2:b96103f9270e 448 i = GPIOx->OSPEEDR;
kenjiArai 2:b96103f9270e 449 PRINTF( "%s speed [MHz] (0x%08x)", pnmsg4, i );
kenjiArai 2:b96103f9270e 450 put_rn();
kenjiArai 2:b96103f9270e 451 for ( pinpos = 0x00; pinpos < 16; pinpos++ ) {
kenjiArai 2:b96103f9270e 452 j = GPIO_OSPEEDER_OSPEEDR0 & (i >> (pinpos * 2));
kenjiArai 2:b96103f9270e 453 switch (j) {
kenjiArai 2:b96103f9270e 454 case GPIO_Speed_400KHz:
kenjiArai 2:b96103f9270e 455 PRINTF( "%2d=0.4", pinpos );
kenjiArai 2:b96103f9270e 456 break;
kenjiArai 2:b96103f9270e 457 case GPIO_Speed_2MHz:
kenjiArai 2:b96103f9270e 458 PRINTF( "%2d= 2", pinpos );
kenjiArai 2:b96103f9270e 459 break;
kenjiArai 2:b96103f9270e 460 case GPIO_Speed_10MHz:
kenjiArai 2:b96103f9270e 461 PRINTF( "%2d= 10", pinpos );
kenjiArai 2:b96103f9270e 462 break;
kenjiArai 2:b96103f9270e 463 case GPIO_Speed_40MHz:
kenjiArai 2:b96103f9270e 464 PRINTF( "%2d= 40", pinpos );
kenjiArai 2:b96103f9270e 465 break;
kenjiArai 2:b96103f9270e 466 default:
kenjiArai 2:b96103f9270e 467 break;
kenjiArai 2:b96103f9270e 468 }
kenjiArai 2:b96103f9270e 469 if ( (pinpos == 3) && (*ptr == 'h') ) {
kenjiArai 2:b96103f9270e 470 break;
kenjiArai 2:b96103f9270e 471 } else {
kenjiArai 2:b96103f9270e 472 if ( pinpos == 7 ) {
kenjiArai 2:b96103f9270e 473 put_rn();
kenjiArai 2:b96103f9270e 474 } else if ( pinpos == 15) {
kenjiArai 2:b96103f9270e 475 ;
kenjiArai 2:b96103f9270e 476 } else {
kenjiArai 2:b96103f9270e 477 PRINTF(", ");
kenjiArai 2:b96103f9270e 478 }
kenjiArai 2:b96103f9270e 479 }
kenjiArai 2:b96103f9270e 480 }
kenjiArai 2:b96103f9270e 481 i = GPIOx->PUPDR;
kenjiArai 2:b96103f9270e 482 put_rn();
kenjiArai 2:b96103f9270e 483 PRINTF( "-->Pullup(pup)/down(pdn) none(no)(0x%08x)",i );
kenjiArai 2:b96103f9270e 484 put_rn();
kenjiArai 2:b96103f9270e 485 for ( pinpos = 0x00; pinpos < 16; pinpos++ ) {
kenjiArai 2:b96103f9270e 486 j = GPIO_PUPDR_PUPDR0 & (i >> (pinpos * 2));
kenjiArai 2:b96103f9270e 487 switch (j) {
kenjiArai 2:b96103f9270e 488 case GPIO_PuPd_NOPULL:
kenjiArai 2:b96103f9270e 489 PRINTF( "%2d= no", pinpos );
kenjiArai 2:b96103f9270e 490 break;
kenjiArai 2:b96103f9270e 491 case GPIO_PuPd_UP:
kenjiArai 2:b96103f9270e 492 PRINTF( "%2d=pup", pinpos );
kenjiArai 2:b96103f9270e 493 break;
kenjiArai 2:b96103f9270e 494 case GPIO_PuPd_DOWN:
kenjiArai 2:b96103f9270e 495 PRINTF( "%2d=pdn", pinpos );
kenjiArai 2:b96103f9270e 496 break;
kenjiArai 2:b96103f9270e 497 default:
kenjiArai 2:b96103f9270e 498 break;
kenjiArai 2:b96103f9270e 499 }
kenjiArai 2:b96103f9270e 500 if ( (pinpos == 3) && (*ptr == 'h') ) {
kenjiArai 2:b96103f9270e 501 break;
kenjiArai 2:b96103f9270e 502 } else {
kenjiArai 2:b96103f9270e 503 if ( pinpos == 7 ) {
kenjiArai 2:b96103f9270e 504 put_rn();
kenjiArai 2:b96103f9270e 505 } else if ( pinpos == 15 ) {
kenjiArai 2:b96103f9270e 506 ;
kenjiArai 2:b96103f9270e 507 } else {
kenjiArai 2:b96103f9270e 508 PRINTF(", ");
kenjiArai 2:b96103f9270e 509 }
kenjiArai 2:b96103f9270e 510 }
kenjiArai 2:b96103f9270e 511 }
kenjiArai 2:b96103f9270e 512 put_rn();
kenjiArai 2:b96103f9270e 513 PRINTF( "%s %s", pnmsg5, pnmsg6);
kenjiArai 2:b96103f9270e 514 i = GPIOx->IDR;
kenjiArai 2:b96103f9270e 515 reg_print( SIZE32,i);
kenjiArai 2:b96103f9270e 516 put_rn();
kenjiArai 2:b96103f9270e 517 PRINTF( "%s %s", pnmsg4, pnmsg6);
kenjiArai 2:b96103f9270e 518 i = GPIOx->ODR;
kenjiArai 2:b96103f9270e 519 reg_print( SIZE32,i);
kenjiArai 2:b96103f9270e 520 put_rn();
kenjiArai 2:b96103f9270e 521 }
kenjiArai 2:b96103f9270e 522 #endif // USE_PORT
kenjiArai 2:b96103f9270e 523
kenjiArai 2:b96103f9270e 524 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 525 void port_mco1_mco2_set(void)
kenjiArai 2:b96103f9270e 526 {
kenjiArai 2:b96103f9270e 527 GPIO_TypeDef* GPIOx = 0;
kenjiArai 2:b96103f9270e 528 uint32_t temp = 0x00;
kenjiArai 2:b96103f9270e 529
kenjiArai 2:b96103f9270e 530 // PA8 -> MCO_1
kenjiArai 2:b96103f9270e 531 GPIOx = GPIOA;
kenjiArai 2:b96103f9270e 532 reg_save0 = GPIOx->AFR[8 >> 3];
kenjiArai 2:b96103f9270e 533 reg_save1 = GPIOx->MODER;
kenjiArai 2:b96103f9270e 534 temp = ((uint32_t)(GPIO_AF0_MCO) << (((uint32_t)8 & (uint32_t)0x07) * 4)) ;
kenjiArai 2:b96103f9270e 535 GPIOx->AFR[8 >> 3] &= ~((uint32_t)0xf << ((uint32_t)(8 & (uint32_t)0x07) * 4)) ;
kenjiArai 2:b96103f9270e 536 GPIOx->AFR[8 >> 3] |= temp;
kenjiArai 2:b96103f9270e 537 GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (8 * 2));
kenjiArai 2:b96103f9270e 538 GPIOx->MODER |= (0x2 << (8 * 2));
kenjiArai 2:b96103f9270e 539 // PC9 -> MCO_2
kenjiArai 2:b96103f9270e 540 GPIOx = GPIOC;
kenjiArai 2:b96103f9270e 541 reg_save2 = GPIOx->AFR[9 >> 3];
kenjiArai 2:b96103f9270e 542 reg_save3 = GPIOx->MODER;
kenjiArai 2:b96103f9270e 543 temp = ((uint32_t)(GPIO_AF0_MCO) << (((uint32_t)9 & (uint32_t)0x07) * 4)) ;
kenjiArai 2:b96103f9270e 544 GPIOx->AFR[9 >> 3] &= ~((uint32_t)0xf << ((uint32_t)(9 & (uint32_t)0x07) * 4)) ;
kenjiArai 2:b96103f9270e 545 GPIOx->AFR[9 >> 3] |= temp;
kenjiArai 2:b96103f9270e 546 GPIOx->MODER &= ~(GPIO_MODER_MODER0 << (9 * 2));
kenjiArai 2:b96103f9270e 547 GPIOx->MODER |= (0x2 << (9 * 2));
kenjiArai 2:b96103f9270e 548 reg_save4 = RCC->CFGR;
kenjiArai 2:b96103f9270e 549 // Select output clock source
kenjiArai 2:b96103f9270e 550 RCC->CFGR &= 0x009fffff;
kenjiArai 2:b96103f9270e 551 #if 1
kenjiArai 2:b96103f9270e 552 // MC0_1 output HSE 1/4, MCO_2 output SYSCLK 1/4
kenjiArai 2:b96103f9270e 553 // MCO2 MCO2PRE MCO1PRE MCO1
kenjiArai 2:b96103f9270e 554 RCC->CFGR |= (0x0 << 30) + (0x6 << 27) + (0x6 << 24) + (0x3 << 22);
kenjiArai 2:b96103f9270e 555 #else
kenjiArai 2:b96103f9270e 556 // MC0_1 output HSE 1/1, MCO_2 output SYSCLK 1/2
kenjiArai 2:b96103f9270e 557 // MCO2 MCO2PRE MCO1PRE MCO1
kenjiArai 2:b96103f9270e 558 RCC->CFGR |= (0x0 << 30) + (0x4 << 27) + (0x0 << 24) + (0x3 << 22);
kenjiArai 2:b96103f9270e 559 #endif
kenjiArai 2:b96103f9270e 560 }
kenjiArai 2:b96103f9270e 561
kenjiArai 2:b96103f9270e 562 void port_mco1_mco2_recover(void)
kenjiArai 2:b96103f9270e 563 {
kenjiArai 2:b96103f9270e 564 GPIO_TypeDef* GPIOx = 0;
kenjiArai 2:b96103f9270e 565
kenjiArai 2:b96103f9270e 566 // PA8 -> MCO_1
kenjiArai 2:b96103f9270e 567 GPIOx = GPIOA;
kenjiArai 2:b96103f9270e 568 GPIOx->AFR[8 >> 3] = reg_save0;
kenjiArai 2:b96103f9270e 569 GPIOx->MODER = reg_save1;
kenjiArai 2:b96103f9270e 570 // PC9 -> MCO_2
kenjiArai 2:b96103f9270e 571 GPIOx = GPIOC;
kenjiArai 2:b96103f9270e 572 GPIOx->AFR[9 >> 3] = reg_save2;
kenjiArai 2:b96103f9270e 573 GPIOx->MODER = reg_save3;
kenjiArai 2:b96103f9270e 574 // MC0_1 & MCO_2
kenjiArai 2:b96103f9270e 575 RCC->CFGR = reg_save4;
kenjiArai 2:b96103f9270e 576 }
kenjiArai 2:b96103f9270e 577 #endif // defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 578
kenjiArai 2:b96103f9270e 579 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 580 void cpu_inf( char *ptr )
kenjiArai 2:b96103f9270e 581 {
kenjiArai 2:b96103f9270e 582 uint32_t m1 = 0, m2 = 0, m3 = 0, m4 = 0, m5 = 0;
kenjiArai 2:b96103f9270e 583
kenjiArai 2:b96103f9270e 584 switch (*ptr++) {
kenjiArai 2:b96103f9270e 585 case 'f' : // sc - show system clock frequency
kenjiArai 2:b96103f9270e 586 m1 = RCC->CR;
kenjiArai 2:b96103f9270e 587 PRINTF( "CR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 588 put_rn();
kenjiArai 2:b96103f9270e 589 m1 = RCC->PLLCFGR;
kenjiArai 2:b96103f9270e 590 PRINTF( "PLLCFGR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 591 put_rn();
kenjiArai 2:b96103f9270e 592 m1 = RCC->CFGR;
kenjiArai 2:b96103f9270e 593 PRINTF( "CFGR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 594 put_rn();
kenjiArai 2:b96103f9270e 595 m1 = RCC->CIR;
kenjiArai 2:b96103f9270e 596 PRINTF( "CIR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 597 put_rn();
kenjiArai 2:b96103f9270e 598 m1 = RCC->AHB1RSTR;
kenjiArai 2:b96103f9270e 599 PRINTF( "AHB1RSTR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 600 put_rn();
kenjiArai 2:b96103f9270e 601 m1 = RCC->APB2RSTR;
kenjiArai 2:b96103f9270e 602 PRINTF( "APB2RSTR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 603 put_rn();
kenjiArai 2:b96103f9270e 604 m1 = RCC->APB1RSTR;
kenjiArai 2:b96103f9270e 605 PRINTF( "APB1RSTR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 606 put_rn();
kenjiArai 2:b96103f9270e 607 m1 = RCC->AHB1ENR;
kenjiArai 2:b96103f9270e 608 PRINTF( "AHB1ENR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 609 put_rn();
kenjiArai 2:b96103f9270e 610 m1 = RCC->APB2ENR;
kenjiArai 2:b96103f9270e 611 PRINTF( "APB2ENR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 612 put_rn();
kenjiArai 2:b96103f9270e 613 m1 = RCC->APB2LPENR;
kenjiArai 2:b96103f9270e 614 PRINTF( "APB2LPENR= 0x%08x", m1 );
kenjiArai 2:b96103f9270e 615 put_rn();
kenjiArai 2:b96103f9270e 616 m1 = RCC->APB1LPENR;
kenjiArai 2:b96103f9270e 617 PRINTF( "APB1LPENR= 0x%08x", m1 );
kenjiArai 2:b96103f9270e 618 put_rn();
kenjiArai 2:b96103f9270e 619 m1 = RCC->CSR;
kenjiArai 2:b96103f9270e 620 PRINTF( "CSR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 621 put_rn();
kenjiArai 2:b96103f9270e 622 PRINTF(cmsg11);
kenjiArai 2:b96103f9270e 623 put_rn();
kenjiArai 2:b96103f9270e 624 m1 = PWR->CR;
kenjiArai 2:b96103f9270e 625 PRINTF( "CR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 626 put_rn();
kenjiArai 2:b96103f9270e 627 m1 = PWR->CSR;
kenjiArai 2:b96103f9270e 628 PRINTF( "CSR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 629 put_rn();
kenjiArai 2:b96103f9270e 630 put_rn();
kenjiArai 2:b96103f9270e 631 case 'F' : // sF - show system clock frequency
kenjiArai 2:b96103f9270e 632 m1 = RCC->CFGR & RCC_CFGR_SWS; /* Get SYSCLK source */
kenjiArai 2:b96103f9270e 633 switch (m1) {
kenjiArai 2:b96103f9270e 634 case 0x00: // HSI used as system clock
kenjiArai 2:b96103f9270e 635 PRINTF( "%s, %s%dHz", cmsg2, cmsg1,HSI_VALUE );
kenjiArai 2:b96103f9270e 636 m2 = HSI_VALUE;
kenjiArai 2:b96103f9270e 637 break;
kenjiArai 2:b96103f9270e 638 case 0x04: // HSE used as system clock
kenjiArai 2:b96103f9270e 639 PRINTF( "%s, %s%dHz", cmsg3, cmsg1, HSE_VALUE );
kenjiArai 2:b96103f9270e 640 m2 = HSE_VALUE;
kenjiArai 2:b96103f9270e 641 break;
kenjiArai 2:b96103f9270e 642 case 0x08: // PLL used as system clock
kenjiArai 2:b96103f9270e 643 PRINTF("fVCO = fPLL-in x (PLLN/PLLM), fPLL-out = fVCO/PLLP, fUSB-out = fVCO/PLLQ");
kenjiArai 2:b96103f9270e 644 put_rn();
kenjiArai 2:b96103f9270e 645 m5 = (RCC->PLLCFGR >> 6) & 0x1ff; // PLLN
kenjiArai 2:b96103f9270e 646 m1 = RCC->PLLCFGR & 0x3f; // PLLM
kenjiArai 2:b96103f9270e 647 PRINTF( "%s PLLN=%d, PLLM=%d", cmsg4, m5, m1 );
kenjiArai 2:b96103f9270e 648 put_rn();
kenjiArai 2:b96103f9270e 649 m3 = (RCC->PLLCFGR >> 22) & 0x1; // Clock source
kenjiArai 2:b96103f9270e 650 if (m3 == 0) {
kenjiArai 2:b96103f9270e 651 // HSI oscillator clock selected as PLL clock source
kenjiArai 2:b96103f9270e 652 m2 = (HSI_VALUE * (m5 / m1));
kenjiArai 2:b96103f9270e 653 PRINTF( "%s, RC=%dHz", cmsg2, HSI_VALUE );
kenjiArai 2:b96103f9270e 654 } else {
kenjiArai 2:b96103f9270e 655 // HSE selected
kenjiArai 2:b96103f9270e 656 m2 = (((HSE_VALUE) * m5) / m1);
kenjiArai 2:b96103f9270e 657 if ((RCC->CR >> 18) & 0x01) { // check HSEBYP bit
kenjiArai 2:b96103f9270e 658 // HSE(not Xtal) selected as PLL clock source
kenjiArai 2:b96103f9270e 659 PRINTF( "Use HSE(not Xtal but External Clock)=%dHz", HSE_VALUE );
kenjiArai 2:b96103f9270e 660 } else {
kenjiArai 2:b96103f9270e 661 // HSE(Xtal) selected as PLL clock source
kenjiArai 2:b96103f9270e 662 PRINTF( "%s, Xtal=%dHz", cmsg3, HSE_VALUE );
kenjiArai 2:b96103f9270e 663 }
kenjiArai 2:b96103f9270e 664 }
kenjiArai 2:b96103f9270e 665 put_rn();
kenjiArai 2:b96103f9270e 666 PRINTF("PLL/Base %s%dHz", cmsg1, m2);
kenjiArai 2:b96103f9270e 667 put_rn();
kenjiArai 2:b96103f9270e 668 m3 = (RCC->PLLCFGR >> 16) & 0x03; // PLLP
kenjiArai 2:b96103f9270e 669 switch (m3) {
kenjiArai 2:b96103f9270e 670 case 0:
kenjiArai 2:b96103f9270e 671 m3 = 2;
kenjiArai 2:b96103f9270e 672 break;
kenjiArai 2:b96103f9270e 673 case 1:
kenjiArai 2:b96103f9270e 674 m3 = 4;
kenjiArai 2:b96103f9270e 675 break;
kenjiArai 2:b96103f9270e 676 case 2:
kenjiArai 2:b96103f9270e 677 m3 = 6;
kenjiArai 2:b96103f9270e 678 break;
kenjiArai 2:b96103f9270e 679 case 3:
kenjiArai 2:b96103f9270e 680 m3 = 8;
kenjiArai 2:b96103f9270e 681 break;
kenjiArai 2:b96103f9270e 682 }
kenjiArai 2:b96103f9270e 683 m4 = (RCC->PLLCFGR >> 24) & 0x0f; // PLLQ
kenjiArai 2:b96103f9270e 684 PRINTF("%s PLLP=%d, PLLQ=%d", cmsg4, m3, m4);
kenjiArai 2:b96103f9270e 685 put_rn();
kenjiArai 2:b96103f9270e 686 PRINTF("PLL/System %s%dHz", cmsg1, m2/m3);
kenjiArai 2:b96103f9270e 687 put_rn();
kenjiArai 2:b96103f9270e 688 PRINTF("PLL/USB %s%dHz", cmsg1, m2/m4);
kenjiArai 2:b96103f9270e 689 m2 = m2/m4;
kenjiArai 2:b96103f9270e 690 if ((m2 > USB_FREQ_H) || (m2 <USB_FREQ_L)) {
kenjiArai 2:b96103f9270e 691 PRINTF(" -> USB Freq. is out of range!");
kenjiArai 2:b96103f9270e 692 }
kenjiArai 2:b96103f9270e 693 put_rn();
kenjiArai 2:b96103f9270e 694 break;
kenjiArai 2:b96103f9270e 695 default: // Not come here
kenjiArai 2:b96103f9270e 696 PRINTF( cmsg5 );
kenjiArai 2:b96103f9270e 697 break;
kenjiArai 2:b96103f9270e 698 }
kenjiArai 2:b96103f9270e 699 put_rn();
kenjiArai 2:b96103f9270e 700 PRINTF( "SYSCLK %s%dHz", cmsg6, HAL_RCC_GetSysClockFreq());
kenjiArai 2:b96103f9270e 701 put_rn();
kenjiArai 2:b96103f9270e 702 PRINTF( "HCLK %s%dHz", cmsg6, HAL_RCC_GetHCLKFreq());
kenjiArai 2:b96103f9270e 703 put_rn();
kenjiArai 2:b96103f9270e 704 PRINTF( "PCLK1 %s%dHz", cmsg6, HAL_RCC_GetPCLK1Freq());
kenjiArai 2:b96103f9270e 705 put_rn();
kenjiArai 2:b96103f9270e 706 PRINTF( "PCLK2 %s%dHz", cmsg6, HAL_RCC_GetPCLK2Freq());
kenjiArai 2:b96103f9270e 707 put_rn();
kenjiArai 2:b96103f9270e 708 put_rn();
kenjiArai 2:b96103f9270e 709 // Check RTC Clock
kenjiArai 2:b96103f9270e 710 PRINTF("RTC Clock");
kenjiArai 2:b96103f9270e 711 put_rn();
kenjiArai 2:b96103f9270e 712 m1 = (RCC->BDCR >> 8) & 0x03;
kenjiArai 2:b96103f9270e 713 switch (m1) {
kenjiArai 2:b96103f9270e 714 case 0: // no clock
kenjiArai 2:b96103f9270e 715 PRINTF(cmsg7);
kenjiArai 2:b96103f9270e 716 break;
kenjiArai 2:b96103f9270e 717 case 1: // LSE
kenjiArai 2:b96103f9270e 718 PRINTF(cmsg8);
kenjiArai 2:b96103f9270e 719 break;
kenjiArai 2:b96103f9270e 720 case 2: // LSI
kenjiArai 2:b96103f9270e 721 PRINTF("%s 17 to 47, typ.32KHz", cmsg9);
kenjiArai 2:b96103f9270e 722 break;
kenjiArai 2:b96103f9270e 723 case 3: // HSE
kenjiArai 2:b96103f9270e 724 PRINTF( cmsg10 );
kenjiArai 2:b96103f9270e 725 m2 = (RCC->PLLCFGR >> 16) & 0x1f; // RTCPRE
kenjiArai 2:b96103f9270e 726 m3 = HSE_VALUE / m2;
kenjiArai 2:b96103f9270e 727 PRINTF("%s%dHz", cmsg6, m3);
kenjiArai 2:b96103f9270e 728 put_rn();
kenjiArai 2:b96103f9270e 729 break;
kenjiArai 2:b96103f9270e 730 default: // Not come here
kenjiArai 2:b96103f9270e 731 PRINTF(cmsg5);
kenjiArai 2:b96103f9270e 732 break;
kenjiArai 2:b96103f9270e 733 }
kenjiArai 2:b96103f9270e 734 put_rn();
kenjiArai 2:b96103f9270e 735 put_rn();
kenjiArai 2:b96103f9270e 736 break;
kenjiArai 2:b96103f9270e 737 case 'c' : // sc - show system CPU information
kenjiArai 2:b96103f9270e 738 m1 = SCB->CPUID;
kenjiArai 2:b96103f9270e 739 m2 = ( m1 >> 24 );
kenjiArai 2:b96103f9270e 740 if ( m2 == 0x41 ) {
kenjiArai 2:b96103f9270e 741 PRINTF( "CPU = ARM " );
kenjiArai 2:b96103f9270e 742 } else {
kenjiArai 2:b96103f9270e 743 PRINTF( "CPU = NOT ARM " );
kenjiArai 2:b96103f9270e 744 }
kenjiArai 2:b96103f9270e 745 m2 = ( m1 >> 4 ) & 0xfff;
kenjiArai 2:b96103f9270e 746 if ( m2 == 0xc24 ) {
kenjiArai 2:b96103f9270e 747 PRINTF( "Cortex-M4" );
kenjiArai 2:b96103f9270e 748 } else {
kenjiArai 2:b96103f9270e 749 PRINTF( "NOT Cortex-M4" );
kenjiArai 2:b96103f9270e 750 }
kenjiArai 2:b96103f9270e 751 put_rn();
kenjiArai 2:b96103f9270e 752 m2 = ( m1 >> 20 ) & 0x0f;
kenjiArai 2:b96103f9270e 753 PRINTF( "Variant:%x", m2 );
kenjiArai 2:b96103f9270e 754 put_rn();
kenjiArai 2:b96103f9270e 755 m2 = m1 & 0x7;
kenjiArai 2:b96103f9270e 756 PRINTF( "Revision:%x", m2 );
kenjiArai 2:b96103f9270e 757 put_rn();
kenjiArai 2:b96103f9270e 758 PRINTF( "CPU ID: 0x%08x", m1 );
kenjiArai 2:b96103f9270e 759 put_rn();
kenjiArai 2:b96103f9270e 760 m1 = DBGMCU->IDCODE;
kenjiArai 2:b96103f9270e 761 PRINTF( "DBG ID: 0x%08x", m1 );
kenjiArai 2:b96103f9270e 762 put_rn();
kenjiArai 2:b96103f9270e 763 // unique ID
kenjiArai 2:b96103f9270e 764 // http://waijung.aimagin.com/index.htm?stm32f4_uidread.htm
kenjiArai 2:b96103f9270e 765 m1 = *(__IO uint32_t *)((uint32_t)0x1FFF7A10);
kenjiArai 2:b96103f9270e 766 PRINTF("Unique device ID(94bits):(1) 0x%08x ", m1);
kenjiArai 2:b96103f9270e 767 m1 = *(__IO uint32_t *)((uint32_t)0x1FFF7A14);
kenjiArai 2:b96103f9270e 768 PRINTF("(2) 0x%08x ", m1);
kenjiArai 2:b96103f9270e 769 m1 = *(__IO uint32_t *)((uint32_t)0x1FFF7A18);
kenjiArai 2:b96103f9270e 770 PRINTF( "(3) 0x%08x", m1 );
kenjiArai 2:b96103f9270e 771 put_rn();
kenjiArai 2:b96103f9270e 772 break;
kenjiArai 2:b96103f9270e 773 case '?' :
kenjiArai 2:b96103f9270e 774 default:
kenjiArai 2:b96103f9270e 775 PRINTF( "sc - System CPU information" );
kenjiArai 2:b96103f9270e 776 put_rn();
kenjiArai 2:b96103f9270e 777 PRINTF( "sf - System Clock" );
kenjiArai 2:b96103f9270e 778 put_rn();
kenjiArai 2:b96103f9270e 779 }
kenjiArai 2:b96103f9270e 780 }
kenjiArai 2:b96103f9270e 781 #elif defined(TARGET_NUCLEO_L152RE)
kenjiArai 2:b96103f9270e 782
kenjiArai 2:b96103f9270e 783 static __I uint8_t PLLMulTable[9] = {3, 4, 6, 8, 12, 16, 24, 32, 48};
kenjiArai 2:b96103f9270e 784
kenjiArai 2:b96103f9270e 785 void cpu_inf( char *ptr )
kenjiArai 2:b96103f9270e 786 {
kenjiArai 2:b96103f9270e 787 uint32_t m1, m2, m3, m4, m5;
kenjiArai 2:b96103f9270e 788
kenjiArai 2:b96103f9270e 789 switch (*ptr++) {
kenjiArai 2:b96103f9270e 790 case 'f' : // sc - show system clock frequency
kenjiArai 2:b96103f9270e 791 m1 = RCC->CR;
kenjiArai 2:b96103f9270e 792 PRINTF( "CR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 793 put_rn();
kenjiArai 2:b96103f9270e 794 m1 = RCC->ICSCR;
kenjiArai 2:b96103f9270e 795 PRINTF( "ICSCR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 796 put_rn();
kenjiArai 2:b96103f9270e 797 m1 = RCC->CFGR;
kenjiArai 2:b96103f9270e 798 PRINTF( "CFGR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 799 put_rn();
kenjiArai 2:b96103f9270e 800 m1 = RCC->CIR;
kenjiArai 2:b96103f9270e 801 PRINTF( "CIR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 802 put_rn();
kenjiArai 2:b96103f9270e 803 m1 = RCC->AHBRSTR;
kenjiArai 2:b96103f9270e 804 PRINTF( "AHBRSTR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 805 put_rn();
kenjiArai 2:b96103f9270e 806 m1 = RCC->APB2RSTR;
kenjiArai 2:b96103f9270e 807 PRINTF( "APB2RSTR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 808 put_rn();
kenjiArai 2:b96103f9270e 809 m1 = RCC->APB1RSTR;
kenjiArai 2:b96103f9270e 810 PRINTF( "APB1RSTR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 811 put_rn();
kenjiArai 2:b96103f9270e 812 m1 = RCC->AHBENR;
kenjiArai 2:b96103f9270e 813 PRINTF( "AHBENR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 814 put_rn();
kenjiArai 2:b96103f9270e 815 m1 = RCC->APB2ENR;
kenjiArai 2:b96103f9270e 816 PRINTF( "APB2ENR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 817 put_rn();
kenjiArai 2:b96103f9270e 818 m1 = RCC->APB2LPENR;
kenjiArai 2:b96103f9270e 819 PRINTF( "APB2LPENR= 0x%08x", m1 );
kenjiArai 2:b96103f9270e 820 put_rn();
kenjiArai 2:b96103f9270e 821 m1 = RCC->APB1LPENR;
kenjiArai 2:b96103f9270e 822 PRINTF( "APB1LPENR= 0x%08x", m1 );
kenjiArai 2:b96103f9270e 823 put_rn();
kenjiArai 2:b96103f9270e 824 m1 = RCC->CSR;
kenjiArai 2:b96103f9270e 825 PRINTF( "CSR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 826 put_rn();
kenjiArai 2:b96103f9270e 827 PRINTF( cmsg11 );
kenjiArai 2:b96103f9270e 828 put_rn();
kenjiArai 2:b96103f9270e 829 m1 = PWR->CR;
kenjiArai 2:b96103f9270e 830 PRINTF( "CR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 831 put_rn();
kenjiArai 2:b96103f9270e 832 m1 = PWR->CSR;
kenjiArai 2:b96103f9270e 833 PRINTF( "CSR = 0x%08x", m1 );
kenjiArai 2:b96103f9270e 834 put_rn();
kenjiArai 2:b96103f9270e 835 put_rn();
kenjiArai 2:b96103f9270e 836 case 'F' : // sF - show system clock frequency
kenjiArai 2:b96103f9270e 837 m1 = RCC->CFGR & RCC_CFGR_SWS; /* Get SYSCLK source */
kenjiArai 2:b96103f9270e 838 switch (m1) {
kenjiArai 2:b96103f9270e 839 case 0x00: // MSI used as system clock
kenjiArai 2:b96103f9270e 840 m4 = ( RCC->ICSCR & RCC_ICSCR_MSIRANGE ) >> 13;
kenjiArai 2:b96103f9270e 841 m2 = (32768 * (1 << (m4 + 1)));
kenjiArai 2:b96103f9270e 842 PRINTF( "%s, %s%dHz", cmsg0, cmsg1, m2);
kenjiArai 2:b96103f9270e 843 break;
kenjiArai 2:b96103f9270e 844 case 0x04: // HSI used as system clock
kenjiArai 2:b96103f9270e 845 PRINTF( "%s, %s%dHz", cmsg2, cmsg1,HSI_VALUE );
kenjiArai 2:b96103f9270e 846 m2 = HSI_VALUE;
kenjiArai 2:b96103f9270e 847 break;
kenjiArai 2:b96103f9270e 848 case 0x08: // HSE used as system clock
kenjiArai 2:b96103f9270e 849 PRINTF( "%s, %s%dHz", cmsg3, cmsg1, HSE_VALUE );
kenjiArai 2:b96103f9270e 850 m2 = HSE_VALUE;
kenjiArai 2:b96103f9270e 851 break;
kenjiArai 2:b96103f9270e 852 case 0x0C: // PLL used as system clock
kenjiArai 2:b96103f9270e 853 // Get PLL clock source and multiplication factor
kenjiArai 2:b96103f9270e 854 m5 = RCC->CFGR & RCC_CFGR_PLLMUL;
kenjiArai 2:b96103f9270e 855 m1 = RCC->CFGR & RCC_CFGR_PLLDIV;
kenjiArai 2:b96103f9270e 856 m5 = PLLMulTable[(m5 >> 18)];
kenjiArai 2:b96103f9270e 857 m1 = (m1 >> 22) + 1;
kenjiArai 2:b96103f9270e 858 PRINTF( "%s Mul=%d, Div=%d", cmsg4, m5, m1 );
kenjiArai 2:b96103f9270e 859 put_rn();
kenjiArai 2:b96103f9270e 860 m3 = RCC->CFGR & RCC_CFGR_PLLSRC;
kenjiArai 2:b96103f9270e 861 if ( m3 == 0x00 ) {
kenjiArai 2:b96103f9270e 862 // HSI oscillator clock selected as PLL clock source
kenjiArai 2:b96103f9270e 863 m2 = (((HSI_VALUE) * m5) / m1);
kenjiArai 2:b96103f9270e 864 PRINTF( "%s, RC=%dHz", cmsg2, HSI_VALUE );
kenjiArai 2:b96103f9270e 865 } else {
kenjiArai 2:b96103f9270e 866 // HSE selected
kenjiArai 2:b96103f9270e 867 m2 = (((HSE_VALUE) * m5) / m1);
kenjiArai 2:b96103f9270e 868 if ((RCC->CR >> 18) & 0x01) { // check HSEBYP bit
kenjiArai 2:b96103f9270e 869 // HSE(not Xtal) selected as PLL clock source
kenjiArai 2:b96103f9270e 870 PRINTF( "Use HSE(not Xtal but External Clock)=%dHz", HSE_VALUE );
kenjiArai 2:b96103f9270e 871 } else {
kenjiArai 2:b96103f9270e 872 // HSE(Xtal) selected as PLL clock source
kenjiArai 2:b96103f9270e 873 PRINTF( "%s, Xtal=%dHz", cmsg3, HSE_VALUE );
kenjiArai 2:b96103f9270e 874 }
kenjiArai 2:b96103f9270e 875 }
kenjiArai 2:b96103f9270e 876 put_rn();
kenjiArai 2:b96103f9270e 877 PRINTF( "PLL %s%dHz", cmsg1, m2 );
kenjiArai 2:b96103f9270e 878 put_rn();
kenjiArai 2:b96103f9270e 879 break;
kenjiArai 2:b96103f9270e 880 default: // Not come here
kenjiArai 2:b96103f9270e 881 PRINTF( cmsg5 );
kenjiArai 2:b96103f9270e 882 break;
kenjiArai 2:b96103f9270e 883 }
kenjiArai 2:b96103f9270e 884 put_rn();
kenjiArai 2:b96103f9270e 885 PRINTF( "SYSCLK %s%dHz", cmsg6, HAL_RCC_GetSysClockFreq() );
kenjiArai 2:b96103f9270e 886 put_rn();
kenjiArai 2:b96103f9270e 887 PRINTF( "HCLK %s%dHz", cmsg6, HAL_RCC_GetHCLKFreq() );
kenjiArai 2:b96103f9270e 888 put_rn();
kenjiArai 2:b96103f9270e 889 PRINTF( "PCLK1 %s%dHz", cmsg6, HAL_RCC_GetPCLK1Freq() );
kenjiArai 2:b96103f9270e 890 put_rn();
kenjiArai 2:b96103f9270e 891 PRINTF( "PCLK2 %s%dHz", cmsg6, HAL_RCC_GetPCLK2Freq() );
kenjiArai 2:b96103f9270e 892 put_rn();
kenjiArai 2:b96103f9270e 893 put_rn();
kenjiArai 2:b96103f9270e 894 m1 = RCC->CSR & RCC_CSR_RTCSEL;
kenjiArai 2:b96103f9270e 895 // Check RTC & LCD Clock
kenjiArai 2:b96103f9270e 896 PRINTF("RTC/LCD Clock");
kenjiArai 2:b96103f9270e 897 put_rn();
kenjiArai 2:b96103f9270e 898 switch (m1) {
kenjiArai 2:b96103f9270e 899 case RCC_CSR_RTCSEL_NOCLOCK:
kenjiArai 2:b96103f9270e 900 PRINTF( cmsg7 );
kenjiArai 2:b96103f9270e 901 break;
kenjiArai 2:b96103f9270e 902 case RCC_CSR_RTCSEL_LSE:
kenjiArai 2:b96103f9270e 903 PRINTF( cmsg8 );
kenjiArai 2:b96103f9270e 904 break;
kenjiArai 2:b96103f9270e 905 case RCC_CSR_RTCSEL_LSI:
kenjiArai 2:b96103f9270e 906 PRINTF("%s 26 to 56, typ.38KHz", cmsg9);
kenjiArai 2:b96103f9270e 907 break;
kenjiArai 2:b96103f9270e 908 case RCC_CSR_RTCSEL_HSE:
kenjiArai 2:b96103f9270e 909 PRINTF( cmsg10 );
kenjiArai 2:b96103f9270e 910 break;
kenjiArai 2:b96103f9270e 911 default: // Not come here
kenjiArai 2:b96103f9270e 912 PRINTF( cmsg5 );
kenjiArai 2:b96103f9270e 913 break;
kenjiArai 2:b96103f9270e 914 }
kenjiArai 2:b96103f9270e 915 put_rn();
kenjiArai 2:b96103f9270e 916 put_rn();
kenjiArai 2:b96103f9270e 917 break;
kenjiArai 2:b96103f9270e 918 case 'c' : // sc - show system CPU information
kenjiArai 2:b96103f9270e 919 m1 = SCB->CPUID;
kenjiArai 2:b96103f9270e 920 m2 = ( m1 >> 24 );
kenjiArai 2:b96103f9270e 921 if ( m2 == 0x41 ) {
kenjiArai 2:b96103f9270e 922 PRINTF( "CPU = ARM " );
kenjiArai 2:b96103f9270e 923 } else {
kenjiArai 2:b96103f9270e 924 PRINTF( "CPU = NOT ARM " );
kenjiArai 2:b96103f9270e 925 }
kenjiArai 2:b96103f9270e 926 m2 = ( m1 >> 4 ) & 0xfff;
kenjiArai 2:b96103f9270e 927 if ( m2 == 0xc23 ) {
kenjiArai 2:b96103f9270e 928 PRINTF( "Cortex-M3" );
kenjiArai 2:b96103f9270e 929 } else {
kenjiArai 2:b96103f9270e 930 PRINTF( "NOT Cortex-M3" );
kenjiArai 2:b96103f9270e 931 }
kenjiArai 2:b96103f9270e 932 put_rn();
kenjiArai 2:b96103f9270e 933 m2 = ( m1 >> 20 ) & 0x0f;
kenjiArai 2:b96103f9270e 934 PRINTF( "Variant:%x", m2 );
kenjiArai 2:b96103f9270e 935 put_rn();
kenjiArai 2:b96103f9270e 936 m2 = m1 & 0x7;
kenjiArai 2:b96103f9270e 937 PRINTF( "Revision:%x", m2 );
kenjiArai 2:b96103f9270e 938 put_rn();
kenjiArai 2:b96103f9270e 939 PRINTF( "CPU ID: 0x%08x", m1 );
kenjiArai 2:b96103f9270e 940 put_rn();
kenjiArai 2:b96103f9270e 941 m1 = DBGMCU->IDCODE;
kenjiArai 2:b96103f9270e 942 PRINTF( "DBG ID: 0x%08x", m1 );
kenjiArai 2:b96103f9270e 943 put_rn();
kenjiArai 2:b96103f9270e 944 // unique ID
kenjiArai 2:b96103f9270e 945 // http://false.ekta.is/2013/09/stm32-unique-id-register-not-so-unique/
kenjiArai 2:b96103f9270e 946 m1 = *(__IO uint32_t *)((uint32_t)0x1FF80050);
kenjiArai 2:b96103f9270e 947 PRINTF("Unique device ID(94bits):(1) 0x%08x ", m1);
kenjiArai 2:b96103f9270e 948 m1 = *(__IO uint32_t *)((uint32_t)0x1FF80054);
kenjiArai 2:b96103f9270e 949 PRINTF("(2) 0x%08x ", m1);
kenjiArai 2:b96103f9270e 950 m1 = *(__IO uint32_t *)((uint32_t)0x1FF80058);
kenjiArai 2:b96103f9270e 951 PRINTF( "(3) 0x%08x", m1 );
kenjiArai 2:b96103f9270e 952 put_rn();
kenjiArai 2:b96103f9270e 953 break;
kenjiArai 2:b96103f9270e 954 case '?' :
kenjiArai 2:b96103f9270e 955 default:
kenjiArai 2:b96103f9270e 956 PRINTF( "sc - System CPU information" );
kenjiArai 2:b96103f9270e 957 put_rn();
kenjiArai 2:b96103f9270e 958 PRINTF( "sf - System Clock" );
kenjiArai 2:b96103f9270e 959 put_rn();
kenjiArai 2:b96103f9270e 960 }
kenjiArai 2:b96103f9270e 961 }
kenjiArai 2:b96103f9270e 962 #endif // Select CPU
kenjiArai 2:b96103f9270e 963
kenjiArai 2:b96103f9270e 964 //-------------------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 965 // Monitor Main Program
kenjiArai 2:b96103f9270e 966 //-------------------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 967 int mon_hw(void)
kenjiArai 2:b96103f9270e 968 {
kenjiArai 2:b96103f9270e 969 char *ptr;
kenjiArai 2:b96103f9270e 970
kenjiArai 2:b96103f9270e 971 put_r();
kenjiArai 2:b96103f9270e 972 PRINTF("%s [Help:'?' key]", mon_msg);
kenjiArai 2:b96103f9270e 973 put_rn();
kenjiArai 2:b96103f9270e 974 for (;;) {
kenjiArai 2:b96103f9270e 975 put_r();
kenjiArai 2:b96103f9270e 976 PUTC('>');
kenjiArai 2:b96103f9270e 977 ptr = linebuf;
kenjiArai 2:b96103f9270e 978 get_line(ptr, buf_size);
kenjiArai 2:b96103f9270e 979 put_r();
kenjiArai 2:b96103f9270e 980 switch (*ptr++) {
kenjiArai 2:b96103f9270e 981 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 982 // Memory
kenjiArai 2:b96103f9270e 983 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 984 case 'm' :
kenjiArai 2:b96103f9270e 985 #if USE_MEM
kenjiArai 2:b96103f9270e 986 mem_inf(ptr);
kenjiArai 2:b96103f9270e 987 put_rn();
kenjiArai 2:b96103f9270e 988 #else
kenjiArai 2:b96103f9270e 989 not_select();
kenjiArai 2:b96103f9270e 990 #endif // USE_MEM
kenjiArai 2:b96103f9270e 991 break;
kenjiArai 2:b96103f9270e 992 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 993 // Register
kenjiArai 2:b96103f9270e 994 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 995 case 'r' :
kenjiArai 2:b96103f9270e 996 put_r();
kenjiArai 2:b96103f9270e 997 PRINTF(mrmsg0);
kenjiArai 2:b96103f9270e 998 put_rn();
kenjiArai 2:b96103f9270e 999 quitflag = 0;
kenjiArai 2:b96103f9270e 1000 for (; quitflag != 0xff;) {
kenjiArai 2:b96103f9270e 1001 PRINTF("r>");
kenjiArai 2:b96103f9270e 1002 ptr = linebuf;
kenjiArai 2:b96103f9270e 1003 get_line(ptr, buf_size);
kenjiArai 2:b96103f9270e 1004 put_r();
kenjiArai 2:b96103f9270e 1005 switch(*ptr++) {
kenjiArai 2:b96103f9270e 1006 case 'u' :
kenjiArai 2:b96103f9270e 1007 #if USE_UART
kenjiArai 2:b96103f9270e 1008 switch(*ptr++) {
kenjiArai 2:b96103f9270e 1009 case '1' :
kenjiArai 2:b96103f9270e 1010 PRINTF("%s%s1%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1011 usart_reg(USART1);
kenjiArai 2:b96103f9270e 1012 break;
kenjiArai 2:b96103f9270e 1013 case '2' :
kenjiArai 2:b96103f9270e 1014 PRINTF("%s%s2%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1015 usart_reg(USART2);
kenjiArai 2:b96103f9270e 1016 break;
kenjiArai 2:b96103f9270e 1017 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 1018 case '6' :
kenjiArai 2:b96103f9270e 1019 PRINTF("%s%s6%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1020 usart_reg(USART6);
kenjiArai 2:b96103f9270e 1021 break;
kenjiArai 2:b96103f9270e 1022 #elif defined(TARGET_NUCLEO_L152RE)
kenjiArai 2:b96103f9270e 1023 case '3' :
kenjiArai 2:b96103f9270e 1024 PRINTF("%s%s3%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1025 usart_reg(USART3);
kenjiArai 2:b96103f9270e 1026 break;
kenjiArai 2:b96103f9270e 1027 case '5' :
kenjiArai 2:b96103f9270e 1028 PRINTF("%s%s5%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1029 usart_reg(UART5);
kenjiArai 2:b96103f9270e 1030 break;
kenjiArai 2:b96103f9270e 1031 #endif
kenjiArai 2:b96103f9270e 1032 case '*' :
kenjiArai 2:b96103f9270e 1033 PRINTF( "%s & UART", mrmsg2 );
kenjiArai 2:b96103f9270e 1034 put_rn();
kenjiArai 2:b96103f9270e 1035 PRINTF("%s%s1%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1036 usart_reg(USART1);
kenjiArai 2:b96103f9270e 1037 PRINTF("%s%s2%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1038 usart_reg(USART2);
kenjiArai 2:b96103f9270e 1039 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 1040 PRINTF("%s%s6%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1041 usart_reg(USART6);
kenjiArai 2:b96103f9270e 1042 #elif defined(TARGET_NUCLEO_L152RE)
kenjiArai 2:b96103f9270e 1043 PRINTF("%s%s3%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1044 usart_reg(USART3);
kenjiArai 2:b96103f9270e 1045 PRINTF("%s%s5%s", mrmsg1,mrmsg2,mrmsg1);
kenjiArai 2:b96103f9270e 1046 usart_reg(UART5);
kenjiArai 2:b96103f9270e 1047 #endif
kenjiArai 2:b96103f9270e 1048 break;
kenjiArai 2:b96103f9270e 1049 case '?' :
kenjiArai 2:b96103f9270e 1050 default:
kenjiArai 2:b96103f9270e 1051 PRINTF( mrmsg3 );
kenjiArai 2:b96103f9270e 1052 put_rn();
kenjiArai 2:b96103f9270e 1053 }
kenjiArai 2:b96103f9270e 1054 #else
kenjiArai 2:b96103f9270e 1055 not_select();
kenjiArai 2:b96103f9270e 1056 #endif // USE_UART
kenjiArai 2:b96103f9270e 1057 break;
kenjiArai 2:b96103f9270e 1058 case 'i' :
kenjiArai 2:b96103f9270e 1059 #if USE_I2C
kenjiArai 2:b96103f9270e 1060 switch(*ptr++) {
kenjiArai 2:b96103f9270e 1061 case '1' :
kenjiArai 2:b96103f9270e 1062 PRINTF("%s%s1%s", mrmsg1,mrmsg4,mrmsg1);
kenjiArai 2:b96103f9270e 1063 i2c_reg( I2C1 );
kenjiArai 2:b96103f9270e 1064 break;
kenjiArai 2:b96103f9270e 1065 case '2' :
kenjiArai 2:b96103f9270e 1066 PRINTF("%s%s2%s", mrmsg1,mrmsg4,mrmsg1);;
kenjiArai 2:b96103f9270e 1067 i2c_reg( I2C2 );
kenjiArai 2:b96103f9270e 1068 break;
kenjiArai 2:b96103f9270e 1069 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 1070 case '3' :
kenjiArai 2:b96103f9270e 1071 PRINTF("%s%s3%s", mrmsg1,mrmsg4,mrmsg1);;
kenjiArai 2:b96103f9270e 1072 i2c_reg( I2C3 );
kenjiArai 2:b96103f9270e 1073 break;
kenjiArai 2:b96103f9270e 1074 #endif
kenjiArai 2:b96103f9270e 1075 case '*' :
kenjiArai 2:b96103f9270e 1076 PRINTF(mrmsg4);
kenjiArai 2:b96103f9270e 1077 put_rn();
kenjiArai 2:b96103f9270e 1078 PRINTF("%s%s1%s", mrmsg1,mrmsg4,mrmsg1);
kenjiArai 2:b96103f9270e 1079 i2c_reg( I2C1 );
kenjiArai 2:b96103f9270e 1080 PRINTF("%s%s2%s", mrmsg1,mrmsg4,mrmsg1);
kenjiArai 2:b96103f9270e 1081 i2c_reg( I2C2 );
kenjiArai 2:b96103f9270e 1082 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 1083 PRINTF("%s%s3%s", mrmsg1,mrmsg4,mrmsg1);;
kenjiArai 2:b96103f9270e 1084 i2c_reg( I2C3 );
kenjiArai 2:b96103f9270e 1085 #endif
kenjiArai 2:b96103f9270e 1086 break;
kenjiArai 2:b96103f9270e 1087 case '?' :
kenjiArai 2:b96103f9270e 1088 default:
kenjiArai 2:b96103f9270e 1089 PRINTF(mrmsg5);
kenjiArai 2:b96103f9270e 1090 put_rn();
kenjiArai 2:b96103f9270e 1091 }
kenjiArai 2:b96103f9270e 1092 #else
kenjiArai 2:b96103f9270e 1093 not_select();
kenjiArai 2:b96103f9270e 1094 #endif // USE_I2C
kenjiArai 2:b96103f9270e 1095 break;
kenjiArai 2:b96103f9270e 1096 case 's' :
kenjiArai 2:b96103f9270e 1097 #if USE_SPI
kenjiArai 2:b96103f9270e 1098 switch(*ptr++) {
kenjiArai 2:b96103f9270e 1099 case '1' :
kenjiArai 2:b96103f9270e 1100 PRINTF("%s%s1%s", mrmsg1,mrmsg6,mrmsg1);
kenjiArai 2:b96103f9270e 1101 spi_reg( SPI1 );
kenjiArai 2:b96103f9270e 1102 break;
kenjiArai 2:b96103f9270e 1103 case '2' :
kenjiArai 2:b96103f9270e 1104 PRINTF("%s%s2%s", mrmsg1,mrmsg6,mrmsg1);
kenjiArai 2:b96103f9270e 1105 spi_reg( SPI2 );
kenjiArai 2:b96103f9270e 1106 break;
kenjiArai 2:b96103f9270e 1107 case '3' :
kenjiArai 2:b96103f9270e 1108 PRINTF("%s%s3%s", mrmsg1,mrmsg6,mrmsg1);
kenjiArai 2:b96103f9270e 1109 spi_reg( SPI3 );
kenjiArai 2:b96103f9270e 1110 break;
kenjiArai 2:b96103f9270e 1111 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 1112 case '4' :
kenjiArai 2:b96103f9270e 1113 PRINTF("%s%s4%s", mrmsg1,mrmsg6,mrmsg1);
kenjiArai 2:b96103f9270e 1114 spi_reg( SPI4 );
kenjiArai 2:b96103f9270e 1115 break;
kenjiArai 2:b96103f9270e 1116 #endif
kenjiArai 2:b96103f9270e 1117 case '*' :
kenjiArai 2:b96103f9270e 1118 PRINTF(mrmsg6);
kenjiArai 2:b96103f9270e 1119 put_rn();
kenjiArai 2:b96103f9270e 1120 PRINTF("%s%s1%s", mrmsg1,mrmsg6,mrmsg1);
kenjiArai 2:b96103f9270e 1121 spi_reg( SPI1 );
kenjiArai 2:b96103f9270e 1122 PRINTF("%s%s2%s", mrmsg1,mrmsg6,mrmsg1);
kenjiArai 2:b96103f9270e 1123 spi_reg( SPI2 );
kenjiArai 2:b96103f9270e 1124 PRINTF("%s%s3%s", mrmsg1,mrmsg6,mrmsg1);
kenjiArai 2:b96103f9270e 1125 spi_reg( SPI3 );
kenjiArai 2:b96103f9270e 1126 #if defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE)
kenjiArai 2:b96103f9270e 1127 PRINTF("%s%s4%s", mrmsg1,mrmsg6,mrmsg1);
kenjiArai 2:b96103f9270e 1128 spi_reg( SPI4 );
kenjiArai 2:b96103f9270e 1129 #endif
kenjiArai 2:b96103f9270e 1130 break;
kenjiArai 2:b96103f9270e 1131 case '?' :
kenjiArai 2:b96103f9270e 1132 default:
kenjiArai 2:b96103f9270e 1133 PRINTF(mrmsg7);
kenjiArai 2:b96103f9270e 1134 put_rn();
kenjiArai 2:b96103f9270e 1135 }
kenjiArai 2:b96103f9270e 1136 #else
kenjiArai 2:b96103f9270e 1137 not_select();
kenjiArai 2:b96103f9270e 1138 #endif // USE_SPI
kenjiArai 2:b96103f9270e 1139 break;
kenjiArai 2:b96103f9270e 1140 case 't' : //
kenjiArai 2:b96103f9270e 1141 not_yet_impliment();
kenjiArai 2:b96103f9270e 1142 break;
kenjiArai 2:b96103f9270e 1143 case 'a' : //
kenjiArai 2:b96103f9270e 1144 not_yet_impliment();
kenjiArai 2:b96103f9270e 1145 break;
kenjiArai 2:b96103f9270e 1146 case 'd' : //
kenjiArai 2:b96103f9270e 1147 not_yet_impliment();
kenjiArai 2:b96103f9270e 1148 break;
kenjiArai 2:b96103f9270e 1149 case 'w' : //
kenjiArai 2:b96103f9270e 1150 not_yet_impliment();
kenjiArai 2:b96103f9270e 1151 break;
kenjiArai 2:b96103f9270e 1152 case 'l' : //
kenjiArai 2:b96103f9270e 1153 not_yet_impliment();
kenjiArai 2:b96103f9270e 1154 break;
kenjiArai 2:b96103f9270e 1155 case 'c' : //
kenjiArai 2:b96103f9270e 1156 not_yet_impliment();
kenjiArai 2:b96103f9270e 1157 break;
kenjiArai 2:b96103f9270e 1158 case 'x' : //
kenjiArai 2:b96103f9270e 1159 not_yet_impliment();
kenjiArai 2:b96103f9270e 1160 break;
kenjiArai 2:b96103f9270e 1161 case 'y' : //
kenjiArai 2:b96103f9270e 1162 not_yet_impliment();
kenjiArai 2:b96103f9270e 1163 break;
kenjiArai 2:b96103f9270e 1164 case '?' :
kenjiArai 2:b96103f9270e 1165 PRINTF("u - USART");
kenjiArai 2:b96103f9270e 1166 put_rn();
kenjiArai 2:b96103f9270e 1167 PRINTF("i - I2C");
kenjiArai 2:b96103f9270e 1168 put_rn();
kenjiArai 2:b96103f9270e 1169 PRINTF("s - SPI");
kenjiArai 2:b96103f9270e 1170 put_rn();
kenjiArai 2:b96103f9270e 1171 PRINTF("t - TIMER");
kenjiArai 2:b96103f9270e 1172 put_rn();
kenjiArai 2:b96103f9270e 1173 PRINTF("a - ADC");
kenjiArai 2:b96103f9270e 1174 put_rn();
kenjiArai 2:b96103f9270e 1175 PRINTF("d - DAC");
kenjiArai 2:b96103f9270e 1176 put_rn();
kenjiArai 2:b96103f9270e 1177 PRINTF("l - LDC");
kenjiArai 2:b96103f9270e 1178 put_rn();
kenjiArai 2:b96103f9270e 1179 PRINTF("w - WWDG");
kenjiArai 2:b96103f9270e 1180 put_rn();
kenjiArai 2:b96103f9270e 1181 PRINTF("c - COMP");
kenjiArai 2:b96103f9270e 1182 put_rn();
kenjiArai 2:b96103f9270e 1183 break;
kenjiArai 2:b96103f9270e 1184 case 'q' : // quit
kenjiArai 2:b96103f9270e 1185 quitflag = 0xff;
kenjiArai 2:b96103f9270e 1186 break;
kenjiArai 2:b96103f9270e 1187 default:
kenjiArai 2:b96103f9270e 1188 PUTC('?');
kenjiArai 2:b96103f9270e 1189 put_rn();
kenjiArai 2:b96103f9270e 1190 }
kenjiArai 2:b96103f9270e 1191 }
kenjiArai 2:b96103f9270e 1192 PRINTF(mrmsg8);
kenjiArai 2:b96103f9270e 1193 put_rn();
kenjiArai 2:b96103f9270e 1194 break;
kenjiArai 2:b96103f9270e 1195 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1196 // Port
kenjiArai 2:b96103f9270e 1197 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1198 case 'p' :
kenjiArai 2:b96103f9270e 1199 #if USE_PORT
kenjiArai 2:b96103f9270e 1200 put_r();
kenjiArai 2:b96103f9270e 1201 PRINTF("Enter port a,b,c,d,e,h & * ? for help");
kenjiArai 2:b96103f9270e 1202 put_rn();
kenjiArai 2:b96103f9270e 1203 quitflag = 0;
kenjiArai 2:b96103f9270e 1204 for (; quitflag != 0xff;) {
kenjiArai 2:b96103f9270e 1205 PRINTF("p>");
kenjiArai 2:b96103f9270e 1206 ptr = linebuf;
kenjiArai 2:b96103f9270e 1207 get_line(ptr, buf_size);
kenjiArai 2:b96103f9270e 1208 put_r();
kenjiArai 2:b96103f9270e 1209 switch(*ptr) {
kenjiArai 2:b96103f9270e 1210 case 'a' :
kenjiArai 2:b96103f9270e 1211 case 'b' :
kenjiArai 2:b96103f9270e 1212 case 'c' :
kenjiArai 2:b96103f9270e 1213 case 'd' :
kenjiArai 2:b96103f9270e 1214 case 'e' :
kenjiArai 2:b96103f9270e 1215 case 'h' :
kenjiArai 2:b96103f9270e 1216 port_inf_one(ptr);
kenjiArai 2:b96103f9270e 1217 break;
kenjiArai 2:b96103f9270e 1218 case '*' :
kenjiArai 2:b96103f9270e 1219 rpt_port();
kenjiArai 2:b96103f9270e 1220 break;
kenjiArai 2:b96103f9270e 1221 case '?' :
kenjiArai 2:b96103f9270e 1222 PRINTF("port a,b,c,d,e,h & *");
kenjiArai 2:b96103f9270e 1223 put_rn();
kenjiArai 2:b96103f9270e 1224 break;
kenjiArai 2:b96103f9270e 1225 case 'q' : // quit
kenjiArai 2:b96103f9270e 1226 quitflag = 0xff;
kenjiArai 2:b96103f9270e 1227 break;
kenjiArai 2:b96103f9270e 1228 default:
kenjiArai 2:b96103f9270e 1229 PUTC('?');
kenjiArai 2:b96103f9270e 1230 put_rn();
kenjiArai 2:b96103f9270e 1231 }
kenjiArai 2:b96103f9270e 1232 }
kenjiArai 2:b96103f9270e 1233 PRINTF(mrmsg8);
kenjiArai 2:b96103f9270e 1234 put_rn();
kenjiArai 2:b96103f9270e 1235 #else
kenjiArai 2:b96103f9270e 1236 not_select();
kenjiArai 2:b96103f9270e 1237 #endif // USE_PORT
kenjiArai 2:b96103f9270e 1238 break;
kenjiArai 2:b96103f9270e 1239 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1240 // System
kenjiArai 2:b96103f9270e 1241 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1242 case 's' : // System related information
kenjiArai 2:b96103f9270e 1243 #if USE_SYS
kenjiArai 2:b96103f9270e 1244 cpu_inf(ptr);
kenjiArai 2:b96103f9270e 1245 #else
kenjiArai 2:b96103f9270e 1246 not_select();
kenjiArai 2:b96103f9270e 1247 #endif // USE_SYS
kenjiArai 2:b96103f9270e 1248 break;
kenjiArai 2:b96103f9270e 1249 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1250 // Help
kenjiArai 2:b96103f9270e 1251 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1252 case '?' :
kenjiArai 2:b96103f9270e 1253 hw_msg_hlp();
kenjiArai 2:b96103f9270e 1254 break;
kenjiArai 2:b96103f9270e 1255 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1256 // Return to main routine
kenjiArai 2:b96103f9270e 1257 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1258 case 'q' : // Quit
kenjiArai 2:b96103f9270e 1259 put_r();
kenjiArai 2:b96103f9270e 1260 PRINTF("Return to monitor");
kenjiArai 2:b96103f9270e 1261 put_rn();
kenjiArai 2:b96103f9270e 1262 return 0;
kenjiArai 2:b96103f9270e 1263 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1264 // Special command for DEBUG
kenjiArai 2:b96103f9270e 1265 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1266 case 'x' :
kenjiArai 2:b96103f9270e 1267 not_yet_impliment();
kenjiArai 2:b96103f9270e 1268 break;
kenjiArai 2:b96103f9270e 1269 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1270 // no support
kenjiArai 2:b96103f9270e 1271 //-----------------------------------------------------------------------------------------
kenjiArai 2:b96103f9270e 1272 default:
kenjiArai 2:b96103f9270e 1273 PUTC('?');
kenjiArai 2:b96103f9270e 1274 put_rn();
kenjiArai 2:b96103f9270e 1275 break;
kenjiArai 2:b96103f9270e 1276 }
kenjiArai 2:b96103f9270e 1277 }
kenjiArai 2:b96103f9270e 1278 }
kenjiArai 2:b96103f9270e 1279 #endif // defined(TARGET_NUCLEO_F401RE) || defined(TARGET_NUCLEO_F411RE) || defined(TARGET_NUCLEO_L152RE)