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