Debug tools / show registers, memory and system clock data

Dependencies:   mbed CheckRTC

Target mbed board

LPC1768
LPC1114FN28
ST Nucleo L152RE
ST NUcleo F401RE
ST Nucleo F411RE

Command structure

Top

1 - goto step1 -> no connection all pins
2 - goto step2 -> connects pin_x and pin_y (not impliment yet)
t - Check and set RTC
x - Goto HW monitor
q - Return to main

>1

l - Check LED
b - Check button
s - CPU system info & clock
o - CPU clock output (Bug fix, port_mco1_mco2_set() function. Thanks Topi Makinen on April 25th, 2015)

>x(Hardware level monitor)

m - Entry Memory Mode
m>? -> Aditinal functions can see by ?
r - Entry Register Mode
r>? -> Aditinal functions can see by ?
s - System Clock -> sf, System / CPU information -> sc
q - Quit (back to called routine)
p - Entry Port Mode
p>? -> Aditinal functions can see by ?

Usage

Please modify "mon_hw_config.h" file for your purpose.
Especially LPC114FN28 has small memory, you cannot run your own program together with this program.
You don't need any additional HW. Just connect with PC via terminal software.

CAUTION

Due to several CPU's and short development time, I cannot grantee the quality level and several functions are not available yet.
If you found the bug, please let me know. Thanks in advance.

Committer:
kenjiArai
Date:
Sun Apr 26 09:31:58 2015 +0000
Revision:
4:02980a730cfb
Parent:
3:455df34f7285
Set output port PA8 & PC9 high speed mode

Who changed what in which revision?

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