From df1d35353c0e28041f7ecee2be2ee2ada1f4af3e Mon Sep 17 00:00:00 2001 From: Martin Loren Date: Thu, 5 Dec 2024 15:16:35 +0800 Subject: [PATCH] Update 2024-12 --- .../platforms/at32/boards/generic_f435.json | 2 +- .../platforms/at32/boards/generic_f437.json | 47 + .../at32/builder/frameworks/cmsis.py | 17 +- .../AT32F435/cmsis-blink/include/usb_conf.h | 205 + .../AT32F435/cmsis-blink/platformio.ini | 2 +- .../cmsis-blink/src/at32f435_437_clock.c | 2 +- .../led_toggle}/.gitignore | 0 .../led_toggle/include/at32f435_437_clock.h | 44 + .../led_toggle/include/at32f435_437_conf.h | 173 + .../led_toggle/include/at32f435_437_int.h | 56 + .../AT32F437/led_toggle/include/usb_conf.h | 205 + .../AT32F437/led_toggle/lib/Delay/delay.c | 95 + .../led_toggle}/lib/Delay/delay.h | 10 +- .../led_toggle}/lib/README | 0 .../led_toggle/mdk_v5/led_toggle.uvoptx | 344 ++ .../led_toggle/mdk_v5/led_toggle.uvprojx | 487 +++ .../led_toggle}/platformio.ini | 13 +- .../examples/AT32F437/led_toggle/readme.txt | 9 + .../led_toggle/src/at32f435_437_clock.c | 119 + .../led_toggle/src/at32f435_437_int.c | 139 + .../examples/AT32F437/led_toggle/src/main.c | 90 + .../at32/examples/cmsis-acd1_dma/.travis.yml | 67 - .../at32/examples/cmsis-acd1_dma/README.rst | 38 - .../examples/cmsis-acd1_dma/include/README | 39 - .../examples/cmsis-acd1_dma/lib/Delay/delay.c | 92 - .../examples/cmsis-acd1_dma/src/at32f4xx_it.c | 135 - .../examples/cmsis-acd1_dma/src/at32f4xx_it.h | 34 - .../at32/examples/cmsis-acd1_dma/src/main.c | 202 - .../at32/examples/cmsis-acd1_dma/src/main.h | 28 - .../cmsis-acd1_dma/src/system_at32f4xx.c | 3473 ----------------- .../at32/examples/cmsis-blink/.gitignore | 2 - .../at32/examples/cmsis-blink/.travis.yml | 67 - .../at32/examples/cmsis-blink/README.rst | 38 - .../at32/examples/cmsis-blink/include/README | 39 - .../examples/cmsis-blink/lib/Delay/delay.c | 94 - .../examples/cmsis-blink/lib/Delay/delay.h | 16 - .../at32/examples/cmsis-blink/lib/README | 46 - .../at32/examples/cmsis-blink/platformio.ini | 35 - .../at32/examples/cmsis-blink/src/main.c | 49 - .../at32/examples/cmsis-blink/src/main.h | 8 - .../cmsis-blink/src/system_at32f4xx.c | 3473 ----------------- .platformio/platforms/at32/platform.json | 20 +- JLinkDevices/AT/AT32F435xGx/AT32F435_1024.FLM | Bin 0 -> 12428 bytes JLinkDevices/AT/AT32F435xGx/AT32F435_192.FLM | Bin 0 -> 11976 bytes JLinkDevices/AT/AT32F435xGx/AT32F435_256.FLM | Bin 0 -> 11976 bytes JLinkDevices/AT/AT32F435xGx/AT32F435_4032.FLM | Bin 0 -> 12424 bytes JLinkDevices/AT/AT32F435xGx/AT32F435_448.FLM | Bin 0 -> 11976 bytes JLinkDevices/AT/AT32F435xGx/AT32F435_960.FLM | Bin 0 -> 12424 bytes .../AT/AT32F435xGx/AT32F435_USD_4096.FLM | Bin 0 -> 12124 bytes .../AT/AT32F435xGx/AT32F435_USD_512.FLM | Bin 0 -> 12124 bytes JLinkDevices/AT/AT32F435xGx/Devices.xml | 8 + JLinkDevices/AT/AT32F437xGx/AT32F437_1024.FLM | Bin 0 -> 12428 bytes JLinkDevices/AT/AT32F437xGx/AT32F437_192.FLM | Bin 0 -> 11976 bytes JLinkDevices/AT/AT32F437xGx/AT32F437_256.FLM | Bin 0 -> 11976 bytes JLinkDevices/AT/AT32F437xGx/AT32F437_4032.FLM | Bin 0 -> 12424 bytes JLinkDevices/AT/AT32F437xGx/AT32F437_448.FLM | Bin 0 -> 11976 bytes JLinkDevices/AT/AT32F437xGx/AT32F437_960.FLM | Bin 0 -> 12424 bytes .../AT/AT32F437xGx/AT32F437_USD_4096.FLM | Bin 0 -> 12124 bytes .../AT/AT32F437xGx/AT32F437_USD_512.FLM | Bin 0 -> 12124 bytes JLinkDevices/AT/AT32F437xGx/Devices.xml | 8 + README.md | 21 +- .../Devices/AT/AT32F4xx/AT32F403A_1024.FLM | Bin .../Devices/AT/AT32F4xx/AT32F403A_256.FLM | Bin .../Devices/AT/AT32F4xx/AT32F403A_512.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP0_16MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP0_1MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP0_2MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP0_4MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP0_8MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP1_16MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP1_1MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP1_2MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP1_4MB.FLM | Bin .../AT32F403A_EXT_TYPE1_REAMP1_8MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP0_16MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP0_1MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP0_2MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP0_4MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP0_8MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP1_16MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP1_1MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP1_2MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP1_4MB.FLM | Bin .../AT32F403A_EXT_TYPE2_REAMP1_8MB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F403A_UOB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F403_1024.FLM | Bin .../Devices/AT/AT32F4xx/AT32F403_128.FLM | Bin .../Devices/AT/AT32F4xx/AT32F403_256.FLM | Bin .../Devices/AT/AT32F4xx/AT32F403_512.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE1_16MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE1_1MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE1_2MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE1_4MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE1_8MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE2_16MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE2_1MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE2_2MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE2_4MB.FLM | Bin .../AT/AT32F4xx/AT32F403_EXT_TYPE2_8MB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F403_UOB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F407_1024.FLM | Bin .../Devices/AT/AT32F4xx/AT32F407_256.FLM | Bin .../Devices/AT/AT32F4xx/AT32F407_512.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP0_16MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP0_1MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP0_2MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP0_4MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP0_8MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP1_16MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP1_1MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP1_2MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP1_4MB.FLM | Bin .../AT32F407_EXT_TYPE1_REAMP1_8MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP0_16MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP0_1MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP0_2MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP0_4MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP0_8MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP1_16MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP1_1MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP1_2MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP1_4MB.FLM | Bin .../AT32F407_EXT_TYPE2_REAMP1_8MB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F407_UOB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F413_128.FLM | Bin .../Devices/AT/AT32F4xx/AT32F413_256.FLM | Bin .../Devices/AT/AT32F4xx/AT32F413_64.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP0_16MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP0_1MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP0_2MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP0_4MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP0_8MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP1_16MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP1_1MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP1_2MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP1_4MB.FLM | Bin .../AT32F413_EXT_TYPE1_REAMP1_8MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP0_16MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP0_1MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP0_2MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP0_4MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP0_8MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP1_16MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP1_1MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP1_2MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP1_4MB.FLM | Bin .../AT32F413_EXT_TYPE2_REAMP1_8MB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F413_UOB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F415_128.FLM | Bin .../Devices/AT/AT32F4xx/AT32F415_256.FLM | Bin .../Devices/AT/AT32F4xx/AT32F415_64.FLM | Bin .../AT/AT32F4xx/AT32F415_SYSMEM_AP.FLM | Bin .../Devices/AT/AT32F4xx/AT32F415_UOB.FLM | Bin .../Devices/AT/AT32F4xx/AT32F421_16.FLM | Bin .../Devices/AT/AT32F4xx/AT32F421_32.FLM | Bin .../Devices/AT/AT32F4xx/AT32F421_64.FLM | Bin .../AT/AT32F4xx/AT32F421_BOOTMEM_AP.FLM | Bin .../Devices/AT/AT32F4xx/AT32F421_USD.FLM | Bin .../Devices/AT/AT32F4xx/AT32F423_128.FLM | Bin .../Devices/AT/AT32F4xx/AT32F423_256.FLM | Bin .../Devices/AT/AT32F4xx/AT32F423_64.FLM | Bin .../AT/AT32F4xx/AT32F423_BOOTMEM_AP.FLM | Bin .../Devices/AT/AT32F4xx/AT32F423_USD.FLM | Bin .../Devices/AT/AT32F4xx/AT32F425_16.FLM | Bin .../Devices/AT/AT32F4xx/AT32F425_32.FLM | Bin .../Devices/AT/AT32F4xx/AT32F425_64.FLM | Bin .../AT/AT32F4xx/AT32F425_BOOTMEM_AP.FLM | Bin .../Devices/AT/AT32F4xx/AT32F425_USD.FLM | Bin .../Devices/AT/AT32F4xx/AT32F435_1024.FLM | Bin .../Devices/AT/AT32F4xx/AT32F435_192.FLM | Bin .../Devices/AT/AT32F4xx/AT32F435_256.FLM | Bin .../Devices/AT/AT32F4xx/AT32F435_4032.FLM | Bin .../Devices/AT/AT32F4xx/AT32F435_960.FLM | Bin .../Devices/AT/AT32F4xx/AT32F437_1024.FLM | Bin .../Devices/AT/AT32F4xx/AT32F437_192.FLM | Bin .../Devices/AT/AT32F4xx/AT32F437_256.FLM | Bin .../Devices/AT/AT32F4xx/AT32F437_4032.FLM | Bin .../Devices/AT/AT32F4xx/AT32F437_960.FLM | Bin .../Devices/AT/AT32F4xx/AT32F4xx.JLinkScript | 0 JLINK.md => old-jlink/JLINK.md | 1 + 180 files changed, 2080 insertions(+), 8012 deletions(-) create mode 100644 .platformio/platforms/at32/boards/generic_f437.json create mode 100644 .platformio/platforms/at32/examples/AT32F435/cmsis-blink/include/usb_conf.h rename .platformio/platforms/at32/examples/{cmsis-acd1_dma => AT32F437/led_toggle}/.gitignore (100%) create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_clock.h create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_conf.h create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_int.h create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/include/usb_conf.h create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/lib/Delay/delay.c rename .platformio/platforms/at32/examples/{cmsis-acd1_dma => AT32F437/led_toggle}/lib/Delay/delay.h (58%) rename .platformio/platforms/at32/examples/{cmsis-acd1_dma => AT32F437/led_toggle}/lib/README (100%) create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/mdk_v5/led_toggle.uvoptx create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/mdk_v5/led_toggle.uvprojx rename .platformio/platforms/at32/examples/{cmsis-acd1_dma => AT32F437/led_toggle}/platformio.ini (54%) create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/readme.txt create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/src/at32f435_437_clock.c create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/src/at32f435_437_int.c create mode 100644 .platformio/platforms/at32/examples/AT32F437/led_toggle/src/main.c delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/.travis.yml delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/README.rst delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/include/README delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/lib/Delay/delay.c delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/src/at32f4xx_it.c delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/src/at32f4xx_it.h delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/src/main.c delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/src/main.h delete mode 100644 .platformio/platforms/at32/examples/cmsis-acd1_dma/src/system_at32f4xx.c delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/.gitignore delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/.travis.yml delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/README.rst delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/include/README delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/lib/Delay/delay.c delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/lib/Delay/delay.h delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/lib/README delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/platformio.ini delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/src/main.c delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/src/main.h delete mode 100644 .platformio/platforms/at32/examples/cmsis-blink/src/system_at32f4xx.c create mode 100644 JLinkDevices/AT/AT32F435xGx/AT32F435_1024.FLM create mode 100644 JLinkDevices/AT/AT32F435xGx/AT32F435_192.FLM create mode 100644 JLinkDevices/AT/AT32F435xGx/AT32F435_256.FLM create mode 100644 JLinkDevices/AT/AT32F435xGx/AT32F435_4032.FLM create mode 100644 JLinkDevices/AT/AT32F435xGx/AT32F435_448.FLM create mode 100644 JLinkDevices/AT/AT32F435xGx/AT32F435_960.FLM create mode 100644 JLinkDevices/AT/AT32F435xGx/AT32F435_USD_4096.FLM create mode 100644 JLinkDevices/AT/AT32F435xGx/AT32F435_USD_512.FLM create mode 100644 JLinkDevices/AT/AT32F435xGx/Devices.xml create mode 100644 JLinkDevices/AT/AT32F437xGx/AT32F437_1024.FLM create mode 100644 JLinkDevices/AT/AT32F437xGx/AT32F437_192.FLM create mode 100644 JLinkDevices/AT/AT32F437xGx/AT32F437_256.FLM create mode 100644 JLinkDevices/AT/AT32F437xGx/AT32F437_4032.FLM create mode 100644 JLinkDevices/AT/AT32F437xGx/AT32F437_448.FLM create mode 100644 JLinkDevices/AT/AT32F437xGx/AT32F437_960.FLM create mode 100644 JLinkDevices/AT/AT32F437xGx/AT32F437_USD_4096.FLM create mode 100644 JLinkDevices/AT/AT32F437xGx/AT32F437_USD_512.FLM create mode 100644 JLinkDevices/AT/AT32F437xGx/Devices.xml rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_1024.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_256.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_512.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_UOB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_1024.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_128.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_256.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_512.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_UOB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_1024.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_256.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_512.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_UOB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_128.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_256.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_64.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_16MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_1MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_2MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_4MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_8MB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_UOB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_128.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_256.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_64.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_SYSMEM_AP.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_UOB.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_16.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_32.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_64.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_BOOTMEM_AP.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_USD.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_128.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_256.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_64.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_BOOTMEM_AP.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_USD.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_16.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_32.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_64.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_BOOTMEM_AP.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_USD.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_1024.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_192.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_256.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_4032.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_960.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_1024.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_192.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_256.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_4032.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_960.FLM (100%) rename {.platformio => old-jlink/.platformio}/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F4xx.JLinkScript (100%) rename JLINK.md => old-jlink/JLINK.md (98%) diff --git a/.platformio/platforms/at32/boards/generic_f435.json b/.platformio/platforms/at32/boards/generic_f435.json index d8bb88e..4f6dab8 100644 --- a/.platformio/platforms/at32/boards/generic_f435.json +++ b/.platformio/platforms/at32/boards/generic_f435.json @@ -32,7 +32,7 @@ "name": "Generic_F435", "upload": { "maximum_ram_size": 524288, - "maximum_size": 262144, + "maximum_size": 1048576, "protocol": "serial", "protocols": [ "jlink", diff --git a/.platformio/platforms/at32/boards/generic_f437.json b/.platformio/platforms/at32/boards/generic_f437.json new file mode 100644 index 0000000..e0c42a6 --- /dev/null +++ b/.platformio/platforms/at32/boards/generic_f437.json @@ -0,0 +1,47 @@ +{ + "build": { + "core": "at32", + "cpu": "cortex-m4", + "extra_flags": "-DAT32F437RGT7 -DAT_START_F437_V1", + "f_cpu": "288000000L", + "hwids": [ + [ + "0x2E3C", + "0xDF11" + ] + ], + "mcu": "at32f437xg", + "product_line": "AT32F435_437", + "variant": "AT32F4xx/F437_F437(T-U)" + }, + "debug": { + "default_tools": [ + "stlink" + ], + "jlink_device": "AT32F437xGx", + "openocd_extra_args": [ + "-c", + "reset_config none" + ], + "openocd_target": "stm32f4x", + "svd_path": "STM32F437xx.svd" + }, + "frameworks": [ + "cmsis" + ], + "name": "Generic_F437", + "upload": { + "maximum_ram_size": 524288, + "maximum_size": 1048576, + "protocol": "serial", + "protocols": [ + "jlink", + "cmsis-dap", + "stlink", + "serial", + "blackmagic" + ] + }, + "url": "https://www.arterychip.com/en/product/AT32F437.jsp", + "vendor": "Artery" +} diff --git a/.platformio/platforms/at32/builder/frameworks/cmsis.py b/.platformio/platforms/at32/builder/frameworks/cmsis.py index bcb5102..280f24e 100644 --- a/.platformio/platforms/at32/builder/frameworks/cmsis.py +++ b/.platformio/platforms/at32/builder/frameworks/cmsis.py @@ -42,7 +42,10 @@ mcu = board.get("build.mcu", "") product_line = board.get("build.product_line", "") assert product_line, "Missing MCU or Product Line field" - +print("-------------------------------------------------------------------------------"); +print("AT32 PlatformIO porting by MartinLoren®"); +print("-------------------------------------------------------------------------------"); +print("Version: 2024-12"); #env.SConscript("_bare.py") #build_script = "_bare.py" @@ -58,7 +61,11 @@ SConscript(build_script) CMSIS_DIR = platform.get_package_dir("framework-cmsis") CMSIS_DEVICE_DIR = platform.get_package_dir("framework-cmsis-" + mcu[0:7]) -LDSCRIPTS_DIR = join('%s' % platform.get_dir() or "", "ldscripts") +LDSCRIPTS_DIR = platform.get_package_dir("tool-ldscripts-at32") +print("Environment:"); +print(" CMSIS_DIR: "+CMSIS_DIR); +print(" CMSIS_DEVICE_DIR: "+CMSIS_DEVICE_DIR); +print(" LDSCRIPTS_DIR: "+LDSCRIPTS_DIR); assert all(os.path.isdir(d) for d in (CMSIS_DIR, CMSIS_DEVICE_DIR, LDSCRIPTS_DIR)) @@ -81,9 +88,9 @@ def generate_ldscript(default_ldscript_path): def get_linker_script(): ldscript_match = glob.glob(os.path.join( LDSCRIPTS_DIR, mcu[0:7], mcu[0:11].upper() + "*_FLASH.ld")) - + #print(os.path.join(LDSCRIPTS_DIR, mcu[0:7], mcu[0:11].upper() + "*_FLASH.ld")) + if ldscript_match and os.path.isfile(ldscript_match[0]): - print("LD Script file: " +ldscript_match[0]) return ldscript_match[0] default_ldscript = os.path.join( @@ -99,7 +106,7 @@ def get_linker_script(): def prepare_startup_file(src_path): - startup_file = os.path.join(src_path, "gcc", "startup_%s.s" % product_line.lower()) + startup_file = os.path.join(src_path, "gcc", "startup_%s.S" % product_line.lower()) print("Startup file: " + startup_file) # Change file extension to uppercase: if not os.path.isfile(startup_file) and os.path.isfile(startup_file[:-2] + ".s"): diff --git a/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/include/usb_conf.h b/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/include/usb_conf.h new file mode 100644 index 0000000..c245708 --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/include/usb_conf.h @@ -0,0 +1,205 @@ +/** + ****************************************************************************** + * File : USB_Device/VirtualComPort_loopback/inc/usb_conf.h + * Version: V1.2.2 + * Date : 2020-07-01 + * Brief : USB Endpoint config header. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_CONF_F435_H +#define __USB_CONF_F435_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "at32f435_437_usb.h" +#include "at32f435_437.h" +#include "stdio.h" + +/** @addtogroup AT32F435_periph_examples + * @{ + */ + +/** @addtogroup 435_USB_device_vcp_loopback + * @{ + */ + +/** + * @brief enable usb device mode + */ +#define USE_OTG_DEVICE_MODE + +/** + * @brief enable usb host mode + */ +/* #define USE_OTG_HOST_MODE */ + +/** + * @brief select otgfs1 or otgfs2 define + */ + +/* use otgfs1 */ +#define OTG_USB_ID 1 + +/* use otgfs2 */ +//#define OTG_USB_ID 2 + +#if (OTG_USB_ID == 1) +#define USB_ID 0 +#define OTG_CLOCK CRM_OTGFS1_PERIPH_CLOCK +#define OTG_IRQ OTGFS1_IRQn +#define OTG_IRQ_HANDLER OTGFS1_IRQHandler +#define OTG_WKUP_IRQ OTGFS1_WKUP_IRQn +#define OTG_WKUP_HANDLER OTGFS1_WKUP_IRQHandler +#define OTG_WKUP_EXINT_LINE EXINT_LINE_18 + +#define OTG_PIN_GPIO GPIOA +#define OTG_PIN_GPIO_CLOCK CRM_GPIOA_PERIPH_CLOCK + +#define OTG_PIN_DP GPIO_PINS_12 +#define OTG_PIN_DP_SOURCE GPIO_PINS_SOURCE12 + +#define OTG_PIN_DM GPIO_PINS_11 +#define OTG_PIN_DM_SOURCE GPIO_PINS_SOURCE11 + +#define OTG_PIN_VBUS GPIO_PINS_9 +#define OTG_PIN_VBUS_SOURCE GPIO_PINS_SOURCE9 + +#define OTG_PIN_ID GPIO_PINS_10 +#define OTG_PIN_ID_SOURCE GPIO_PINS_SOURCE10 + +//#define OTG_PIN_SOF_GPIO GPIOA +//#define OTG_PIN_SOF_GPIO_CLOCK CRM_GPIOA_PERIPH_CLOCK +//#define OTG_PIN_SOF GPIO_PINS_8 +//#define OTG_PIN_SOF_SOURCE GPIO_PINS_SOURCE8 + +#define OTG_PIN_MUX GPIO_MUX_10 +#endif + +#if (OTG_USB_ID == 2) +#define USB_ID 1 +#define OTG_CLOCK CRM_OTGFS2_PERIPH_CLOCK +#define OTG_IRQ OTGFS2_IRQn +#define OTG_IRQ_HANDLER OTGFS2_IRQHandler +#define OTG_WKUP_IRQ OTGFS2_WKUP_IRQn +#define OTG_WKUP_HANDLER OTGFS2_WKUP_IRQHandler +#define OTG_WKUP_EXINT_LINE EXINT_LINE_20 + +#define OTG_PIN_GPIO GPIOB +#define OTG_PIN_GPIO_CLOCK CRM_GPIOB_PERIPH_CLOCK + +#define OTG_PIN_DP GPIO_PINS_15 +#define OTG_PIN_DP_SOURCE GPIO_PINS_SOURCE15 + +#define OTG_PIN_DM GPIO_PINS_14 +#define OTG_PIN_DM_SOURCE GPIO_PINS_SOURCE14 + +#define OTG_PIN_VBUS GPIO_PINS_13 +#define OTG_PIN_VBUS_SOURCE GPIO_PINS_SOURCE13 + +#define OTG_PIN_ID GPIO_PINS_12 +#define OTG_PIN_ID_SOURCE GPIO_PINS_SOURCE10 + +#define OTG_PIN_SOF_GPIO GPIOA +#define OTG_PIN_SOF_GPIO_CLOCK CRM_GPIOA_PERIPH_CLOCK +#define OTG_PIN_SOF GPIO_PINS_4 +#define OTG_PIN_SOF_SOURCE GPIO_PINS_SOURCE4 + +#define OTG_PIN_MUX GPIO_MUX_12 +#endif + +/** + * @brief usb device mode config + */ +#ifdef USE_OTG_DEVICE_MODE +/** + * @brief usb device mode fifo + */ +/* otg1 device fifo */ +#define USBD_RX_SIZE 128 +#define USBD_EP0_TX_SIZE 64//24 +#define USBD_EP1_TX_SIZE 64//20 +#define USBD_EP2_TX_SIZE 20 +#define USBD_EP3_TX_SIZE 20 +#define USBD_EP4_TX_SIZE 20 +#define USBD_EP5_TX_SIZE 20 +#define USBD_EP6_TX_SIZE 20 +#define USBD_EP7_TX_SIZE 20 + +/* otg2 device fifo */ +#define USBD2_RX_SIZE 128 +#define USBD2_EP0_TX_SIZE 24//24 +#define USBD2_EP1_TX_SIZE 20//20 +#define USBD2_EP2_TX_SIZE 20 +#define USBD2_EP3_TX_SIZE 20 +#define USBD2_EP4_TX_SIZE 20 +#define USBD2_EP5_TX_SIZE 20 +#define USBD2_EP6_TX_SIZE 20 +#define USBD2_EP7_TX_SIZE 20 + +/** + * @brief usb endpoint max num define + */ +#ifndef USB_EPT_MAX_NUM +#define USB_EPT_MAX_NUM 8 +#endif +#endif + +/** + * @brief usb host mode config + */ +#ifdef USE_OTG_HOST_MODE +#ifndef USB_HOST_CHANNEL_NUM +#define USB_HOST_CHANNEL_NUM 16 +#endif + +/** + * @brief usb host mode fifo + */ +/* otg1 host fifo */ +#define USBH_RX_FIFO_SIZE 128 +#define USBH_NP_TX_FIFO_SIZE 96 +#define USBH_P_TX_FIFO_SIZE 96 + +/* otg2 host fifo */ +#define USBH2_RX_FIFO_SIZE 128 +#define USBH2_NP_TX_FIFO_SIZE 96 +#define USBH2_P_TX_FIFO_SIZE 96 +#endif + +/** + * @brief usb sof output enable + */ +/* #define USB_SOF_OUTPUT_ENABLE */ + +/** + * @brief usb vubs ignor, not use vbus pin + */ +#define USB_VBUS_IGNORE + +/** + * @brief usb low power wakeup handler enable + */ +/* #define USB_LOW_POWER_WAKUP */ + +void usb_delay_ms(uint32_t ms); +void usb_delay_us(uint32_t us); + +/** + * @} + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif /*__USB_CONF_F435_H*/ + + + diff --git a/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/platformio.ini b/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/platformio.ini index 50c145f..a44562d 100644 --- a/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/platformio.ini +++ b/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/platformio.ini @@ -12,7 +12,7 @@ platform = at32 framework = cmsis board = generic_f435 monitor_speed = 115200 ;serial monitor baudrate - +build_flags = -I include ;Use the following for jlink upload upload_protocol = jlink diff --git a/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/src/at32f435_437_clock.c b/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/src/at32f435_437_clock.c index 2c29ee4..885675e 100644 --- a/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/src/at32f435_437_clock.c +++ b/.platformio/platforms/at32/examples/AT32F435/cmsis-blink/src/at32f435_437_clock.c @@ -58,7 +58,7 @@ void system_clock_config(void) flash_clock_divider_set(FLASH_CLOCK_DIV_3); /* reset crm */ - crm_reset(); + //crm_reset(); //crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE); crm_clock_source_enable(CRM_CLOCK_SOURCE_HICK, TRUE); diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/.gitignore b/.platformio/platforms/at32/examples/AT32F437/led_toggle/.gitignore similarity index 100% rename from .platformio/platforms/at32/examples/cmsis-acd1_dma/.gitignore rename to .platformio/platforms/at32/examples/AT32F437/led_toggle/.gitignore diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_clock.h b/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_clock.h new file mode 100644 index 0000000..221f67b --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_clock.h @@ -0,0 +1,44 @@ +/** + ************************************************************************** + * @file at32f435_437_clock.h + * @brief header file of clock program + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __AT32F435_437_CLOCK_H +#define __AT32F435_437_CLOCK_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* includes ------------------------------------------------------------------*/ +#include "at32f435_437.h" + +/* exported functions ------------------------------------------------------- */ +void system_clock_config(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_conf.h b/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_conf.h new file mode 100644 index 0000000..54ab75b --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_conf.h @@ -0,0 +1,173 @@ +/** + ************************************************************************** + * @file at32f435_437_conf.h + * @brief at32f435_437 config header file + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __AT32F435_437_CONF_H +#define __AT32F435_437_CONF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief in the following line adjust the value of high speed external crystal (hext) + * used in your application + * + * tip: to avoid modifying this file each time you need to use different hext, you + * can define the hext value in your toolchain compiler preprocessor. + * + */ +#if !defined HEXT_VALUE +#define HEXT_VALUE ((uint32_t)8000000) /*!< value of the high speed external crystal in hz */ +#endif + +/** + * @brief in the following line adjust the high speed external crystal (hext) startup + * timeout value + */ +#define HEXT_STARTUP_TIMEOUT ((uint16_t)0x3000) /*!< time out for hext start up */ +#define HICK_VALUE ((uint32_t)8000000) /*!< value of the high speed internal clock in hz */ +#define LEXT_VALUE ((uint32_t)32768) /*!< value of the low speed external clock in hz */ + +/* module define -------------------------------------------------------------*/ +#define CRM_MODULE_ENABLED +#define TMR_MODULE_ENABLED +#define ERTC_MODULE_ENABLED +#define GPIO_MODULE_ENABLED +#define I2C_MODULE_ENABLED +#define USART_MODULE_ENABLED +#define PWC_MODULE_ENABLED +#define CAN_MODULE_ENABLED +#define ADC_MODULE_ENABLED +#define DAC_MODULE_ENABLED +#define SPI_MODULE_ENABLED +#define EDMA_MODULE_ENABLED +#define DMA_MODULE_ENABLED +#define DEBUG_MODULE_ENABLED +#define FLASH_MODULE_ENABLED +#define CRC_MODULE_ENABLED +#define WWDT_MODULE_ENABLED +#define WDT_MODULE_ENABLED +#define EXINT_MODULE_ENABLED +#define SDIO_MODULE_ENABLED +#define XMC_MODULE_ENABLED +#define USB_MODULE_ENABLED +#define ACC_MODULE_ENABLED +#define MISC_MODULE_ENABLED +#define QSPI_MODULE_ENABLED +#define DVP_MODULE_ENABLED +#define SCFG_MODULE_ENABLED +#define EMAC_MODULE_ENABLED + +/* includes ------------------------------------------------------------------*/ +#ifdef CRM_MODULE_ENABLED +#include "at32f435_437_crm.h" +#endif +#ifdef TMR_MODULE_ENABLED +#include "at32f435_437_tmr.h" +#endif +#ifdef ERTC_MODULE_ENABLED +#include "at32f435_437_ertc.h" +#endif +#ifdef GPIO_MODULE_ENABLED +#include "at32f435_437_gpio.h" +#endif +#ifdef I2C_MODULE_ENABLED +#include "at32f435_437_i2c.h" +#endif +#ifdef USART_MODULE_ENABLED +#include "at32f435_437_usart.h" +#endif +#ifdef PWC_MODULE_ENABLED +#include "at32f435_437_pwc.h" +#endif +#ifdef CAN_MODULE_ENABLED +#include "at32f435_437_can.h" +#endif +#ifdef ADC_MODULE_ENABLED +#include "at32f435_437_adc.h" +#endif +#ifdef DAC_MODULE_ENABLED +#include "at32f435_437_dac.h" +#endif +#ifdef SPI_MODULE_ENABLED +#include "at32f435_437_spi.h" +#endif +#ifdef DMA_MODULE_ENABLED +#include "at32f435_437_dma.h" +#endif +#ifdef DEBUG_MODULE_ENABLED +#include "at32f435_437_debug.h" +#endif +#ifdef FLASH_MODULE_ENABLED +#include "at32f435_437_flash.h" +#endif +#ifdef CRC_MODULE_ENABLED +#include "at32f435_437_crc.h" +#endif +#ifdef WWDT_MODULE_ENABLED +#include "at32f435_437_wwdt.h" +#endif +#ifdef WDT_MODULE_ENABLED +#include "at32f435_437_wdt.h" +#endif +#ifdef EXINT_MODULE_ENABLED +#include "at32f435_437_exint.h" +#endif +#ifdef SDIO_MODULE_ENABLED +#include "at32f435_437_sdio.h" +#endif +#ifdef XMC_MODULE_ENABLED +#include "at32f435_437_xmc.h" +#endif +#ifdef ACC_MODULE_ENABLED +#include "at32f435_437_acc.h" +#endif +#ifdef MISC_MODULE_ENABLED +#include "at32f435_437_misc.h" +#endif +#ifdef EDMA_MODULE_ENABLED +#include "at32f435_437_edma.h" +#endif +#ifdef QSPI_MODULE_ENABLED +#include "at32f435_437_qspi.h" +#endif +#ifdef SCFG_MODULE_ENABLED +#include "at32f435_437_scfg.h" +#endif +#ifdef EMAC_MODULE_ENABLED +#include "at32f435_437_emac.h" +#endif +#ifdef DVP_MODULE_ENABLED +#include "at32f435_437_dvp.h" +#endif +#ifdef USB_MODULE_ENABLED +#include "at32f435_437_usb.h" +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_int.h b/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_int.h new file mode 100644 index 0000000..afd2ad1 --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/at32f435_437_int.h @@ -0,0 +1,56 @@ +/** + ************************************************************************** + * @file at32f435_437_int.h + * @brief header file of main interrupt service routines. + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* define to prevent recursive inclusion -------------------------------------*/ +#ifndef __AT32F435_437_INT_H +#define __AT32F435_437_INT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/* includes ------------------------------------------------------------------*/ +#include "at32f435_437.h" + +/* exported types ------------------------------------------------------------*/ +/* exported constants --------------------------------------------------------*/ +/* exported macro ------------------------------------------------------------*/ +/* exported functions ------------------------------------------------------- */ + +void NMI_Handler(void); +void HardFault_Handler(void); +void MemManage_Handler(void); +void BusFault_Handler(void); +void UsageFault_Handler(void); +void SVC_Handler(void); +void DebugMon_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/usb_conf.h b/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/usb_conf.h new file mode 100644 index 0000000..c245708 --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/include/usb_conf.h @@ -0,0 +1,205 @@ +/** + ****************************************************************************** + * File : USB_Device/VirtualComPort_loopback/inc/usb_conf.h + * Version: V1.2.2 + * Date : 2020-07-01 + * Brief : USB Endpoint config header. + ****************************************************************************** + */ + +/* Define to prevent recursive inclusion -------------------------------------*/ +#ifndef __USB_CONF_F435_H +#define __USB_CONF_F435_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "at32f435_437_usb.h" +#include "at32f435_437.h" +#include "stdio.h" + +/** @addtogroup AT32F435_periph_examples + * @{ + */ + +/** @addtogroup 435_USB_device_vcp_loopback + * @{ + */ + +/** + * @brief enable usb device mode + */ +#define USE_OTG_DEVICE_MODE + +/** + * @brief enable usb host mode + */ +/* #define USE_OTG_HOST_MODE */ + +/** + * @brief select otgfs1 or otgfs2 define + */ + +/* use otgfs1 */ +#define OTG_USB_ID 1 + +/* use otgfs2 */ +//#define OTG_USB_ID 2 + +#if (OTG_USB_ID == 1) +#define USB_ID 0 +#define OTG_CLOCK CRM_OTGFS1_PERIPH_CLOCK +#define OTG_IRQ OTGFS1_IRQn +#define OTG_IRQ_HANDLER OTGFS1_IRQHandler +#define OTG_WKUP_IRQ OTGFS1_WKUP_IRQn +#define OTG_WKUP_HANDLER OTGFS1_WKUP_IRQHandler +#define OTG_WKUP_EXINT_LINE EXINT_LINE_18 + +#define OTG_PIN_GPIO GPIOA +#define OTG_PIN_GPIO_CLOCK CRM_GPIOA_PERIPH_CLOCK + +#define OTG_PIN_DP GPIO_PINS_12 +#define OTG_PIN_DP_SOURCE GPIO_PINS_SOURCE12 + +#define OTG_PIN_DM GPIO_PINS_11 +#define OTG_PIN_DM_SOURCE GPIO_PINS_SOURCE11 + +#define OTG_PIN_VBUS GPIO_PINS_9 +#define OTG_PIN_VBUS_SOURCE GPIO_PINS_SOURCE9 + +#define OTG_PIN_ID GPIO_PINS_10 +#define OTG_PIN_ID_SOURCE GPIO_PINS_SOURCE10 + +//#define OTG_PIN_SOF_GPIO GPIOA +//#define OTG_PIN_SOF_GPIO_CLOCK CRM_GPIOA_PERIPH_CLOCK +//#define OTG_PIN_SOF GPIO_PINS_8 +//#define OTG_PIN_SOF_SOURCE GPIO_PINS_SOURCE8 + +#define OTG_PIN_MUX GPIO_MUX_10 +#endif + +#if (OTG_USB_ID == 2) +#define USB_ID 1 +#define OTG_CLOCK CRM_OTGFS2_PERIPH_CLOCK +#define OTG_IRQ OTGFS2_IRQn +#define OTG_IRQ_HANDLER OTGFS2_IRQHandler +#define OTG_WKUP_IRQ OTGFS2_WKUP_IRQn +#define OTG_WKUP_HANDLER OTGFS2_WKUP_IRQHandler +#define OTG_WKUP_EXINT_LINE EXINT_LINE_20 + +#define OTG_PIN_GPIO GPIOB +#define OTG_PIN_GPIO_CLOCK CRM_GPIOB_PERIPH_CLOCK + +#define OTG_PIN_DP GPIO_PINS_15 +#define OTG_PIN_DP_SOURCE GPIO_PINS_SOURCE15 + +#define OTG_PIN_DM GPIO_PINS_14 +#define OTG_PIN_DM_SOURCE GPIO_PINS_SOURCE14 + +#define OTG_PIN_VBUS GPIO_PINS_13 +#define OTG_PIN_VBUS_SOURCE GPIO_PINS_SOURCE13 + +#define OTG_PIN_ID GPIO_PINS_12 +#define OTG_PIN_ID_SOURCE GPIO_PINS_SOURCE10 + +#define OTG_PIN_SOF_GPIO GPIOA +#define OTG_PIN_SOF_GPIO_CLOCK CRM_GPIOA_PERIPH_CLOCK +#define OTG_PIN_SOF GPIO_PINS_4 +#define OTG_PIN_SOF_SOURCE GPIO_PINS_SOURCE4 + +#define OTG_PIN_MUX GPIO_MUX_12 +#endif + +/** + * @brief usb device mode config + */ +#ifdef USE_OTG_DEVICE_MODE +/** + * @brief usb device mode fifo + */ +/* otg1 device fifo */ +#define USBD_RX_SIZE 128 +#define USBD_EP0_TX_SIZE 64//24 +#define USBD_EP1_TX_SIZE 64//20 +#define USBD_EP2_TX_SIZE 20 +#define USBD_EP3_TX_SIZE 20 +#define USBD_EP4_TX_SIZE 20 +#define USBD_EP5_TX_SIZE 20 +#define USBD_EP6_TX_SIZE 20 +#define USBD_EP7_TX_SIZE 20 + +/* otg2 device fifo */ +#define USBD2_RX_SIZE 128 +#define USBD2_EP0_TX_SIZE 24//24 +#define USBD2_EP1_TX_SIZE 20//20 +#define USBD2_EP2_TX_SIZE 20 +#define USBD2_EP3_TX_SIZE 20 +#define USBD2_EP4_TX_SIZE 20 +#define USBD2_EP5_TX_SIZE 20 +#define USBD2_EP6_TX_SIZE 20 +#define USBD2_EP7_TX_SIZE 20 + +/** + * @brief usb endpoint max num define + */ +#ifndef USB_EPT_MAX_NUM +#define USB_EPT_MAX_NUM 8 +#endif +#endif + +/** + * @brief usb host mode config + */ +#ifdef USE_OTG_HOST_MODE +#ifndef USB_HOST_CHANNEL_NUM +#define USB_HOST_CHANNEL_NUM 16 +#endif + +/** + * @brief usb host mode fifo + */ +/* otg1 host fifo */ +#define USBH_RX_FIFO_SIZE 128 +#define USBH_NP_TX_FIFO_SIZE 96 +#define USBH_P_TX_FIFO_SIZE 96 + +/* otg2 host fifo */ +#define USBH2_RX_FIFO_SIZE 128 +#define USBH2_NP_TX_FIFO_SIZE 96 +#define USBH2_P_TX_FIFO_SIZE 96 +#endif + +/** + * @brief usb sof output enable + */ +/* #define USB_SOF_OUTPUT_ENABLE */ + +/** + * @brief usb vubs ignor, not use vbus pin + */ +#define USB_VBUS_IGNORE + +/** + * @brief usb low power wakeup handler enable + */ +/* #define USB_LOW_POWER_WAKUP */ + +void usb_delay_ms(uint32_t ms); +void usb_delay_us(uint32_t us); + +/** + * @} + */ + +/** + * @} + */ +#ifdef __cplusplus +} +#endif + +#endif /*__USB_CONF_F435_H*/ + + + diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/lib/Delay/delay.c b/.platformio/platforms/at32/examples/AT32F437/led_toggle/lib/Delay/delay.c new file mode 100644 index 0000000..ef3f19c --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/lib/Delay/delay.c @@ -0,0 +1,95 @@ +/*DO NOT USE - DON'T WORK*/ + +#include "delay.h" +#include "stdio.h" + + +/*delay macros*/ +#define STEP_DELAY_MS 500 + +/*delay variable*/ +static __IO float fac_us; +static __IO float fac_ms; + + +/** + * @brief initialize Delay function + * @param None + * @retval None + */ +void delay_init() +{ + /* configure systick */ + systick_clock_source_config(SYSTICK_CLOCK_SOURCE_AHBCLK_DIV8); + fac_us = system_core_clock / (1000000U); + fac_ms = fac_us * (1000U); +} + +/** + * @brief inserts a delay time. + * @param nus: specifies the delay time length, in microsecond. + * @retval none + */ +void delay_us(uint32_t nus) +{ + uint32_t temp = 0; + SysTick->LOAD = (uint32_t)(nus * fac_us); + SysTick->VAL = 0x00; + SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ; + do + { + temp = SysTick->CTRL; + }while((temp & 0x01) && !(temp & (1 << 16))); + + SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; + SysTick->VAL = 0x00; +} + +/** + * @brief inserts a delay time. + * @param nms: specifies the delay time length, in milliseconds. + * @retval none + */ +void delay_ms(uint16_t nms) +{ + uint32_t temp = 0; + while(nms) + { + if(nms > STEP_DELAY_MS) + { + SysTick->LOAD = (uint32_t)(STEP_DELAY_MS * fac_ms); + nms -= STEP_DELAY_MS; + } + else + { + SysTick->LOAD = (uint32_t)(nms * fac_ms); + nms = 0; + } + SysTick->VAL = 0x00; + SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; + do + { + temp = SysTick->CTRL; + }while((temp & 0x01) && !(temp & (1 << 16))); + + SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; + SysTick->VAL = 0x00; + } +} + +/** + * @brief inserts a delay time. + * @param sec: specifies the delay time, in seconds. + * @retval none + */ +void delay_sec(uint16_t sec) +{ + uint16_t index; + for(index = 0; index < sec; index++) + { + delay_ms(500); + delay_ms(500); + } +} + + diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/lib/Delay/delay.h b/.platformio/platforms/at32/examples/AT32F437/led_toggle/lib/Delay/delay.h similarity index 58% rename from .platformio/platforms/at32/examples/cmsis-acd1_dma/lib/Delay/delay.h rename to .platformio/platforms/at32/examples/AT32F437/led_toggle/lib/Delay/delay.h index 58cc121..9288794 100644 --- a/.platformio/platforms/at32/examples/cmsis-acd1_dma/lib/Delay/delay.h +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/lib/Delay/delay.h @@ -5,12 +5,12 @@ #ifndef __DELAY_H #define __DELAY_H -#include +#include "at32f435_437.h" /*Delay function*/ -void Delay_init(void); -void Delay_us(u32 nus); -void Delay_ms(u16 nms); -void Delay_sec(u16 sec); +void delay_init(void); +void delay_us(u32 nus); +void delay_ms(u16 nms); +void delay_sec(u16 sec); #endif \ No newline at end of file diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/lib/README b/.platformio/platforms/at32/examples/AT32F437/led_toggle/lib/README similarity index 100% rename from .platformio/platforms/at32/examples/cmsis-acd1_dma/lib/README rename to .platformio/platforms/at32/examples/AT32F437/led_toggle/lib/README diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/mdk_v5/led_toggle.uvoptx b/.platformio/platforms/at32/examples/AT32F437/led_toggle/mdk_v5/led_toggle.uvoptx new file mode 100644 index 0000000..f2ca0a6 --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/mdk_v5/led_toggle.uvoptx @@ -0,0 +1,344 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + led_toggle + 0x4 + ARM-ADS + + 12000000 + + 0 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 0 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AT32F437_4032 -FS08000000 -FL03F0000 -FP0($$Device:-AT32F437ZMT7$Flash\AT32F437_4032.FLM)) + + + + + 0 + + + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + user + 0 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\src\at32f435_437_clock.c + at32f435_437_clock.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\src\at32f435_437_int.c + at32f435_437_int.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\src\main.c + main.c + 0 + 0 + + + + + bsp + 0 + 0 + 0 + 0 + + 2 + 4 + 1 + 0 + 0 + 0 + ..\..\..\..\..\at32f435_437_board\at32f435_437_board.c + at32f435_437_board.c + 0 + 0 + + + + + firmware + 0 + 0 + 0 + 0 + + 3 + 5 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f435_437_gpio.c + at32f435_437_gpio.c + 0 + 0 + + + 3 + 6 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f435_437_crm.c + at32f435_437_crm.c + 0 + 0 + + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f435_437_usart.c + at32f435_437_usart.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\drivers\src\at32f435_437_misc.c + at32f435_437_misc.c + 0 + 0 + + + + + cmsis + 0 + 0 + 0 + 0 + + 4 + 9 + 1 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\cmsis\cm4\device_support\system_at32f435_437.c + system_at32f435_437.c + 0 + 0 + + + 4 + 10 + 2 + 0 + 0 + 0 + ..\..\..\..\..\..\libraries\cmsis\cm4\device_support\startup\mdk\startup_at32f435_437.s + startup_at32f435_437.s + 0 + 0 + + + + + readme + 0 + 0 + 0 + 0 + + 5 + 11 + 5 + 0 + 0 + 0 + ..\readme.txt + readme.txt + 0 + 0 + + + +
diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/mdk_v5/led_toggle.uvprojx b/.platformio/platforms/at32/examples/AT32F437/led_toggle/mdk_v5/led_toggle.uvprojx new file mode 100644 index 0000000..8aba61e --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/mdk_v5/led_toggle.uvprojx @@ -0,0 +1,487 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + led_toggle + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + -AT32F437ZMT7 + ArteryTek + ArteryTek.AT32F435_437_DFP.2.0.1 + IRAM(0x20000000,0x60000) IROM(0x08000000,0x3F0000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0AT32F437_4032 -FS08000000 -FL03F0000 -FP0($$Device:-AT32F437ZMT7$Flash\AT32F437_4032.FLM)) + 0 + $$Device:- + + + + + + + + + + $$Device:-AT32F437ZMT7$SVD\AT32F437xx_v2.svd + 0 + 0 + + + + AT32F437ZMT7$Device\Include\at32f435_437.h\ + AT32F437ZMT7$Device\Include\at32f435_437.h\ + + 0 + 0 + 0 + 0 + 1 + + .\objects\ + led_toggle + 1 + 0 + 1 + 1 + 1 + .\listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP -MPU + DCM.DLL + -pCM4 + SARMCM3.DLL + -MPU + TCM.DLL + -pCM4 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M4" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 8 + 0 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x60000 + + + 1 + 0x8000000 + 0x3f0000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x3f0000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x60000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + + AT32F437ZMT7,USE_STDPERIPH_DRIVER,AT_START_F437_V1 + + ..\..\..\..\..\..\libraries\drivers\inc;..\..\..\..\..\..\libraries\cmsis\cm4\core_support;..\..\..\..\..\..\libraries\cmsis\cm4\device_support;..\..\..\..\templates\inc;..\..\..\..\..\at32f435_437_board + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + user + + + at32f435_437_clock.c + 1 + ..\src\at32f435_437_clock.c + + + at32f435_437_int.c + 1 + ..\src\at32f435_437_int.c + + + main.c + 1 + ..\src\main.c + + + + + bsp + + + at32f435_437_board.c + 1 + ..\..\..\..\..\at32f435_437_board\at32f435_437_board.c + + + + + firmware + + + at32f435_437_gpio.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f435_437_gpio.c + + + at32f435_437_crm.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f435_437_crm.c + + + at32f435_437_usart.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f435_437_usart.c + + + at32f435_437_misc.c + 1 + ..\..\..\..\..\..\libraries\drivers\src\at32f435_437_misc.c + + + + + cmsis + + + system_at32f435_437.c + 1 + ..\..\..\..\..\..\libraries\cmsis\cm4\device_support\system_at32f435_437.c + + + startup_at32f435_437.s + 2 + ..\..\..\..\..\..\libraries\cmsis\cm4\device_support\startup\mdk\startup_at32f435_437.s + + + + + readme + + + readme.txt + 5 + ..\readme.txt + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/platformio.ini b/.platformio/platforms/at32/examples/AT32F437/led_toggle/platformio.ini similarity index 54% rename from .platformio/platforms/at32/examples/cmsis-acd1_dma/platformio.ini rename to .platformio/platforms/at32/examples/AT32F437/led_toggle/platformio.ini index a8ac39c..70ab93e 100644 --- a/.platformio/platforms/at32/examples/cmsis-acd1_dma/platformio.ini +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/platformio.ini @@ -7,12 +7,11 @@ ; Please visit documentation for the other options and examples ; http://docs.platformio.org/page/projectconf.html -[env:generic_f403a] +[env:led_togle] platform = at32 framework = cmsis -board = generic_f403a -monitor_speed = 115200 -upload_protocol = custom -upload_port = COM12 -upload_speed = 921600 ;115200 460800 921600 -upload_command = ${platformio.packages_dir}/framework-cmsis-at32f40/tools/stm32flash/stm32flash -g 0x8000000 -b $UPLOAD_SPEED -w $SOURCE $UPLOAD_PORT +board = generic_f437 +build_flags = -I include +monitor_speed = 921600 +;upload_protocol = serial +upload_protocol = jlink diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/readme.txt b/.platformio/platforms/at32/examples/AT32F437/led_toggle/readme.txt new file mode 100644 index 0000000..e494181 --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/readme.txt @@ -0,0 +1,9 @@ +/** + ************************************************************************** + * @file readme.txt + * @brief readme + ************************************************************************** + */ + + Light on/off pin PB12, 1Hz frequency for complete cycle. + diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/at32f435_437_clock.c b/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/at32f435_437_clock.c new file mode 100644 index 0000000..de1c563 --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/at32f435_437_clock.c @@ -0,0 +1,119 @@ +/** + ************************************************************************** + * @file at32f435_437_clock.c + * @brief system clock config program + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* includes ------------------------------------------------------------------*/ +#include "at32f435_437_clock.h" + +/** + * @brief system clock config program + * @note the system clock is configured as follow: + * system clock (sclk) = (hext * pll_ns)/(pll_ms * pll_fr) + * system clock source = pll (hext) + * - hext = HEXT_VALUE + * - sclk = 288000000 + * - ahbdiv = 1 + * - ahbclk = 288000000 + * - apb2div = 2 + * - apb2clk = 144000000 + * - apb1div = 2 + * - apb1clk = 144000000 + * - pll_ns = 144 + * - pll_ms = 1 + * - pll_fr = 4 + * @param none + * @retval none + */ +void system_clock_config(void) +{ + /* reset crm */ + //crm_reset(); + + /* enable pwc periph clock */ + crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE); + + /* config ldo voltage */ + pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V3); + + /* set the flash clock divider */ + flash_clock_divider_set(FLASH_CLOCK_DIV_3); + + crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE); + + /* wait till hext is ready */ + while(crm_hext_stable_wait() == ERROR) + { + } + + /* config pll clock resource + common frequency config list: pll source selected hick or hext(8mhz) + _________________________________________________________________________________________________ + | | | | | | | | | | | + |pll(mhz)| 288 | 252 | 216 | 192 | 180 | 144 | 108 | 72 | 36 | + |________|_________|_________|_________|_________|_________|_________|_________|_________________| + | | | | | | | | | | | + |pll_ns | 144 | 126 | 108 | 96 | 90 | 72 | 108 | 72 | 72 | + | | | | | | | | | | | + |pll_ms | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | + | | | | | | | | | | | + |pll_fr | FR_4 | FR_4 | FR_4 | FR_4 | FR_4 | FR_4 | FR_8 | FR_8 | FR_16| + |________|_________|_________|_________|_________|_________|_________|_________|________|________| + + if pll clock source selects hext with other frequency values, or configure pll to other + frequency values, please use the at32 new clock configuration tool for configuration. */ + crm_pll_config(CRM_PLL_SOURCE_HEXT, 144, 1, CRM_PLL_FR_4); + + /* enable pll */ + crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE); + + /* wait till pll is ready */ + while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET) + { + } + + /* config ahbclk */ + crm_ahb_div_set(CRM_AHB_DIV_1); + + /* config apb2clk, the maximum frequency of APB1/APB2 clock is 144 MHz */ + crm_apb2_div_set(CRM_APB2_DIV_2); + + /* config apb1clk, the maximum frequency of APB1/APB2 clock is 144 MHz */ + crm_apb1_div_set(CRM_APB1_DIV_2); + + /* enable auto step mode */ + crm_auto_step_mode_enable(TRUE); + + /* select pll as system clock source */ + crm_sysclk_switch(CRM_SCLK_PLL); + + /* wait till pll is used as system clock source */ + while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL) + { + } + + /* disable auto step mode */ + crm_auto_step_mode_enable(FALSE); + + /* update system_core_clock global variable */ + system_core_clock_update(); +} diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/at32f435_437_int.c b/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/at32f435_437_int.c new file mode 100644 index 0000000..dd10c37 --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/at32f435_437_int.c @@ -0,0 +1,139 @@ +/** + ************************************************************************** + * @file at32f435_437_int.c + * @brief main interrupt service routines. + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* includes ------------------------------------------------------------------*/ +#include "at32f435_437_int.h" + +/** @addtogroup AT32F437_periph_examples + * @{ + */ + +/** @addtogroup 437_GPIO_led_toggle + * @{ + */ + +/** + * @brief this function handles nmi exception. + * @param none + * @retval none + */ +void NMI_Handler(void) +{ +} + +/** + * @brief this function handles hard fault exception. + * @param none + * @retval none + */ +void HardFault_Handler(void) +{ + /* go to infinite loop when hard fault exception occurs */ + while(1) + { + } +} + +/** + * @brief this function handles memory manage exception. + * @param none + * @retval none + */ +void MemManage_Handler(void) +{ + /* go to infinite loop when memory manage exception occurs */ + while(1) + { + } +} + +/** + * @brief this function handles bus fault exception. + * @param none + * @retval none + */ +void BusFault_Handler(void) +{ + /* go to infinite loop when bus fault exception occurs */ + while(1) + { + } +} + +/** + * @brief this function handles usage fault exception. + * @param none + * @retval none + */ +void UsageFault_Handler(void) +{ + /* go to infinite loop when usage fault exception occurs */ + while(1) + { + } +} + +/** + * @brief this function handles svcall exception. + * @param none + * @retval none + */ +void SVC_Handler(void) +{ +} + +/** + * @brief this function handles debug monitor exception. + * @param none + * @retval none + */ +void DebugMon_Handler(void) +{ +} + +/** + * @brief this function handles pendsv_handler exception. + * @param none + * @retval none + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief this function handles systick handler. + * @param none + * @retval none + */ +void SysTick_Handler(void) +{ +} + +/** + * @} + */ + +/** + * @} + */ diff --git a/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/main.c b/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/main.c new file mode 100644 index 0000000..3c1826a --- /dev/null +++ b/.platformio/platforms/at32/examples/AT32F437/led_toggle/src/main.c @@ -0,0 +1,90 @@ +/** + ************************************************************************** + * @file main.c + * @brief main program + ************************************************************************** + * Copyright notice & Disclaimer + * + * The software Board Support Package (BSP) that is made available to + * download from Artery official website is the copyrighted work of Artery. + * Artery authorizes customers to use, copy, and distribute the BSP + * software and its related documentation for the purpose of design and + * development in conjunction with Artery microcontrollers. Use of the + * software is governed by this copyright notice and the following disclaimer. + * + * THIS SOFTWARE IS PROVIDED ON "AS IS" BASIS WITHOUT WARRANTIES, + * GUARANTEES OR REPRESENTATIONS OF ANY KIND. ARTERY EXPRESSLY DISCLAIMS, + * TO THE FULLEST EXTENT PERMITTED BY LAW, ALL EXPRESS, IMPLIED OR + * STATUTORY OR OTHER WARRANTIES, GUARANTEES OR REPRESENTATIONS, + * INCLUDING BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * + ************************************************************************** + */ + +/* includes */ +#include "at32f435_437_clock.h" +#include "delay.h" + +#define LEDPERIPH CRM_GPIOB_PERIPH_CLOCK +#define LEDPORT (GPIOB) +#define LEDPIN (GPIO_PINS_12) + +/** @addtogroup AT32F437_periph_examples + * @{ + */ + +/** @addtogroup 437_GPIO_led_toggle GPIO_led_toggle + * @{ + */ + +/** + * @brief gpio configuration. + * @param none + * @retval none + */ +static void gpio_config(void) +{ + gpio_init_type gpio_init_struct; + crm_periph_clock_enable(LEDPERIPH, TRUE); + + gpio_default_para_init(&gpio_init_struct); + + //configure the led gpio + gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER; + gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; + gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT; + gpio_init_struct.gpio_pins = LEDPIN; + gpio_init_struct.gpio_pull = GPIO_PULL_NONE; + gpio_init(LEDPORT, &gpio_init_struct); +} + +/** + * @brief main function. + * @param none + * @retval none + */ +int main(void) +{ + system_clock_config(); + delay_init(); + + gpio_config(); + + gpio_bits_reset(LEDPORT, LEDPIN); + + for (;;) { + delay_ms(500); + LEDPORT->odt ^= LEDPIN; // toggle pin + } + + return 0; +} + +/** + * @} + */ + +/** + * @} + */ diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/.travis.yml b/.platformio/platforms/at32/examples/cmsis-acd1_dma/.travis.yml deleted file mode 100644 index 7c486f1..0000000 --- a/.platformio/platforms/at32/examples/cmsis-acd1_dma/.travis.yml +++ /dev/null @@ -1,67 +0,0 @@ -# Continuous Integration (CI) is the practice, in software -# engineering, of merging all developer working copies with a shared mainline -# several times a day < https://docs.platformio.org/page/ci/index.html > -# -# Documentation: -# -# * Travis CI Embedded Builds with PlatformIO -# < https://docs.travis-ci.com/user/integration/platformio/ > -# -# * PlatformIO integration with Travis CI -# < https://docs.platformio.org/page/ci/travis.html > -# -# * User Guide for `platformio ci` command -# < https://docs.platformio.org/page/userguide/cmd_ci.html > -# -# -# Please choose one of the following templates (proposed below) and uncomment -# it (remove "# " before each line) or use own configuration according to the -# Travis CI documentation (see above). -# - - -# -# Template #1: General project. Test it using existing `platformio.ini`. -# - -# language: python -# python: -# - "2.7" -# -# sudo: false -# cache: -# directories: -# - "~/.platformio" -# -# install: -# - pip install -U platformio -# - platformio update -# -# script: -# - platformio run - - -# -# Template #2: The project is intended to be used as a library with examples. -# - -# language: python -# python: -# - "2.7" -# -# sudo: false -# cache: -# directories: -# - "~/.platformio" -# -# env: -# - PLATFORMIO_CI_SRC=path/to/test/file.c -# - PLATFORMIO_CI_SRC=examples/file.ino -# - PLATFORMIO_CI_SRC=path/to/test/directory -# -# install: -# - pip install -U platformio -# - platformio update -# -# script: -# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/README.rst b/.platformio/platforms/at32/examples/cmsis-acd1_dma/README.rst deleted file mode 100644 index 1890ad5..0000000 --- a/.platformio/platforms/at32/examples/cmsis-acd1_dma/README.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. Copyright 2014-present PlatformIO - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -How to build PlatformIO based project -===================================== - -1. `Install PlatformIO Core `_ -2. Download `development platform with examples `_ -3. Extract ZIP archive -4. Run these commands: - -.. code-block:: bash - - # Change directory to example - > cd platform-at32/examples/cmsis-blink - - # Build project - > platformio run - - # Upload firmware - > platformio run --target upload - - # Build specific environment - > platformio run -e disco_f407vg - - # Upload firmware for the specific environment - > platformio run -e disco_f407vg --target upload - - # Clean build files - > platformio run --target clean diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/include/README b/.platformio/platforms/at32/examples/cmsis-acd1_dma/include/README deleted file mode 100644 index 194dcd4..0000000 --- a/.platformio/platforms/at32/examples/cmsis-acd1_dma/include/README +++ /dev/null @@ -1,39 +0,0 @@ - -This directory is intended for project header files. - -A header file is a file containing C declarations and macro definitions -to be shared between several project source files. You request the use of a -header file in your project source file (C, C++, etc) located in `src` folder -by including it, with the C preprocessing directive `#include'. - -```src/main.c - -#include "header.h" - -int main (void) -{ - ... -} -``` - -Including a header file produces the same results as copying the header file -into each source file that needs it. Such copying would be time-consuming -and error-prone. With a header file, the related declarations appear -in only one place. If they need to be changed, they can be changed in one -place, and programs that include the header file will automatically use the -new version when next recompiled. The header file eliminates the labor of -finding and changing all the copies as well as the risk that a failure to -find one copy will result in inconsistencies within a program. - -In C, the usual convention is to give header files names that end with `.h'. -It is most portable to use only letters, digits, dashes, and underscores in -header file names, and at most one dot. - -Read more about using header files in official GCC documentation: - -* Include Syntax -* Include Operation -* Once-Only Headers -* Computed Includes - -https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/lib/Delay/delay.c b/.platformio/platforms/at32/examples/cmsis-acd1_dma/lib/Delay/delay.c deleted file mode 100644 index 2324b69..0000000 --- a/.platformio/platforms/at32/examples/cmsis-acd1_dma/lib/Delay/delay.c +++ /dev/null @@ -1,92 +0,0 @@ -#include "delay.h" -#include "stdio.h" - -/*delay macros*/ -#define STEP_DELAY_MS 500 - -/*delay variable*/ -static __IO float fac_us; -static __IO float fac_ms; - - -/** - * @brief initialize Delay function - * @param None - * @retval None - */ -void Delay_init() -{ - /*Config Systick*/ - SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); - fac_us=(float)SystemCoreClock/(8 * 1000000); - fac_ms=fac_us*1000; -} - -/** - * @brief Inserts a delay time. - * @param nus: specifies the delay time length, in microsecond. - * @retval None - */ -void Delay_us(u32 nus) -{ - u32 temp; - SysTick->LOAD = (u32)(nus*fac_us); - SysTick->VAL = 0x00; - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ; - do - { - temp = SysTick->CTRL; - }while((temp & 0x01) &&! (temp & (1<<16))); - - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; - SysTick->VAL = 0X00; -} - -/** - * @brief Inserts a delay time. - * @param nms: specifies the delay time length, in milliseconds. - * @retval None - */ -void Delay_ms(u16 nms) -{ - u32 temp; - while(nms) - { - if(nms > STEP_DELAY_MS) - { - SysTick->LOAD = (u32)(STEP_DELAY_MS * fac_ms); - nms -= STEP_DELAY_MS; - } - else - { - SysTick->LOAD = (u32)(nms * fac_ms); - nms = 0; - } - SysTick->VAL = 0x00; - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; - do - { - temp = SysTick->CTRL; - }while( (temp & 0x01) && !(temp & (1<<16)) ); - - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; - SysTick->VAL = 0X00; - } -} - -/** - * @brief Inserts a delay time. - * @param sec: specifies the delay time length, in seconds. - * @retval None - */ -void Delay_sec(u16 sec) -{ - u16 i; - for(i=0; i 0U) - { - len--; - while ( USART_GetFlagStatus(AT32_PRINT_UART, USART_FLAG_TRAC) == RESET ); - AT32_PRINT_UART->DT = (buff[i++] & (uint16_t)0x01FF); - } - while ( USART_GetFlagStatus(AT32_PRINT_UART, USART_FLAG_TRAC) == RESET ); -} - -/** - * @brief initialize UART1 - * @param bound: UART BaudRate - * @retval None - */ -void UART_Print_Init(uint32_t bound) -{ - GPIO_InitType GPIO_InitStructure; - USART_InitType USART_InitStructure; - - /*Enable the UART Clock*/ - RCC_APB2PeriphClockCmd(AT32_PRINT_UARTTX_GPIO_RCC | AT32_PRINT_UARTRX_GPIO_RCC, ENABLE); - RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_USART1, ENABLE); - - /* Configure the UART1 TX pin */ - GPIO_StructInit(&GPIO_InitStructure); - GPIO_InitStructure.GPIO_Pins = AT32_PRINT_UARTTX_PIN; - GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; - GPIO_Init(AT32_PRINT_UARTTX_GPIO, &GPIO_InitStructure); - - /* Configure the UART1 RX pin */ - GPIO_InitStructure.GPIO_Pins = AT32_PRINT_UARTRX_PIN;//PA10 - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; - GPIO_Init(AT32_PRINT_UARTRX_GPIO, &GPIO_InitStructure); - - /*Configure UART param*/ - USART_StructInit(&USART_InitStructure); - USART_InitStructure.USART_BaudRate = bound; - USART_InitStructure.USART_WordLength = USART_WordLength_8b; - USART_InitStructure.USART_StopBits = USART_StopBits_1; - USART_InitStructure.USART_Parity = USART_Parity_No; - USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; - USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; - - USART_Init(AT32_PRINT_UART, &USART_InitStructure); - USART_INTConfig(AT32_PRINT_UART, USART_INT_RDNE, ENABLE); - USART_Cmd(AT32_PRINT_UART, ENABLE); -} - -/** - * @brief Main program - * @param None - * @retval None - */ -int main(void) -{ - /* System clocks configuration */ - RCC_Configuration(); - - /* GPIO configuration ------------------------------------------------------*/ - GPIO_Configuration(); - - /* UART configuration ------------------------------------------------------*/ - UART_Print_Init(115200); - UART_Print_sendData("ADC Test", 8); - - /* DMA1 channel1 configuration ----------------------------------------------*/ - DMA_Reset(DMA1_Channel1); - DMA_DefaultInitParaConfig(&DMA_InitStructure); - DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->RDOR; - DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&ADCConvertedValue; - DMA_InitStructure.DMA_Direction = DMA_DIR_PERIPHERALSRC; - DMA_InitStructure.DMA_BufferSize = 1; - DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE; - DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_DISABLE; - DMA_InitStructure.DMA_PeripheralDataWidth = DMA_PERIPHERALDATAWIDTH_HALFWORD; - DMA_InitStructure.DMA_MemoryDataWidth = DMA_MEMORYDATAWIDTH_HALFWORD; - DMA_InitStructure.DMA_Mode = DMA_MODE_CIRCULAR; - DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH; - DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE; - DMA_Init(DMA1_Channel1, &DMA_InitStructure); - /* Enable DMA1 channel1 */ - DMA_ChannelEnable(DMA1_Channel1, ENABLE); - - /* ADC1 configuration ------------------------------------------------------*/ - ADC_StructInit(&ADC_InitStructure); - ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; - ADC_InitStructure.ADC_ScanMode = DISABLE; - ADC_InitStructure.ADC_ContinuousMode = ENABLE; - ADC_InitStructure.ADC_ExternalTrig = ADC_ExternalTrig_None; - ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; - ADC_InitStructure.ADC_NumOfChannel = 1; - ADC_Init(ADC1, &ADC_InitStructure); - - /* ADC1 regular channels configuration */ - ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 1, ADC_SampleTime_28_5); - - /* Enable ADC1 DMA */ - ADC_DMACtrl(ADC1, ENABLE); - - /* Enable ADC1 */ - ADC_Ctrl(ADC1, ENABLE); - - /* Enable ADC1 reset calibration register */ - ADC_RstCalibration(ADC1); - /* Check the end of ADC1 reset calibration register */ - while(ADC_GetResetCalibrationStatus(ADC1)); - - /* Start ADC1 calibration */ - ADC_StartCalibration(ADC1); - /* Check the end of ADC1 calibration */ - while(ADC_GetCalibrationStatus(ADC1)); - - /* Start ADC1 Software Conversion */ - ADC_SoftwareStartConvCtrl(ADC1, ENABLE); - - while (1) - { - - } -} - -/** - * @brief Configures the different system clocks. - * @param None - * @retval None - */ -void RCC_Configuration(void) -{ - /* ADCCLK = PCLK2/6 */ - RCC_ADCCLKConfig(RCC_APB2CLK_Div6); - - /* Enable peripheral clocks ------------------------------------------------*/ - /* Enable DMA1 clocks */ - RCC_AHBPeriphClockCmd(RCC_AHBPERIPH_DMA1, ENABLE); - - /* Enable ADC1 and GPIOC clocks */ - RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_ADC1 | RCC_APB2PERIPH_GPIOC, ENABLE); -} - -/** - * @brief Configures the different GPIO ports. - * @param None - * @retval None - */ -void GPIO_Configuration(void) -{ - GPIO_InitType GPIO_InitStructure; - - /* Configure PC.04 (ADC Channel14) as analog input -------------------------*/ - GPIO_StructInit(&GPIO_InitStructure); - GPIO_InitStructure.GPIO_Pins = GPIO_Pins_4; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_ANALOG; - GPIO_Init(GPIOC, &GPIO_InitStructure); -} - -/** - * @} - */ - -/** - * @} - */ - -/******************* (C) COPYRIGHT 2018 ArteryTek *****END OF FILE****/ diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/src/main.h b/.platformio/platforms/at32/examples/cmsis-acd1_dma/src/main.h deleted file mode 100644 index 5a3e9ac..0000000 --- a/.platformio/platforms/at32/examples/cmsis-acd1_dma/src/main.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - - -/**************** UART printf ****************/ -#define AT32_PRINT_UART USART1 -#define USARTx_IRQn USART1_IRQn -#define USARTx_IRQ_Handler USART1_IRQHandler -#define AT32_PRINT_UART_RCC RCC_APB2PERIPH_USART1 - -/*Tx*/ -#define AT32_PRINT_UARTTX_PIN GPIO_Pins_9 -#define AT32_PRINT_UARTTX_GPIO GPIOA -#define AT32_PRINT_UARTTX_GPIO_RCC RCC_APB2PERIPH_GPIOA - -/*Rx*/ -#define AT32_PRINT_UARTRX_PIN GPIO_Pins_10 -#define AT32_PRINT_UARTRX_GPIO GPIOA -#define AT32_PRINT_UARTRX_GPIO_RCC RCC_APB2PERIPH_GPIOA -/**************** End UART printf ****************/ - -void AT32_Board_Init(void); -void AT32_USB_GPIO_init(void); - -#endif /* __MAIN_H */ - - diff --git a/.platformio/platforms/at32/examples/cmsis-acd1_dma/src/system_at32f4xx.c b/.platformio/platforms/at32/examples/cmsis-acd1_dma/src/system_at32f4xx.c deleted file mode 100644 index b73ff8c..0000000 --- a/.platformio/platforms/at32/examples/cmsis-acd1_dma/src/system_at32f4xx.c +++ /dev/null @@ -1,3473 +0,0 @@ -/** - ****************************************************************************** - * File : system_at32f4xx.c - * Version: V1.2.2 - * Date : 2020-07-01 - * Brief : CMSIS Cortex-M4 system source file - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup at32f4xx_system - * @{ - */ - -/** @addtogroup at32f4xx_System_Private_Includes - * @{ - */ - -#include "at32f4xx.h" - -/** - * @} - */ - -/** @addtogroup at32f4xx_System_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup at32f4xx_System_Private_Defines - * @{ - */ - -/*!< Uncomment the line corresponding to the desired System clock (SYSCLK) - frequency (after reset the HSI is used as SYSCLK source) - - IMPORTANT NOTE: - ============== - 1. After each device reset the HSI is used as System clock source. - - 2. Please make sure that the selected System clock doesn't exceed your device's - maximum frequency. - - 3. If none of the define below is enabled, the HSI is used as System clock - source. - - 4. The System clock configuration functions provided within this file assume that: - - For at32f4xx devices, an external 8MHz crystal is used to drive the System clock. - If you are using different crystal you have to adapt those functions accordingly. - - Clock (MHz) - PLL from HSE or HSI - SYSCLK HCLK PCLK2 PCLK1 - 24 24 24 24 - 36 36 36 36 - 48 48 48 24 - 56 56 56 28 - 72 72 72 36 - 96 96 48 48 - 108 108 54 54 - 120 120 60 60 - 144 144 72 72 - 150 150 75 75 - 168 168 84 84 - 176 176 88 88 - 192 192 96 96 - 200 200 100 100 - 224 224 112 112 - 240 240 120 120 - */ - -#if defined (AT32F403xx) || defined (AT32F413xx) || \ - defined (AT32F415xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) -/* #define SYSCLK_FREQ_HSE HSE_VALUE */ -/* #define SYSCLK_FREQ_24MHz 24000000 */ -/* #define SYSCLK_FREQ_36MHz 36000000 */ -/* #define SYSCLK_FREQ_48MHz 48000000 */ -/* #define SYSCLK_FREQ_56MHz 56000000 */ -#define SYSCLK_FREQ_72MHz 72000000 -/* #define SYSCLK_FREQ_96MHz 96000000 */ -/* #define SYSCLK_FREQ_108MHz 108000000 */ -/* #define SYSCLK_FREQ_120MHz 120000000 */ -/* #define SYSCLK_FREQ_144MHz 144000000 */ -/* #define SYSCLK_FREQ_24MHz_HSI 24000000 */ -/* #define SYSCLK_FREQ_36MHz_HSI 36000000 */ -/* #define SYSCLK_FREQ_48MHz_HSI 48000000 */ -/* #define SYSCLK_FREQ_56MHz_HSI 56000000 */ -/* #define SYSCLK_FREQ_72MHz_HSI 72000000 */ -/* #define SYSCLK_FREQ_96MHz_HSI 96000000 */ -/* #define SYSCLK_FREQ_108MHz_HSI 108000000 */ -/* #define SYSCLK_FREQ_120MHz_HSI 120000000 */ -/* #define SYSCLK_FREQ_144MHz_HSI 144000000 */ -#endif - -#if defined (AT32F415xx) -/* #define SYSCLK_FREQ_150MHz 150000000 */ -/* #define SYSCLK_FREQ_150MHz_HSI 150000000 */ -#endif - -#if defined (AT32F403xx) || defined (AT32F413xx) || \ - defined (AT32F403Axx)|| defined (AT32F407xx) -/* #define SYSCLK_FREQ_168MHz 168000000 */ -/* #define SYSCLK_FREQ_176MHz 176000000 */ -/* #define SYSCLK_FREQ_192MHz 192000000 */ -/* #define SYSCLK_FREQ_200MHz 200000000 */ -/* #define SYSCLK_FREQ_168MHz_HSI 168000000 */ -/* #define SYSCLK_FREQ_176MHz_HSI 176000000 */ -/* #define SYSCLK_FREQ_192MHz_HSI 192000000 */ -/* #define SYSCLK_FREQ_200MHz_HSI 200000000 */ -#endif - -#if defined (AT32F403Axx)|| defined (AT32F407xx) -/* #define SYSCLK_FREQ_224MHz 224000000 */ -/* #define SYSCLK_FREQ_240MHz 240000000 */ -/* #define SYSCLK_FREQ_224MHz_HSI 224000000 */ -/* #define SYSCLK_FREQ_240MHz_HSI 240000000 */ -#endif - -/*!< Uncomment the following line if you need to use external SRAM mounted - (AT32 High density and XL-density devices) as data memory */ - -/* #define DATA_IN_ExtSRAM */ - -/*!< Uncomment the following line if you need to relocate your vector Table in - Internal SRAM. */ -/* #define VECT_TAB_SRAM */ -#define VECT_TAB_OFFSET 0x0 /*!< Vector Table base offset field. -This value must be a multiple of 0x200. */ - - -/** - * @} - */ - -/** @addtogroup at32f4xx_System_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup at32f4xx_System_Private_Variables - * @{ - */ - -/******************************************************************************* -* Clock Definitions -*******************************************************************************/ -#ifdef SYSCLK_FREQ_HSE -uint32_t SystemCoreClock = SYSCLK_FREQ_HSE; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_24MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_36MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_48MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_56MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_72MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_96MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_96MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_108MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_108MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_120MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_120MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_144MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_144MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_150MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_150MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_168MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_168MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_176MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_176MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_192MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_192MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_200MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_200MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_224MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_224MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_240MHz -uint32_t SystemCoreClock = SYSCLK_FREQ_240MHz; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_24MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_24MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_36MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_36MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_48MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_48MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_56MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_56MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_72MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_72MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_96MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_96MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_108MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_108MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_120MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_120MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_144MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_144MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_150MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_150MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_168MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_168MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_176MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_176MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_192MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_192MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_200MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_200MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_224MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_224MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#elif defined SYSCLK_FREQ_240MHz_HSI -uint32_t SystemCoreClock = SYSCLK_FREQ_240MHz_HSI; /*!< System Clock Frequency (Core Clock) */ -#else /*!< HSI Selected as System Clock source */ -#define SYSCLK_FREQ_HSI HSI_VALUE -uint32_t SystemCoreClock = HSI_VALUE; /*!< System Clock Frequency (Core Clock) */ -#endif - -__I uint8_t AHBPscTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; -/** - * @} - */ - -/** @addtogroup at32f4xx_System_Private_FunctionPrototypes - * @{ - */ - -static void SetSysClock(void); - -#ifdef SYSCLK_FREQ_HSE -static void SetSysClockToHSE(void); -#elif defined SYSCLK_FREQ_24MHz -static void SetSysClockTo24M(void); -#elif defined SYSCLK_FREQ_36MHz -static void SetSysClockTo36M(void); -#elif defined SYSCLK_FREQ_48MHz -static void SetSysClockTo48M(void); -#elif defined SYSCLK_FREQ_56MHz -static void SetSysClockTo56M(void); -#elif defined SYSCLK_FREQ_72MHz -static void SetSysClockTo72M(void); -#elif defined SYSCLK_FREQ_96MHz -static void SetSysClockTo96M(void); -#elif defined SYSCLK_FREQ_108MHz -static void SetSysClockTo108M(void); -#elif defined SYSCLK_FREQ_120MHz -static void SetSysClockTo120M(void); -#elif defined SYSCLK_FREQ_144MHz -static void SetSysClockTo144M(void); -#elif defined SYSCLK_FREQ_150MHz -static void SetSysClockTo150M(void); -#elif defined SYSCLK_FREQ_168MHz -static void SetSysClockTo168M(void); -#elif defined SYSCLK_FREQ_176MHz -static void SetSysClockTo176M(void); -#elif defined SYSCLK_FREQ_192MHz -static void SetSysClockTo192M(void); -#elif defined SYSCLK_FREQ_200MHz -static void SetSysClockTo200M(void); -#elif defined SYSCLK_FREQ_224MHz -static void SetSysClockTo224M(void); -#elif defined SYSCLK_FREQ_240MHz -static void SetSysClockTo240M(void); -#elif defined SYSCLK_FREQ_24MHz_HSI -static void SetSysClockTo24MHSI(void); -#elif defined SYSCLK_FREQ_36MHz_HSI -static void SetSysClockTo36MHSI(void); -#elif defined SYSCLK_FREQ_48MHz_HSI -static void SetSysClockTo48MHSI(void); -#elif defined SYSCLK_FREQ_56MHz_HSI -static void SetSysClockTo56MHSI(void); -#elif defined SYSCLK_FREQ_72MHz_HSI -static void SetSysClockTo72MHSI(void); -#elif defined SYSCLK_FREQ_96MHz_HSI -static void SetSysClockTo96MHSI(void); -#elif defined SYSCLK_FREQ_108MHz_HSI -static void SetSysClockTo108MHSI(void); -#elif defined SYSCLK_FREQ_120MHz_HSI -static void SetSysClockTo120MHSI(void); -#elif defined SYSCLK_FREQ_144MHz_HSI -static void SetSysClockTo144MHSI(void); -#elif defined SYSCLK_FREQ_150MHz_HSI -static void SetSysClockTo150MHSI(void); -#elif defined SYSCLK_FREQ_168MHz_HSI -static void SetSysClockTo168MHSI(void); -#elif defined SYSCLK_FREQ_176MHz_HSI -static void SetSysClockTo176MHSI(void); -#elif defined SYSCLK_FREQ_192MHz_HSI -static void SetSysClockTo192MHSI(void); -#elif defined SYSCLK_FREQ_200MHz_HSI -static void SetSysClockTo200MHSI(void); -#elif defined SYSCLK_FREQ_224MHz_HSI -static void SetSysClockTo224MHSI(void); -#elif defined SYSCLK_FREQ_240MHz_HSI -static void SetSysClockTo240MHSI(void); -#endif - -#ifdef DATA_IN_ExtSRAM -static void SystemInit_ExtMemCtrl(void); -#endif /* DATA_IN_ExtSRAM */ - -/** - * @} - */ - -/** @addtogroup at32f4xx_System_Private_Functions - * @{ - */ - -/** - * @brief Setup the microcontroller system - * Initialize the Embedded Flash Interface, the PLL and update the - * SystemCoreClock variable. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -void SystemInit (void) -{ -#if defined (AT32F415xx) - /* Enable low power mode, 0x40007050[bit2] */ - RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_PWR, ENABLE); - *(volatile uint8_t *)(0x40007050) |= (uint8_t)(0x1 << 2); - RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_PWR, DISABLE); -#endif - -#if defined (__FPU_USED) && (__FPU_USED == 1U) - SCB->CPACR |= ((3U << 10U * 2U) | /* set CP10 Full Access */ - (3U << 11U * 2U) ); /* set CP11 Full Access */ -#endif - - /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ - /* Set HSIEN bit */ - BIT_SET(RCC->CTRL, RCC_CTRL_HSIEN); - - /* Reset SW, AHBPSC, APB1PSC, APB2PSC, ADCPSC and CLKOUT bits */ - BIT_CLEAR(RCC->CFG, RCC_CFG_SYSCLKSEL | RCC_CFG_AHBPSC | \ - RCC_CFG_APB1PSC | RCC_CFG_APB2PSC | \ - RCC_CFG_ADCPSC | RCC_CFG_CLKOUT); - - /* Reset HSEEN, HSECFDEN and PLLEN bits */ - BIT_CLEAR(RCC->CTRL, RCC_CTRL_HSEEN | RCC_CTRL_HSECFDEN | \ - RCC_CTRL_PLLEN); - - /* Reset HSEBYPS bit */ - BIT_CLEAR(RCC->CTRL, RCC_CTRL_HSEBYPS); - - /* Reset PLLRC, PLLHSEPSC, PLLMUL, USBPSC and PLLRANGE bits */ - BIT_CLEAR(RCC->CFG, RCC_CFG_PLLRC | RCC_CFG_PLLHSEPSC | \ - RCC_CFG_PLLMULT | RCC_CFG_USBPSC | RCC_CFG_PLLRANGE); - - /* Reset USB768B, CLKOUT[3], HSICAL_KEY[7:0] */ - BIT_CLEAR(RCC->MISC, 0x010100FF); - - /* Disable all interrupts and clear pending bits */ - RCC->CLKINT = RCC_CLKINT_LSISTBLFC | RCC_CLKINT_LSESTBLFC | \ - RCC_CLKINT_HSISTBLFC | RCC_CLKINT_HSESTBLFC | \ - RCC_CLKINT_PLLSTBLFC | RCC_CLKINT_HSECFDFC; - -#ifdef DATA_IN_ExtSRAM - SystemInit_ExtMemCtrl(); -#endif /* DATA_IN_ExtSRAM */ - - /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */ - /* Configure the Flash Latency cycles and enable prefetch buffer */ - SetSysClock(); - -#ifdef VECT_TAB_SRAM - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ -#else - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ -#endif -} - -/** - * @brief Update SystemCoreClock variable according to Clock Register Values. - * The SystemCoreClock variable contains the core clock (HCLK), it can - * be used by the user application to setup the SysTick timer or configure - * other parameters. - * - * @note Each time the core clock (HCLK) changes, this function must be called - * to update SystemCoreClock variable value. Otherwise, any configuration - * based on this variable will be incorrect. - * - * @note - The system frequency computed by this function is not the real - * frequency in the chip. It is calculated based on the predefined - * constant and the selected clock source: - * - * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) - * - * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) - * - * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) - * or HSI_VALUE(*) multiplied by the PLL factors. - * - * (*) HSI_VALUE is a constant defined in at32f4xx.h file (default value - * 8 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * - * (**) HSE_VALUE is a constant defined in at32f4xx.h file (default value - * 8 MHz or 25 MHz, depedning on the product used), user has to ensure - * that HSE_VALUE is same as the real frequency of the crystal used. - * Otherwise, this function may have wrong result. - * - * - The result of this function could be not correct when using fractional - * value for HSE crystal. - * @param None - * @retval None - */ -void SystemCoreClockUpdate (void) -{ - uint32_t tmp = 0, pllmult = 0, pllrefclk = 0, tempcfg = 0; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFG & RCC_CFG_SYSCLKSTS; - - switch (tmp) - { - case RCC_CFG_SYSCLKSTS_HSI: /* HSI used as system clock */ - SystemCoreClock = HSI_VALUE; - break; - - case RCC_CFG_SYSCLKSTS_HSE: /* HSE used as system clock */ - SystemCoreClock = HSE_VALUE; - break; - - case RCC_CFG_SYSCLKSTS_PLL: /* PLL used as system clock */ - /* Get PLL clock source and multiplication factor ----------------------*/ - pllrefclk = RCC->CFG & RCC_CFG_PLLRC; - tempcfg = RCC->CFG; - pllmult = RCC_GET_PLLMULT(tempcfg); - - if (pllrefclk == RCC_PLLRefClk_HSI_Div2) - { - /* HSI oscillator clock divided by 2 selected as PLL clock entry */ - SystemCoreClock = (HSI_VALUE >> 1) * pllmult; - } - else - { - /* HSE selected as PLL clock entry */ - if ((RCC->CFG & RCC_CFG_PLLHSEPSC) != (uint32_t)RESET) - { - /* HSE oscillator clock divided by 2 */ - SystemCoreClock = (HSE_VALUE >> 1) * pllmult; - } - else - { - SystemCoreClock = HSE_VALUE * pllmult; - } - } - - break; - - default: - SystemCoreClock = HSI_VALUE; - break; - } - - /* Compute HCLK clock frequency ----------------*/ - /* Get HCLK prescaler */ - tmp = AHBPscTable[((RCC->CFG & RCC_CFG_AHBPSC) >> 4)]; - /* HCLK clock frequency */ - SystemCoreClock >>= tmp; -} - -/** - * @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. - * @param None - * @retval None - */ -static void SetSysClock(void) -{ -#ifdef SYSCLK_FREQ_HSE - SetSysClockToHSE(); -#elif defined SYSCLK_FREQ_24MHz - SetSysClockTo24M(); -#elif defined SYSCLK_FREQ_36MHz - SetSysClockTo36M(); -#elif defined SYSCLK_FREQ_48MHz - SetSysClockTo48M(); -#elif defined SYSCLK_FREQ_56MHz - SetSysClockTo56M(); -#elif defined SYSCLK_FREQ_72MHz - SetSysClockTo72M(); -#elif defined SYSCLK_FREQ_96MHz - SetSysClockTo96M(); -#elif defined SYSCLK_FREQ_108MHz - SetSysClockTo108M(); -#elif defined SYSCLK_FREQ_120MHz - SetSysClockTo120M(); -#elif defined SYSCLK_FREQ_144MHz - SetSysClockTo144M(); -#elif defined SYSCLK_FREQ_150MHz - SetSysClockTo150M(); -#elif defined SYSCLK_FREQ_168MHz - SetSysClockTo168M(); -#elif defined SYSCLK_FREQ_176MHz - SetSysClockTo176M(); -#elif defined SYSCLK_FREQ_192MHz - SetSysClockTo192M(); -#elif defined SYSCLK_FREQ_200MHz - SetSysClockTo200M(); -#elif defined SYSCLK_FREQ_224MHz - SetSysClockTo224M(); -#elif defined SYSCLK_FREQ_240MHz - SetSysClockTo240M(); -#elif defined SYSCLK_FREQ_24MHz_HSI - SetSysClockTo24MHSI(); -#elif defined SYSCLK_FREQ_36MHz_HSI - SetSysClockTo36MHSI(); -#elif defined SYSCLK_FREQ_48MHz_HSI - SetSysClockTo48MHSI(); -#elif defined SYSCLK_FREQ_56MHz_HSI - SetSysClockTo56MHSI(); -#elif defined SYSCLK_FREQ_72MHz_HSI - SetSysClockTo72MHSI(); -#elif defined SYSCLK_FREQ_96MHz_HSI - SetSysClockTo96MHSI(); -#elif defined SYSCLK_FREQ_108MHz_HSI - SetSysClockTo108MHSI(); -#elif defined SYSCLK_FREQ_120MHz_HSI - SetSysClockTo120MHSI(); -#elif defined SYSCLK_FREQ_144MHz_HSI - SetSysClockTo144MHSI(); -#elif defined SYSCLK_FREQ_150MHz_HSI - SetSysClockTo150MHSI(); -#elif defined SYSCLK_FREQ_168MHz_HSI - SetSysClockTo168MHSI(); -#elif defined SYSCLK_FREQ_176MHz_HSI - SetSysClockTo176MHSI(); -#elif defined SYSCLK_FREQ_192MHz_HSI - SetSysClockTo192MHSI(); -#elif defined SYSCLK_FREQ_200MHz_HSI - SetSysClockTo200MHSI(); -#elif defined SYSCLK_FREQ_224MHz_HSI - SetSysClockTo224MHSI(); -#elif defined SYSCLK_FREQ_240MHz_HSI - SetSysClockTo240MHSI(); -#endif - - /* If none of the define above is enabled, the HSI is used as System clock - source (default after reset) */ -} - -/** - * @brief Setup the external memory controller. Called in startup_at32f4xx.s - * before jump to __main - * @param None - * @retval None - */ -#ifdef DATA_IN_ExtSRAM -/** - * @brief Setup the external memory controller. - * Called in startup_at32f4xx_xx.s/.c before jump to main. - * This function configures the external SRAM mounted - * (AT32 High density devices). This SRAM will be used as program - * data memory (including heap and stack). - * @param None - * @retval None - */ -void SystemInit_ExtMemCtrl(void) -{ - /* Enable XMC clock */ - RCC->AHBEN = RCC_AHBEN_SRAMEN | RCC_AHBEN_FLASHEN | RCC_AHBEN_XMCEN; - - /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ - RCC->APB2EN = RCC_APB2EN_GPIODEN | RCC_APB2EN_GPIOEEN | RCC_APB2EN_GPIOFEN | RCC_APB2EN_GPIOGEN; - - /* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ - /*---------------- SRAM Address lines configuration -------------------------*/ - /*---------------- NOE and NWE configuration --------------------------------*/ - /*---------------- NE3 configuration ----------------------------------------*/ - /*---------------- NBL0, NBL1 configuration ---------------------------------*/ - - GPIOD->CTRLL = 0x44BB44BB; - GPIOD->CTRLH = 0xBBBBBBBB; - - GPIOE->CTRLL = 0xB44444BB; - GPIOE->CTRLH = 0xBBBBBBBB; - - GPIOF->CTRLL = 0x44BBBBBB; - GPIOF->CTRLH = 0xBBBB4444; - - GPIOG->CTRLL = 0x44BBBBBB; - GPIOG->CTRLH = 0x44444B44; - - /*---------------- XMC Configuration ---------------------------------------*/ - /*---------------- Enable XMC Bank1_SRAM Bank ------------------------------*/ - - XMC_Bank1->BK1CTRLR[4] = 0x00001011; - XMC_Bank1->BK1CTRLR[5] = 0x00000200; -} -#endif /* DATA_IN_ExtSRAM */ - -#ifndef SYSCLK_FREQ_HSI -#ifdef AT32F403xx -/** - * @brief Delay to wait for HSE stable. - * @note This function should be used before reading the HSESTBL flag. - * @param None - * @retval None - */ -static void WaitHseStbl(uint32_t delay) -{ - uint32_t i; - - for(i = 0; i < delay; i++) - ; -} -#endif -#endif /* SYSCLK_FREQ_HSI */ - -#ifdef SYSCLK_FREQ_HSE -/** - * @brief Selects HSE as System clock source and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockToHSE(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* Select HSE as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_HSE; - - /* Wait till HSE is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != (uint32_t)0x04) - { - } - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} -#elif defined SYSCLK_FREQ_24MHz -/** - * @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo24M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* PLL configuration: = (HSE / 2) * 6 = 24 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT6); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} -#elif defined SYSCLK_FREQ_36MHz -/** - * @brief Sets System clock frequency to 36MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo36M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* PLL configuration: PLLCLK = (HSE / 2) * 9 = 36 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT9); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} -#elif defined SYSCLK_FREQ_48MHz -/** - * @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo48M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 6 = 48 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT6); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_56MHz -/** - * @brief Sets System clock frequency to 56MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo56M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT7); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_72MHz -/** - * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo72M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT9); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_96MHz -/** - * @brief Sets System clock frequency to 96MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo96M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 12 = 96 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT12); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT12 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_108MHz -/** - * @brief Sets System clock frequency to 108MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo108M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_3; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSE/2) * 27 = 108 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT27); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT27 \ - | RCC_CFG_PLLRANGE_GT72MHZ); -#endif -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_120MHz -/** - * @brief Sets System clock frequency to 120MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo120M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_3; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 15 = 120 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT15); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT15 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_144MHz -/** - * @brief Sets System clock frequency to 144MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo144M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_4; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 18 = 144 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT18); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT18 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_150MHz -/** - * @brief Sets System clock frequency to 150MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo150M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_4; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSE * 75) / (1 * 4) = 150 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE); - RCC_PLLconfig2(PLL_FREF_8M, 75, 1, PLL_FR_4); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_168MHz -/** - * @brief Sets System clock frequency to 168MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo168M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 21 = 168 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT21 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_176MHz -/** - * @brief Sets System clock frequency to 176MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo176M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 22 = 176 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT22 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_192MHz -/** - * @brief Sets System clock frequency to 192MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo192M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 24 = 192 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT24 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_200MHz -/** - * @brief Sets System clock frequency to 200MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo200M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 25 = 200 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT25 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_224MHz -/** - * @brief Sets System clock frequency to 224MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo224M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 28 = 224 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT28 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_240MHz -/** - * @brief Sets System clock frequency to 240MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo240M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 30 = 240 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT30 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_24MHz_HSI -/** - * @brief Sets System clock frequency to 24MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo24MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* PLL configuration: PLLCLK = (HSI/2) * 6 = 24 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT6); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_36MHz_HSI -/** - * @brief Sets System clock frequency to 36MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo36MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* PLL configuration: PLLCLK = (HSI/2) * 9 = 36 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT9); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_48MHz_HSI -/** - * @brief Sets System clock frequency to 48MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo48MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 12 = 48 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT12); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_56MHz_HSI -/** - * @brief Sets System clock frequency to 56MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo56MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 14 = 56 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT14); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_72MHz_HSI -/** - * @brief Sets System clock frequency to 72MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo72MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 18 = 72 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT18); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_96MHz_HSI -/** - * @brief Sets System clock frequency to 96MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo96MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 24 = 96 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT24); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT24 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_108MHz_HSI -/** - * @brief Sets System clock frequency to 108MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo108MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_3; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 27 = 108 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT27); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT27 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_120MHz_HSI -/** - * @brief Sets System clock frequency to 120MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo120MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_3; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 30 = 120 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT30); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT30 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_144MHz_HSI -/** - * @brief Sets System clock frequency to 144MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo144MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_4; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 36 = 144 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT36); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT36 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_150MHz_HSI -/** - * @brief Sets System clock frequency to 150MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo150MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_4; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = ((HSI/2) * 150) / (1 * 4) = 150 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2); - RCC_PLLconfig2(PLL_FREF_4M, 150, 1, PLL_FR_4); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_168MHz_HSI -/** - * @brief Sets System clock frequency to 168MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo168MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 42 = 168 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT42 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} -#elif defined SYSCLK_FREQ_176MHz_HSI -/** - * @brief Sets System clock frequency to 176MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo176MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 44 = 176 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT44 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} -#elif defined SYSCLK_FREQ_192MHz_HSI -/** - * @brief Sets System clock frequency to 192MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo192MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 48 = 192 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT48 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} -#elif defined SYSCLK_FREQ_200MHz_HSI -/** - * @brief Sets System clock frequency to 200MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo200MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 50 = 200 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT50 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_224MHz_HSI -/** - * @brief Sets System clock frequency to 224MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo224MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 56 = 224 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT56 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_240MHz_HSI -/** - * @brief Sets System clock frequency to 240MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo240MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 60 = 240 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT60 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#endif - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/******************* (C) COPYRIGHT 2018 ArteryTek *****END OF FILE****/ diff --git a/.platformio/platforms/at32/examples/cmsis-blink/.gitignore b/.platformio/platforms/at32/examples/cmsis-blink/.gitignore deleted file mode 100644 index 3b8da3a..0000000 --- a/.platformio/platforms/at32/examples/cmsis-blink/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.pio -.vscode \ No newline at end of file diff --git a/.platformio/platforms/at32/examples/cmsis-blink/.travis.yml b/.platformio/platforms/at32/examples/cmsis-blink/.travis.yml deleted file mode 100644 index 7c486f1..0000000 --- a/.platformio/platforms/at32/examples/cmsis-blink/.travis.yml +++ /dev/null @@ -1,67 +0,0 @@ -# Continuous Integration (CI) is the practice, in software -# engineering, of merging all developer working copies with a shared mainline -# several times a day < https://docs.platformio.org/page/ci/index.html > -# -# Documentation: -# -# * Travis CI Embedded Builds with PlatformIO -# < https://docs.travis-ci.com/user/integration/platformio/ > -# -# * PlatformIO integration with Travis CI -# < https://docs.platformio.org/page/ci/travis.html > -# -# * User Guide for `platformio ci` command -# < https://docs.platformio.org/page/userguide/cmd_ci.html > -# -# -# Please choose one of the following templates (proposed below) and uncomment -# it (remove "# " before each line) or use own configuration according to the -# Travis CI documentation (see above). -# - - -# -# Template #1: General project. Test it using existing `platformio.ini`. -# - -# language: python -# python: -# - "2.7" -# -# sudo: false -# cache: -# directories: -# - "~/.platformio" -# -# install: -# - pip install -U platformio -# - platformio update -# -# script: -# - platformio run - - -# -# Template #2: The project is intended to be used as a library with examples. -# - -# language: python -# python: -# - "2.7" -# -# sudo: false -# cache: -# directories: -# - "~/.platformio" -# -# env: -# - PLATFORMIO_CI_SRC=path/to/test/file.c -# - PLATFORMIO_CI_SRC=examples/file.ino -# - PLATFORMIO_CI_SRC=path/to/test/directory -# -# install: -# - pip install -U platformio -# - platformio update -# -# script: -# - platformio ci --lib="." --board=ID_1 --board=ID_2 --board=ID_N diff --git a/.platformio/platforms/at32/examples/cmsis-blink/README.rst b/.platformio/platforms/at32/examples/cmsis-blink/README.rst deleted file mode 100644 index 1890ad5..0000000 --- a/.platformio/platforms/at32/examples/cmsis-blink/README.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. Copyright 2014-present PlatformIO - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -How to build PlatformIO based project -===================================== - -1. `Install PlatformIO Core `_ -2. Download `development platform with examples `_ -3. Extract ZIP archive -4. Run these commands: - -.. code-block:: bash - - # Change directory to example - > cd platform-at32/examples/cmsis-blink - - # Build project - > platformio run - - # Upload firmware - > platformio run --target upload - - # Build specific environment - > platformio run -e disco_f407vg - - # Upload firmware for the specific environment - > platformio run -e disco_f407vg --target upload - - # Clean build files - > platformio run --target clean diff --git a/.platformio/platforms/at32/examples/cmsis-blink/include/README b/.platformio/platforms/at32/examples/cmsis-blink/include/README deleted file mode 100644 index 194dcd4..0000000 --- a/.platformio/platforms/at32/examples/cmsis-blink/include/README +++ /dev/null @@ -1,39 +0,0 @@ - -This directory is intended for project header files. - -A header file is a file containing C declarations and macro definitions -to be shared between several project source files. You request the use of a -header file in your project source file (C, C++, etc) located in `src` folder -by including it, with the C preprocessing directive `#include'. - -```src/main.c - -#include "header.h" - -int main (void) -{ - ... -} -``` - -Including a header file produces the same results as copying the header file -into each source file that needs it. Such copying would be time-consuming -and error-prone. With a header file, the related declarations appear -in only one place. If they need to be changed, they can be changed in one -place, and programs that include the header file will automatically use the -new version when next recompiled. The header file eliminates the labor of -finding and changing all the copies as well as the risk that a failure to -find one copy will result in inconsistencies within a program. - -In C, the usual convention is to give header files names that end with `.h'. -It is most portable to use only letters, digits, dashes, and underscores in -header file names, and at most one dot. - -Read more about using header files in official GCC documentation: - -* Include Syntax -* Include Operation -* Once-Only Headers -* Computed Includes - -https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html diff --git a/.platformio/platforms/at32/examples/cmsis-blink/lib/Delay/delay.c b/.platformio/platforms/at32/examples/cmsis-blink/lib/Delay/delay.c deleted file mode 100644 index f7da62c..0000000 --- a/.platformio/platforms/at32/examples/cmsis-blink/lib/Delay/delay.c +++ /dev/null @@ -1,94 +0,0 @@ -/*DO NOT USE - DON'T WORK*/ - -#include "delay.h" -#include "stdio.h" - -/*delay macros*/ -#define STEP_DELAY_MS 500 - -/*delay variable*/ -static __IO float fac_us; -static __IO float fac_ms; - - -/** - * @brief initialize Delay function - * @param None - * @retval None - */ -void Delay_init() -{ - /*Config Systick*/ - SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); - fac_us=(float)SystemCoreClock/(8 * 1000000); - fac_ms=fac_us*1000; -} - -/** - * @brief Inserts a delay time. - * @param nus: specifies the delay time length, in microsecond. - * @retval None - */ -void Delay_us(u32 nus) -{ - u32 temp; - SysTick->LOAD = (u32)(nus*fac_us); - SysTick->VAL = 0x00; - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk ; - do - { - temp = SysTick->CTRL; - }while((temp & 0x01) &&! (temp & (1<<16))); - - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; - SysTick->VAL = 0X00; -} - -/** - * @brief Inserts a delay time. - * @param nms: specifies the delay time length, in milliseconds. - * @retval None - */ -void Delay_ms(u16 nms) -{ - u32 temp; - while(nms) - { - if(nms > STEP_DELAY_MS) - { - SysTick->LOAD = (u32)(STEP_DELAY_MS * fac_ms); - nms -= STEP_DELAY_MS; - } - else - { - SysTick->LOAD = (u32)(nms * fac_ms); - nms = 0; - } - SysTick->VAL = 0x00; - SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; - do - { - temp = SysTick->CTRL; - }while( (temp & 0x01) && !(temp & (1<<16)) ); - - SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk; - SysTick->VAL = 0X00; - } -} - -/** - * @brief Inserts a delay time. - * @param sec: specifies the delay time length, in seconds. - * @retval None - */ -void Delay_sec(u16 sec) -{ - u16 i; - for(i=0; i - -/*Delay function*/ -void Delay_init(void); -void Delay_us(u32 nus); -void Delay_ms(u16 nms); -void Delay_sec(u16 sec); - -#endif \ No newline at end of file diff --git a/.platformio/platforms/at32/examples/cmsis-blink/lib/README b/.platformio/platforms/at32/examples/cmsis-blink/lib/README deleted file mode 100644 index 6debab1..0000000 --- a/.platformio/platforms/at32/examples/cmsis-blink/lib/README +++ /dev/null @@ -1,46 +0,0 @@ - -This directory is intended for project specific (private) libraries. -PlatformIO will compile them to static libraries and link into executable file. - -The source code of each library should be placed in a an own separate directory -("lib/your_library_name/[here are source files]"). - -For example, see a structure of the following two libraries `Foo` and `Bar`: - -|--lib -| | -| |--Bar -| | |--docs -| | |--examples -| | |--src -| | |- Bar.c -| | |- Bar.h -| | |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html -| | -| |--Foo -| | |- Foo.c -| | |- Foo.h -| | -| |- README --> THIS FILE -| -|- platformio.ini -|--src - |- main.c - -and a contents of `src/main.c`: -``` -#include -#include - -int main (void) -{ - ... -} - -``` - -PlatformIO Library Dependency Finder will find automatically dependent -libraries scanning project source files. - -More information about PlatformIO Library Dependency Finder -- https://docs.platformio.org/page/librarymanager/ldf.html diff --git a/.platformio/platforms/at32/examples/cmsis-blink/platformio.ini b/.platformio/platforms/at32/examples/cmsis-blink/platformio.ini deleted file mode 100644 index 315b4c0..0000000 --- a/.platformio/platforms/at32/examples/cmsis-blink/platformio.ini +++ /dev/null @@ -1,35 +0,0 @@ -; PlatformIO Project Configuration File -; -; Build options: build flags, source filter, extra scripting -; Upload options: custom port, speed and extra flags -; Library options: dependencies, extra library storages -; -; Please visit documentation for the other options and examples -; http://docs.platformio.org/page/projectconf.html - -[env:generic_f403a] -platform = at32 -framework = cmsis -board = generic_f403a -monitor_speed = 115200 ;serial monitor baudrate - -;Use the following for jlink upload -upload_protocol = jlink - -;Use the following for serial upload via bootloader (PA9, PA10) -;upload_protocol = serial -;upload_speed = 115200 ;default: 115200 - -;Use the following for DFU upload via USB port -;upload_protocol = dfu -;build_flags = -; -DDFU_MODE -; -UVECT_TAB_OFFSET -; -DUSER_VECT_TAB_ADDRESS -; -DVECT_TAB_OFFSET=0x2000 ; override default vector tale to support ISR table for DFU mode - -;Use the following for custom uploader -;upload_protocol = custom -;upload_port = COM16 -;upload_speed = 115200 -;upload_command = ${platformio.packages_dir}/framework-cmsis-at32f40/tools/stm32flash/stm32flash -b $UPLOAD_SPEED -w $SOURCE -g 0x8000000 $UPLOAD_PORT \ No newline at end of file diff --git a/.platformio/platforms/at32/examples/cmsis-blink/src/main.c b/.platformio/platforms/at32/examples/cmsis-blink/src/main.c deleted file mode 100644 index 5f6f00d..0000000 --- a/.platformio/platforms/at32/examples/cmsis-blink/src/main.c +++ /dev/null @@ -1,49 +0,0 @@ -/** Light on/off pin PC13, 100Hz frequency */ - -#include "at32f4xx.h" -#include "delay.h" - - -#define BLUEPILL // BLUEPILL BLACKPILL QFP48_FLASHER - -#ifdef BLUEPILL - #define LEDPORT (GPIOC) - #define LED1 (13) - #define ENABLE_GPIO_CLOCK (RCC->APB2EN |= RCC_APB2EN_GPIOCEN) //RCC_APB2ENR_IOPCEN) - #define _MODER CTRLH - #define GPIOMODER (GPIO_CTRLH_MDE13_0) -#endif -#ifdef BLACKPILL - #define LEDPORT (GPIOB) - #define LED1 (12) - #define ENABLE_GPIO_CLOCK (RCC->APB2EN |= RCC_APB2EN_GPIOBEN) //RCC_APB2ENR_IOPCEN) - #define _MODER CTRLH - #define GPIOMODER (GPIO_CTRLH_MDE12_0) -#endif -#ifdef QFP48_FLASHER - #define LEDPORT (GPIOB) - #define LED1 (15) - #define ENABLE_GPIO_CLOCK (RCC->APB2EN |= RCC_APB2EN_GPIOBEN) //RCC_APB2ENR_IOPCEN) - #define _MODER CTRLH - #define GPIOMODER (GPIO_CTRLH_MDE15_0) -#endif - - - - - -//Alternates blue and green LEDs quickly -int main(void) -{ - Delay_init(); - - ENABLE_GPIO_CLOCK; // enable the clock to GPIO - LEDPORT->_MODER |= GPIOMODER; // set pins to be general purpose output - - for (;;) { - Delay_ms(1000); - LEDPORT->OPTDT ^= (1<CPACR |= ((3U << 10U * 2U) | /* set CP10 Full Access */ - (3U << 11U * 2U) ); /* set CP11 Full Access */ -#endif - - /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ - /* Set HSIEN bit */ - BIT_SET(RCC->CTRL, RCC_CTRL_HSIEN); - - /* Reset SW, AHBPSC, APB1PSC, APB2PSC, ADCPSC and CLKOUT bits */ - BIT_CLEAR(RCC->CFG, RCC_CFG_SYSCLKSEL | RCC_CFG_AHBPSC | \ - RCC_CFG_APB1PSC | RCC_CFG_APB2PSC | \ - RCC_CFG_ADCPSC | RCC_CFG_CLKOUT); - - /* Reset HSEEN, HSECFDEN and PLLEN bits */ - BIT_CLEAR(RCC->CTRL, RCC_CTRL_HSEEN | RCC_CTRL_HSECFDEN | \ - RCC_CTRL_PLLEN); - - /* Reset HSEBYPS bit */ - BIT_CLEAR(RCC->CTRL, RCC_CTRL_HSEBYPS); - - /* Reset PLLRC, PLLHSEPSC, PLLMUL, USBPSC and PLLRANGE bits */ - BIT_CLEAR(RCC->CFG, RCC_CFG_PLLRC | RCC_CFG_PLLHSEPSC | \ - RCC_CFG_PLLMULT | RCC_CFG_USBPSC | RCC_CFG_PLLRANGE); - - /* Reset USB768B, CLKOUT[3], HSICAL_KEY[7:0] */ - BIT_CLEAR(RCC->MISC, 0x010100FF); - - /* Disable all interrupts and clear pending bits */ - RCC->CLKINT = RCC_CLKINT_LSISTBLFC | RCC_CLKINT_LSESTBLFC | \ - RCC_CLKINT_HSISTBLFC | RCC_CLKINT_HSESTBLFC | \ - RCC_CLKINT_PLLSTBLFC | RCC_CLKINT_HSECFDFC; - -#ifdef DATA_IN_ExtSRAM - SystemInit_ExtMemCtrl(); -#endif /* DATA_IN_ExtSRAM */ - - /* Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */ - /* Configure the Flash Latency cycles and enable prefetch buffer */ - SetSysClock(); - -#ifdef VECT_TAB_SRAM - SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ -#else - SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ -#endif -} - -/** - * @brief Update SystemCoreClock variable according to Clock Register Values. - * The SystemCoreClock variable contains the core clock (HCLK), it can - * be used by the user application to setup the SysTick timer or configure - * other parameters. - * - * @note Each time the core clock (HCLK) changes, this function must be called - * to update SystemCoreClock variable value. Otherwise, any configuration - * based on this variable will be incorrect. - * - * @note - The system frequency computed by this function is not the real - * frequency in the chip. It is calculated based on the predefined - * constant and the selected clock source: - * - * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) - * - * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) - * - * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) - * or HSI_VALUE(*) multiplied by the PLL factors. - * - * (*) HSI_VALUE is a constant defined in at32f4xx.h file (default value - * 8 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * - * (**) HSE_VALUE is a constant defined in at32f4xx.h file (default value - * 8 MHz or 25 MHz, depedning on the product used), user has to ensure - * that HSE_VALUE is same as the real frequency of the crystal used. - * Otherwise, this function may have wrong result. - * - * - The result of this function could be not correct when using fractional - * value for HSE crystal. - * @param None - * @retval None - */ -void SystemCoreClockUpdate (void) -{ - uint32_t tmp = 0, pllmult = 0, pllrefclk = 0, tempcfg = 0; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFG & RCC_CFG_SYSCLKSTS; - - switch (tmp) - { - case RCC_CFG_SYSCLKSTS_HSI: /* HSI used as system clock */ - SystemCoreClock = HSI_VALUE; - break; - - case RCC_CFG_SYSCLKSTS_HSE: /* HSE used as system clock */ - SystemCoreClock = HSE_VALUE; - break; - - case RCC_CFG_SYSCLKSTS_PLL: /* PLL used as system clock */ - /* Get PLL clock source and multiplication factor ----------------------*/ - pllrefclk = RCC->CFG & RCC_CFG_PLLRC; - tempcfg = RCC->CFG; - pllmult = RCC_GET_PLLMULT(tempcfg); - - if (pllrefclk == RCC_PLLRefClk_HSI_Div2) - { - /* HSI oscillator clock divided by 2 selected as PLL clock entry */ - SystemCoreClock = (HSI_VALUE >> 1) * pllmult; - } - else - { - /* HSE selected as PLL clock entry */ - if ((RCC->CFG & RCC_CFG_PLLHSEPSC) != (uint32_t)RESET) - { - /* HSE oscillator clock divided by 2 */ - SystemCoreClock = (HSE_VALUE >> 1) * pllmult; - } - else - { - SystemCoreClock = HSE_VALUE * pllmult; - } - } - - break; - - default: - SystemCoreClock = HSI_VALUE; - break; - } - - /* Compute HCLK clock frequency ----------------*/ - /* Get HCLK prescaler */ - tmp = AHBPscTable[((RCC->CFG & RCC_CFG_AHBPSC) >> 4)]; - /* HCLK clock frequency */ - SystemCoreClock >>= tmp; -} - -/** - * @brief Configures the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers. - * @param None - * @retval None - */ -static void SetSysClock(void) -{ -#ifdef SYSCLK_FREQ_HSE - SetSysClockToHSE(); -#elif defined SYSCLK_FREQ_24MHz - SetSysClockTo24M(); -#elif defined SYSCLK_FREQ_36MHz - SetSysClockTo36M(); -#elif defined SYSCLK_FREQ_48MHz - SetSysClockTo48M(); -#elif defined SYSCLK_FREQ_56MHz - SetSysClockTo56M(); -#elif defined SYSCLK_FREQ_72MHz - SetSysClockTo72M(); -#elif defined SYSCLK_FREQ_96MHz - SetSysClockTo96M(); -#elif defined SYSCLK_FREQ_108MHz - SetSysClockTo108M(); -#elif defined SYSCLK_FREQ_120MHz - SetSysClockTo120M(); -#elif defined SYSCLK_FREQ_144MHz - SetSysClockTo144M(); -#elif defined SYSCLK_FREQ_150MHz - SetSysClockTo150M(); -#elif defined SYSCLK_FREQ_168MHz - SetSysClockTo168M(); -#elif defined SYSCLK_FREQ_176MHz - SetSysClockTo176M(); -#elif defined SYSCLK_FREQ_192MHz - SetSysClockTo192M(); -#elif defined SYSCLK_FREQ_200MHz - SetSysClockTo200M(); -#elif defined SYSCLK_FREQ_224MHz - SetSysClockTo224M(); -#elif defined SYSCLK_FREQ_240MHz - SetSysClockTo240M(); -#elif defined SYSCLK_FREQ_24MHz_HSI - SetSysClockTo24MHSI(); -#elif defined SYSCLK_FREQ_36MHz_HSI - SetSysClockTo36MHSI(); -#elif defined SYSCLK_FREQ_48MHz_HSI - SetSysClockTo48MHSI(); -#elif defined SYSCLK_FREQ_56MHz_HSI - SetSysClockTo56MHSI(); -#elif defined SYSCLK_FREQ_72MHz_HSI - SetSysClockTo72MHSI(); -#elif defined SYSCLK_FREQ_96MHz_HSI - SetSysClockTo96MHSI(); -#elif defined SYSCLK_FREQ_108MHz_HSI - SetSysClockTo108MHSI(); -#elif defined SYSCLK_FREQ_120MHz_HSI - SetSysClockTo120MHSI(); -#elif defined SYSCLK_FREQ_144MHz_HSI - SetSysClockTo144MHSI(); -#elif defined SYSCLK_FREQ_150MHz_HSI - SetSysClockTo150MHSI(); -#elif defined SYSCLK_FREQ_168MHz_HSI - SetSysClockTo168MHSI(); -#elif defined SYSCLK_FREQ_176MHz_HSI - SetSysClockTo176MHSI(); -#elif defined SYSCLK_FREQ_192MHz_HSI - SetSysClockTo192MHSI(); -#elif defined SYSCLK_FREQ_200MHz_HSI - SetSysClockTo200MHSI(); -#elif defined SYSCLK_FREQ_224MHz_HSI - SetSysClockTo224MHSI(); -#elif defined SYSCLK_FREQ_240MHz_HSI - SetSysClockTo240MHSI(); -#endif - - /* If none of the define above is enabled, the HSI is used as System clock - source (default after reset) */ -} - -/** - * @brief Setup the external memory controller. Called in startup_at32f4xx.s - * before jump to __main - * @param None - * @retval None - */ -#ifdef DATA_IN_ExtSRAM -/** - * @brief Setup the external memory controller. - * Called in startup_at32f4xx_xx.s/.c before jump to main. - * This function configures the external SRAM mounted - * (AT32 High density devices). This SRAM will be used as program - * data memory (including heap and stack). - * @param None - * @retval None - */ -void SystemInit_ExtMemCtrl(void) -{ - /* Enable XMC clock */ - RCC->AHBEN = RCC_AHBEN_SRAMEN | RCC_AHBEN_FLASHEN | RCC_AHBEN_XMCEN; - - /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ - RCC->APB2EN = RCC_APB2EN_GPIODEN | RCC_APB2EN_GPIOEEN | RCC_APB2EN_GPIOFEN | RCC_APB2EN_GPIOGEN; - - /* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ - /*---------------- SRAM Address lines configuration -------------------------*/ - /*---------------- NOE and NWE configuration --------------------------------*/ - /*---------------- NE3 configuration ----------------------------------------*/ - /*---------------- NBL0, NBL1 configuration ---------------------------------*/ - - GPIOD->CTRLL = 0x44BB44BB; - GPIOD->CTRLH = 0xBBBBBBBB; - - GPIOE->CTRLL = 0xB44444BB; - GPIOE->CTRLH = 0xBBBBBBBB; - - GPIOF->CTRLL = 0x44BBBBBB; - GPIOF->CTRLH = 0xBBBB4444; - - GPIOG->CTRLL = 0x44BBBBBB; - GPIOG->CTRLH = 0x44444B44; - - /*---------------- XMC Configuration ---------------------------------------*/ - /*---------------- Enable XMC Bank1_SRAM Bank ------------------------------*/ - - XMC_Bank1->BK1CTRLR[4] = 0x00001011; - XMC_Bank1->BK1CTRLR[5] = 0x00000200; -} -#endif /* DATA_IN_ExtSRAM */ - -#ifndef SYSCLK_FREQ_HSI -#ifdef AT32F403xx -/** - * @brief Delay to wait for HSE stable. - * @note This function should be used before reading the HSESTBL flag. - * @param None - * @retval None - */ -static void WaitHseStbl(uint32_t delay) -{ - uint32_t i; - - for(i = 0; i < delay; i++) - ; -} -#endif -#endif /* SYSCLK_FREQ_HSI */ - -#ifdef SYSCLK_FREQ_HSE -/** - * @brief Selects HSE as System clock source and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockToHSE(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* Select HSE as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_HSE; - - /* Wait till HSE is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != (uint32_t)0x04) - { - } - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} -#elif defined SYSCLK_FREQ_24MHz -/** - * @brief Sets System clock frequency to 24MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo24M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* PLL configuration: = (HSE / 2) * 6 = 24 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT6); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} -#elif defined SYSCLK_FREQ_36MHz -/** - * @brief Sets System clock frequency to 36MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo36M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* PLL configuration: PLLCLK = (HSE / 2) * 9 = 36 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT9); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} -#elif defined SYSCLK_FREQ_48MHz -/** - * @brief Sets System clock frequency to 48MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo48M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 6 = 48 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT6); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_56MHz -/** - * @brief Sets System clock frequency to 56MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo56M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 7 = 56 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT7); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_72MHz -/** - * @brief Sets System clock frequency to 72MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo72M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT9); -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_96MHz -/** - * @brief Sets System clock frequency to 96MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo96M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 12 = 96 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT12); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT12 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_108MHz -/** - * @brief Sets System clock frequency to 108MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo108M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_3; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSE/2) * 27 = 108 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT27); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLHSEPSC_HSE_DIV2 | RCC_CFG_PLLMULT27 \ - | RCC_CFG_PLLRANGE_GT72MHZ); -#endif -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_120MHz -/** - * @brief Sets System clock frequency to 120MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo120M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_3; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 15 = 120 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT15); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT15 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_144MHz -/** - * @brief Sets System clock frequency to 144MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo144M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_4; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 18 = 144 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT18); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT18 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif -#if defined (AT32F415xx) - /* Config PLL clock resource Table */ - RCC_PLLFrefTableConfig(HSE_VALUE); -#endif - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_150MHz -/** - * @brief Sets System clock frequency to 150MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo150M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_4; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSE * 75) / (1 * 4) = 150 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE); - RCC_PLLconfig2(PLL_FREF_8M, 75, 1, PLL_FR_4); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_168MHz -/** - * @brief Sets System clock frequency to 168MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo168M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 21 = 168 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT21 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_176MHz -/** - * @brief Sets System clock frequency to 176MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo176M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 22 = 176 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT22 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_192MHz -/** - * @brief Sets System clock frequency to 192MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo192M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 24 = 192 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT24 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_200MHz -/** - * @brief Sets System clock frequency to 200MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo200M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 25 = 200 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT25 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_224MHz -/** - * @brief Sets System clock frequency to 224MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo224M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 28 = 224 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT28 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_240MHz -/** - * @brief Sets System clock frequency to 240MHz and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo240M(void) -{ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSE */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSEEN); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CTRL & RCC_CTRL_HSESTBL; - StartUpCounter++; - } - while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); -#ifdef AT32F403xx - WaitHseStbl(HSE_STABLE_DELAY); -#endif - if ((RCC->CTRL & RCC_CTRL_HSESTBL) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = HSE * 30 = 240 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSE | RCC_CFG_PLLMULT30 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } - else - { - /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -} - -#elif defined SYSCLK_FREQ_24MHz_HSI -/** - * @brief Sets System clock frequency to 24MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo24MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_0; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* PLL configuration: PLLCLK = (HSI/2) * 6 = 24 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT6); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_36MHz_HSI -/** - * @brief Sets System clock frequency to 36MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo36MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV1; - - /* PLL configuration: PLLCLK = (HSI/2) * 9 = 36 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT9); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_48MHz_HSI -/** - * @brief Sets System clock frequency to 48MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo48MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 12 = 48 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT12); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_56MHz_HSI -/** - * @brief Sets System clock frequency to 56MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo56MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_1; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 14 = 56 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT14); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_72MHz_HSI -/** - * @brief Sets System clock frequency to 72MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo72MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV1; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 18 = 72 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT18); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_96MHz_HSI -/** - * @brief Sets System clock frequency to 96MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo96MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 24 = 96 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT24); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT24 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_108MHz_HSI -/** - * @brief Sets System clock frequency to 108MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo108MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_3; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 27 = 108 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT27); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT27 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } - - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif - } -} - -#elif defined SYSCLK_FREQ_120MHz_HSI -/** - * @brief Sets System clock frequency to 120MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo120MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_3; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 30 = 120 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT30); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT30 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_144MHz_HSI -/** - * @brief Sets System clock frequency to 144MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo144MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_4; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 36 = 144 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - -#if defined (AT32F415xx) - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT36); -#else - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT36 | RCC_CFG_PLLRANGE_GT72MHZ); -#endif - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_150MHz_HSI -/** - * @brief Sets System clock frequency to 150MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo150MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { -#if defined (AT32F415xx) - /* Enable Prefetch Buffer */ - FLASH->ACR |= FLASH_ACR_PRFTBE; - - /* Flash 1 wait state */ - FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); - FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_4; -#endif - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = ((HSI/2) * 150) / (1 * 4) = 150 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2); - RCC_PLLconfig2(PLL_FREF_4M, 150, 1, PLL_FR_4); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) || defined (AT32F415xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_168MHz_HSI -/** - * @brief Sets System clock frequency to 168MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo168MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 42 = 168 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT42 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} -#elif defined SYSCLK_FREQ_176MHz_HSI -/** - * @brief Sets System clock frequency to 176MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo176MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 44 = 176 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT44 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} -#elif defined SYSCLK_FREQ_192MHz_HSI -/** - * @brief Sets System clock frequency to 192MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo192MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 48 = 192 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT48 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} -#elif defined SYSCLK_FREQ_200MHz_HSI -/** - * @brief Sets System clock frequency to 200MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo200MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 50 = 200 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT50 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_224MHz_HSI -/** - * @brief Sets System clock frequency to 224MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo224MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 56 = 224 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT56 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#elif defined SYSCLK_FREQ_240MHz_HSI -/** - * @brief Sets System clock frequency to 240MHz from HSI and configure HCLK, PCLK2 - * and PCLK1 prescalers. - * @note This function should be used only after reset. - * @param None - * @retval None - */ -static void SetSysClockTo240MHSI(void) -{ - __IO uint32_t StartUpCounter = 0, HSIStatus = 0; - - /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ - /* Enable HSI */ - RCC->CTRL |= ((uint32_t)RCC_CTRL_HSIEN); - - /* Wait till HSI is ready and if Time out is reached exit */ - do - { - HSIStatus = RCC->CTRL & RCC_CTRL_HSISTBL; - StartUpCounter++; - } - while((HSIStatus == 0) && (StartUpCounter != 0xFFFF)); - - if ((RCC->CTRL & RCC_CTRL_HSISTBL) != RESET) - { - HSIStatus = (uint32_t)0x01; - } - else - { - HSIStatus = (uint32_t)0x00; - } - - if (HSIStatus == (uint32_t)0x01) - { - /* HCLK = SYSCLK */ - RCC->CFG |= (uint32_t)RCC_CFG_AHBPSC_DIV1; - - /* PCLK2 = HCLK/2 */ - RCC->CFG &= 0xFFFFC7FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB2PSC_DIV2; - - /* PCLK1 = HCLK/2 */ - RCC->CFG &= 0xFFFFF8FF; - RCC->CFG |= (uint32_t)RCC_CFG_APB1PSC_DIV2; - - /* PLL configuration: PLLCLK = (HSI/2) * 60 = 240 MHz */ - RCC->CFG &= RCC_CFG_PLLCFG_MASK; - RCC->CFG |= (uint32_t)(RCC_CFG_PLLRC_HSI_DIV2 | RCC_CFG_PLLMULT60 | RCC_CFG_PLLRANGE_GT72MHZ); - - /* Enable PLL */ - RCC->CTRL |= RCC_CTRL_PLLEN; - - /* Wait till PLL is ready */ - while((RCC->CTRL & RCC_CTRL_PLLSTBL) == 0) - { - } -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(ENABLE); -#endif - /* Select PLL as system clock source */ - RCC->CFG &= (uint32_t)((uint32_t)~(RCC_CFG_SYSCLKSEL)); - RCC->CFG |= (uint32_t)RCC_CFG_SYSCLKSEL_PLL; - - /* Wait till PLL is used as system clock source */ - while ((RCC->CFG & (uint32_t)RCC_CFG_SYSCLKSTS) != RCC_CFG_SYSCLKSTS_PLL) - { - } -#ifdef AT32F403xx - WaitHseStbl(PLL_STABLE_DELAY); -#endif -#if defined (AT32F413xx) || defined (AT32F403Axx)|| \ - defined (AT32F407xx) - RCC_StepModeCmd(DISABLE); -#endif - } -} - -#endif - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/******************* (C) COPYRIGHT 2018 ArteryTek *****END OF FILE****/ diff --git a/.platformio/platforms/at32/platform.json b/.platformio/platforms/at32/platform.json index d15bad1..319b797 100644 --- a/.platformio/platforms/at32/platform.json +++ b/.platformio/platforms/at32/platform.json @@ -1,6 +1,6 @@ { "name": "at32", - "title": "AT32", + "title": "Artery AT32", "description": "The AT32 family of 32-bit Flash MCUs based on the ARM Cortex-M processor is designed to offer new degrees of freedom to MCU users. It offers a 32-bit product range that combines very high performance, real-time capabilities, digital signal processing, and low-power, low-voltage operation, while maintaining full integration and ease of development.", "homepage": "https://www.arterychip.com/en/index.jsp", "license": "Apache-2.0", @@ -18,7 +18,7 @@ "type": "git", "url": "https://github.com/platformio/platform-at32.git" }, - "version": "1.0.0", + "version": "1.0.1", "frameworks": { "cmsis": { "package": "framework-cmsis", @@ -51,21 +51,15 @@ "framework-cmsis-at32f40": { "type": "framework", "optional": true, - "owner": "platformio", - "version": "~1.0.0" + "owner": "martinloren", + "version": "https://github.com/martinloren/framework-cmsis-at32f40.git" }, - "framework-cmsis-at32f42": { - "type": "framework", - "optional": true, - "owner": "platformio", - "version": "~1.0.0" - }, "framework-cmsis-at32f43": { "type": "framework", "optional": true, - "owner": "platformio", - "version": "~1.0.0" - }, + "owner": "martinloren", + "version": "https://github.com/martinloren/framework-cmsis-at32f43.git" + }, "tool-openocd": { "type": "uploader", "optional": true, diff --git a/JLinkDevices/AT/AT32F435xGx/AT32F435_1024.FLM b/JLinkDevices/AT/AT32F435xGx/AT32F435_1024.FLM new file mode 100644 index 0000000000000000000000000000000000000000..5bb5d7d6c8f63642a2388c243bab99a3c9282033 GIT binary patch literal 12428 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 a#SfrYQo;t=pM!3UyZH>}7nmx_$8P~!+>vPj literal 0 HcmV?d00001 diff --git a/JLinkDevices/AT/AT32F435xGx/AT32F435_960.FLM b/JLinkDevices/AT/AT32F435xGx/AT32F435_960.FLM new file mode 100644 index 0000000000000000000000000000000000000000..71d5cbf31960beaffb7b1d1e41da5316ebf0c952 GIT binary patch literal 12424 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 literal 0 HcmV?d00001 diff --git a/JLinkDevices/AT/AT32F435xGx/AT32F435_USD_512.FLM b/JLinkDevices/AT/AT32F435xGx/AT32F435_USD_512.FLM new file mode 100644 index 0000000000000000000000000000000000000000..74a39cea47447d74fd52372f39b242c97e42705f GIT binary patch literal 12124 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 literal 0 HcmV?d00001 diff --git a/JLinkDevices/AT/AT32F435xGx/Devices.xml b/JLinkDevices/AT/AT32F435xGx/Devices.xml new file mode 100644 index 0000000..b337d31 --- /dev/null +++ b/JLinkDevices/AT/AT32F435xGx/Devices.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/JLinkDevices/AT/AT32F437xGx/AT32F437_1024.FLM b/JLinkDevices/AT/AT32F437xGx/AT32F437_1024.FLM new file mode 100644 index 0000000000000000000000000000000000000000..55ddf7436d4d2efaa3d9fdaf70f7187b3b7def6f GIT binary patch literal 12428 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 literal 0 HcmV?d00001 diff --git a/JLinkDevices/AT/AT32F437xGx/AT32F437_192.FLM b/JLinkDevices/AT/AT32F437xGx/AT32F437_192.FLM new file mode 100644 index 0000000000000000000000000000000000000000..3b6b40b513ee290d5545360ca23ca8a3fab081ed GIT binary patch literal 11976 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 SAAoL*yY(FA7nmx_$A1A)C6QzR literal 0 HcmV?d00001 diff --git a/JLinkDevices/AT/AT32F437xGx/AT32F437_4032.FLM b/JLinkDevices/AT/AT32F437xGx/AT32F437_4032.FLM new file mode 100644 index 0000000000000000000000000000000000000000..a3b2a96f41be8222c42c776afa7eac8e5f518e2f GIT binary patch literal 12424 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 literal 0 HcmV?d00001 diff --git a/JLinkDevices/AT/AT32F437xGx/AT32F437_USD_4096.FLM b/JLinkDevices/AT/AT32F437xGx/AT32F437_USD_4096.FLM new file mode 100644 index 0000000000000000000000000000000000000000..c5af1958a29c7ab36437c72b777b9ddade858ded GIT binary patch literal 12124 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 CbH5e< literal 0 HcmV?d00001 diff --git a/JLinkDevices/AT/AT32F437xGx/AT32F437_USD_512.FLM b/JLinkDevices/AT/AT32F437xGx/AT32F437_USD_512.FLM new file mode 100644 index 0000000000000000000000000000000000000000..d9a09cb927fd715070f2d1c12dfc1ec59b664d7a GIT binary patch literal 12124 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 literal 0 HcmV?d00001 diff --git a/JLinkDevices/AT/AT32F437xGx/Devices.xml b/JLinkDevices/AT/AT32F437xGx/Devices.xml new file mode 100644 index 0000000..3ff645a --- /dev/null +++ b/JLinkDevices/AT/AT32F437xGx/Devices.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 2333677..732e79e 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,23 @@ Released specifically for the latest **[AT32F403A](https://www.arterychip.com/en ## Why AT32F403A ![MCU Comparison](Docs/MCU_Comparison.jpg "MCU Comparison") -## Instructions 说明 -You need to have Visual Studio Code with PlatformIO installed (tested with PlatformIO v.2.4.0). -1) Copy the folders under .platformio into your .platformio folder (ie: C:\Users\(username)\.platformio)
-将 .platformio 下的文件夹复制到您的 .platformio 文件夹中(即:C:\Users\(用户名)\.platformio) + +## Installation 安装 +You need to have Visual Studio Code with PlatformIO installed (tested with PlatformIO Core v.6.1.16). +1) Copy the folders under `.platformio` into your .platformio folder (ie: `C:\Users\\.platformio`) +将 .platformio 下的文件夹复制到您的 .platformio 文件夹中(即:`C:\Users\<用户名>\.platformio`) + +#### Install AT32 Configurations for J-Link (last update from ArteryICPProgrammer V3.0.19) +In order to make the J-Link software aware of the new device, copy the folder `JLinkDevices` in the the central JLinkDevices folder (Windows): `C:\Users\\AppData\Roaming\SEGGER\` + +Currently available: +- AT32F435xGx +- AT32F437xGx + +More details about custom device configuration for J-Link are available [here](https://wiki.segger.com/J-Link_Device_Support_Kit). + + +## Usage Instructions 使用说明 3) Open Visual Studio Code, you should see AT32 Platform among the available platforms
打开 Visual Studio Code,在可用平台中应该可以看到 AT32 平台 4) Open one of the example folder and try to compile / upload
diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_1024.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_1024.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_1024.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_1024.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_256.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_256.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_256.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_256.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_512.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_512.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_512.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_512.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP0_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE1_REAMP1_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP0_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_EXT_TYPE2_REAMP1_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_UOB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_UOB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_UOB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403A_UOB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_1024.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_1024.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_1024.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_1024.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_128.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_128.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_128.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_128.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_256.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_256.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_256.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_256.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_512.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_512.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_512.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_512.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE1_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_EXT_TYPE2_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_UOB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_UOB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_UOB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F403_UOB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_1024.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_1024.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_1024.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_1024.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_256.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_256.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_256.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_256.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_512.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_512.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_512.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_512.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP0_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE1_REAMP1_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP0_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_EXT_TYPE2_REAMP1_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_UOB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_UOB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_UOB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F407_UOB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_128.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_128.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_128.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_128.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_256.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_256.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_256.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_256.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_64.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_64.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_64.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_64.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP0_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE1_REAMP1_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP0_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_16MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_16MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_16MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_16MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_1MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_1MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_1MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_1MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_2MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_2MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_2MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_2MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_4MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_4MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_4MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_4MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_8MB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_8MB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_8MB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_EXT_TYPE2_REAMP1_8MB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_UOB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_UOB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_UOB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F413_UOB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_128.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_128.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_128.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_128.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_256.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_256.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_256.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_256.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_64.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_64.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_64.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_64.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_SYSMEM_AP.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_SYSMEM_AP.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_SYSMEM_AP.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_SYSMEM_AP.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_UOB.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_UOB.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_UOB.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F415_UOB.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_16.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_16.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_16.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_16.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_32.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_32.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_32.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_32.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_64.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_64.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_64.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_64.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_BOOTMEM_AP.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_BOOTMEM_AP.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_BOOTMEM_AP.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_BOOTMEM_AP.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_USD.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_USD.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_USD.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F421_USD.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_128.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_128.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_128.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_128.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_256.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_256.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_256.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_256.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_64.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_64.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_64.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_64.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_BOOTMEM_AP.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_BOOTMEM_AP.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_BOOTMEM_AP.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_BOOTMEM_AP.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_USD.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_USD.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_USD.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F423_USD.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_16.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_16.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_16.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_16.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_32.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_32.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_32.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_32.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_64.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_64.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_64.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_64.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_BOOTMEM_AP.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_BOOTMEM_AP.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_BOOTMEM_AP.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_BOOTMEM_AP.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_USD.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_USD.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_USD.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F425_USD.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_1024.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_1024.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_1024.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_1024.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_192.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_192.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_192.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_192.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_256.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_256.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_256.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_256.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_4032.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_4032.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_4032.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_4032.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_960.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_960.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_960.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F435_960.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_1024.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_1024.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_1024.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_1024.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_192.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_192.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_192.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_192.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_256.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_256.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_256.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_256.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_4032.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_4032.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_4032.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_4032.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_960.FLM b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_960.FLM similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_960.FLM rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F437_960.FLM diff --git a/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F4xx.JLinkScript b/old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F4xx.JLinkScript similarity index 100% rename from .platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F4xx.JLinkScript rename to old-jlink/.platformio/packages/tool-jlink/Devices/AT/AT32F4xx/AT32F4xx.JLinkScript diff --git a/JLINK.md b/old-jlink/JLINK.md similarity index 98% rename from JLINK.md rename to old-jlink/JLINK.md index c80cdf4..633c269 100644 --- a/JLINK.md +++ b/old-jlink/JLINK.md @@ -1,4 +1,5 @@ # Instructions for JLINK Configuration +(Dismissed, not valid with latest version of tool-jlink package) ## 1. Add AT .FLM Files Copy the `.platformio\packages\tool-jlink\Devices\AT\AT32F4xx` folder from Github here to your .platformio folder.