Kenji Arai / GR-PEACH_memory_check

Dependencies:  

Committer:
kenjiArai
Date:
Sun Dec 14 09:17:01 2014 +0000
Revision:
4:76b3113c79ff
Check rtos functions on GR-PEACH. Does NOT work on GR-PEACH but does work on LPC1768, F401RE and L152RE.

Who changed what in which revision?

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