This is sample program for Nucleo L152RE (and F401RE & F411RE) mbed-rtos. You need to modify mbed-src and mbed-rtos before compile it.

Dependencies:   mbed-rtos mbed-src SetRTC

Fork of GR-PEACH_test_on_rtos_works_well by Kenji Arai

Please refer below link.
/users/kenjiArai/notebook/necleo-l152re-rtos-sample-also-for-f401re--f411re-/

Committer:
kenjiArai
Date:
Wed May 20 10:49:02 2015 +0000
Revision:
13:d0d1da1fae4c
Parent:
10:1c0f58b9c048
change L152 System clock (PLL VCO=96MHz) ->32MHz Clock

Who changed what in which revision?

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